Shell Script: modificando variables

tengo un problema, stoy haciendo un script, y kiero hacer lo siguiente:

si la variable $1 pongamos k es "bluemen.0.6.4-2.tar.gz"

lo k pretendo es, k en un punto del script escriba la variable sin el .tar.gz, y no se k comando utilizar.

no se si me he explicado bien.

un saludo, muxas gracias :D
Pues la verdad es que no. No te has explicado nada bien. :P

En fin, tienes varias soluciones:

1) Puedes usar (e)grep para cortar la salida de ese ficherito por donde quieras. Descartas lo que no te valga y listo.

2) Puedes tratar esa variable como una cadena, darle una longitud máxima al array y lo que sobre lo tira.

3) Ésta es, para mí, la más elegante. $2="bluemen.0.6.4-2" ;)
jeje, mexplico:

la idea es crear un script k, a partir de un source, lo compile y "debianice" con alien.

y entonces, por ejemplo:
$ ./debianize.sh bluemen0.6.4-src.tar.gz (en este caso $1 sera el pakete bluemen0.6.4-src.tar.gz)

luego, cuando el script trata de hacer un
cd nombredelacarpeta

me encuentro con el problema de k no puedo hacer un "cd $1" porke la carpeta se llama bluemen0.6.4 y claro...

sobre grep, nunca lo he usado, he hecho un man grep, pero no me papo de nada :$

espero haberme explicado ahora mejor.

un salut
Expansión de variables (man bash):

Por ejemplo:

bash$ ( A="loquesea.tar.gz" ; echo ${A%.tar.gz} )
loquesea
muxas gracias, ya he salvado un buen escollo.

ahora se me presenta otro, ke, a ver si me podrias exar una mano:

pongamos k en una carpeta tenemos los archivos y carpetas:

doom3-linux-1.1.1286.x86.run
easytag-1.0-3.101mcnl.i586.rpm
Editores
jre-1_5_0_01-linux-i586.rpm
kernel-source-2.6-2.6.8.1-12mdk.i586.rpm
kooldock-0.3-1mdk.i586.rpm
linuxq3apoint-1.32b-3.x86.run
Multimedia
NVIDIA-Linux-x86-1.0-6629-pkg1.run
nvu-0.80-1mcnl.i586.rpm
nvu_0.80-2_i386.deb
skype-0.93.0.3-mdk.i586.rpm
UltraAcousticKit.tar.gz
unrar-nonfree_3.4.3-1_i386.deb
VMware-workstation-4.5.2-8848.i386.rpm
wolf-linux-1.33.x86.run
xmms-wma-1.0.4-1.i386.rpm

y keremos k buske un archivo/caperta con un nombre "parecido" a $1 y, a ese archivo/carpeta parecido le asigne el valor $file

es esto posible?

un salut y muxisimas gracias por la ayuda
Define parecido.

[ PD: En linux NO EXISTEN LAS CARPETAS, se llaman directorios. ]
Ferdy escribió:Define parecido.

[ PD: En linux NO EXISTEN LAS CARPETAS, se llaman directorios. ]


parecido, por ejemplo:
$1=amsn0.94-src.tar.gz

y k el directorio [ayay] se llame amsn094

un salut
Lo que puedes hacer es probar con algunos patrones típicos. Suena a Imposible o Inviable

Salu2.Ferdy
Ferdy escribió:Lo que puedes hacer es probar con algunos patrones típicos. Suena a Imposible o Inviable

Salu2.Ferdy


suponia k seria demasiado pedir k el shell "adivinase" la carpeta k mas se parece, jeje.
y k tal de esta forma (usando el ejemplo anterior)

coja los primeros 4 "digitos" de la variable $1, y haga un "autocompletar" (lo k seria apretar TAB mientras escribimos en nombre de un fichero en el shell) y almacene ese "autocompletado" como $file

seria esto posible?
coja los primeros 4 "digitos" de la variable $1, y haga un "autocompletar" (lo k seria apretar TAB mientras escribimos en nombre de un fichero en el shell) y almacene ese "autocompletado" como $file


Mmmm:

--(ferdy@posidon$ dev  )-- ls
bmp-lirc  cursesnake  charlas manual  nbsmtp ferdyx-org
--(ferdy@posidon$ dev  )-- ( v=nbsmtp-0.98.tar.bz2 ;
> e=${v%.*.*} ;
> d=${e:0:3} ;
> a=$(ls -d ${d}*) ;
> echo ${a} )
nbsmtp
--(ferdy@posidon$ dev  )--


PD: Ni que decir tiene que es un hack muy feo :P

Edit: Typo fixed.

Salu2.Ferdy
Ferdy escribió:
Mmmm:

--(ferdy@posidon$ dev  )-- ls
bmp-lirc  cursesnake  charlas manual  nbsmtp ferdyx-org
--(ferdy@posidon$ dev  )-- ( v=nbsmtp-0.98.tar.bz2 ;
> e=${v%.*.*} ;
> d=${e:0:3} ;
> a=$(ls -d ${d}*) ;
> echo ${a} )
nbsmtp
--(ferdy@posidon$ dev  )--


PD: Ni que decir tiene que es un hack muy feo :P

Edit: Typo fixed.

Salu2.Ferdy


thanks, funciona de lujo
Yo para el procesamiento de información usaría el awk , programación estilo C , rápido y acepta multitud de expresiones regulares y funciones...
Y para la eliminación y traducción de de caracteres usaría tr en la shell...

Pero vamos, es sólo un comentario que me ha venido a raiz del hilo [ayay]

Salu2
¿Por qué invocar un proceso adicional si bash lo hace bien?

Salu2.Ferdy
Ferdy escribió:¿Por qué invocar un proceso adicional si bash lo hace bien?


Puestos a ahorrarnos procesos adicionales:

a=${d}*
Puestos a ahorrarnos procesos adicionales:


No lo puse así porque eso te muestra tambien lo que no es un directorio y creo que no es lo que buscamos. Pero es que yo habia metido el gambazo y ls -d lo que realmente hace es mostrar los directorios como si fueran ficheros... mamazas que es uno.

( v=nbsmtp-0.98.tar.gz ;
e=${v%.*.*} ;
d=${e:0:3} ;
echo ${d} ;
a=$(find . -maxdepth 1 -type d -name "${d}*") ;
echo ${a} )


Eso si lo hace bien.

Saludos.Ferdy
15 respuestas