Asignar la salida de un comando (no el estado de retorno) a una variable
variable=$(who)
variable=`who`
Las comillas invertidas son más portables, no confundir con comillas simples ' que sirven para evitar expansión de variables, pero la construcción $(...) es más legible. xargs puede capturar la salida de un comando para convertirla en la lista de argumentos de un programa, tal como lo hace set
Expansión aritmética
El comando expr permite la ejecución de algunos comandos aritméticos, pero debe invocar un nuevo shell para ejecutarse. La alternativa, más eficiente es $((...))
#!/bin/sh
x=0 # "0" es una cadena de texto
while [ "$x" -ne 10 ]; do
echo $x
x=$(($x+1)) # pero aquí se trata como un número
done
exit 0
Expansión de parámetros
Si intentamos ejecutar esto
#!/bin/sh
for i in 1 2
do
mi_programa $i_tmp
done
obtendremos un error
mi_programa: too few arguments
Lo que ha ocurrido es que se ha intentado sustituir el valor de la variable $i_tmp, que no existe. En consecuencia no se transmite ningún parámetro a mi_programa . Hay que proteger la expansión del nombre de variable que nos interesa ${i}_tmp Algunas sustituciones
${param:-default} | Si param es nulo toma el valor default | |
${#param} | Proporciona la longitud de param | |
${param%word} | Desde el final, elimina la parte más breve de param que se corresponde con word y envía el resto. | |
${param%%word} | Desde el final, elimina la parte más larga de param que se corresponde con word y envía el resto. | |
${param#word} | Desde el principio, elimina la parte más breve de param que se corresponde con word y envía el resto. | |
${param##word} | Desde el principio, elimina la parte más larga de param que se corresponde con word y envía el resto. |
Cómo funciona
#!/bin/sh
unset foo
echo ${foo:-bar}
foo=fud
echo ${foo:-bar}
foo=/usr/bin/X11/startx
echo ${foo#*/}
echo ${foo##*/}
foo=/usr/local/etc/local/networks
echo ${foo%local*}
echo ${foo%%local*}
exit 0
esta es la salida
jorge@debian:~$ sh prueba.sh
bar
fud
usr/bin/X11/startx
startx
/usr/local/etc/
/usr/
tiene unas aplicaciones bastante útiles
for doc in *.html ; do ; html2pdf $doc > $(doc%html)pdf ; done
No hay comentarios:
Publicar un comentario