Las comillas en los script bash
En esta cuarta entrega del curso de Scripting Linux usando Bash vamos a hablaros de los diferentes tipos de comillas (doble, simple, acento grave) , según la que utilicemos el Shell realiza una interpretación u otra del contenido que encierran dentro
“date”
‘date’
`date`
Comillas simples
El contenido se interpreta de forma literal.
SALUDO='Hola $USER, que tal?'
echo $SALUDO
No produce el resultado esperado Hola jose, que tal?
Comillas dobles
Interpreta las referencias a variable, las explosiona, poniendo en su lugar su contenido:
SALUDO="Hola $USER, que tal?"
echo "$SALUDO tu directorio de trabajo es $HOME"
El resultado será algo parecido a Hola jose, que tal? tu directorio de trabajo es /home/jose
Acento grave → sustitución de orden
La sustitución de orden permite usar la salida de una orden para asignarla a una variable y tratarla, por ejemplo.
Hay dos formas de utilizarla, una de ellas es encerrando la orden con el acento grave:
- `orden`
- $(orden)
Bash realiza la expansión ejecutando la orden y reemplazando con la salida estándar de la ejecución misma.
En este ejemplo, alimentamos 2 variables con el resultado de ejecutar 2 comandos:
HOY=`date`
DIR=`pwd`
Si usáis echo para ver su contenido:
echo $HOY $DIR dom abr 19 09:54:09 CEST 2015 /home/jose
Y esto es todo, os animo a seguir probando todo lo que hemos visto hasta ahora, en las cuatro entregas que llevamos, en un script de tipo RETO,
RETO: Script que reciba cómo parámetros 3 números, compruebe si realmente le han pasado 3 parámetros, en caso afirmativo que devuelva el resultado de la suma de esos tres números, y en caso negativo informe al usuario del uso correcto del script. Sería conveniente y lo dejamos como plus, que comprobase que los parámetros son realmente números.
Ejemplo de ejecución correcta:
./reto.sh 2 2 2
6Ejemplo de ejecución incorrecta:
./reto.sh a b
Uso: ./reto.sh numero1 numero2 numero3
Pingback: Variable de entorno PATH | SOSpedia punto net
Me encuentro con una duda, tengo una variable que contiene caracteres especiales como $ y quero que sea parte de una instruccion sed, pero al parecer algo sale mal ya que no logro hacer la sustitucion de cadenas con sed.
Ej.
a=’1$2$3$4′
b=hola
tengo un archivo que contiene:
$1$2$3$4 mundo
y quiero remplazar la cadena 1$2$3$4 por hola quedando el archivo con el siguiente contenido:
hola mundo
para ello realizo la intruccion sed
sed -i "s@$a@$b@g" archivo
sin embargo no realiza la sustitucion, pienso que tal vez hay que especificar de algun modo que el contenido de la variable $a lo tome como una cadena y descarte los caracteres especiales.
Hola Maximiliano, yo acabo de probar lo que dices y salvo un pequeño error funciona:
Estoy usando la versión sed (GNU sed) 4.2.2
El error es que en el archivo sobra un $ delante del 1, por eso “escupe” $hola mundo, pero la sustitución funciona.
¿Qué distribución estás usando? Imagino que el Shell que usas es el Bash.
Por si te sirve de ayuda, dado que el carácter $ tiene su significado en las expresiones regulares (final de línea), prueba a escaparlo usando el carácter \, por ejemplo \$
Prueba por ejemplo a definir la variable a así:
a='1\$2\$3\$4'
y después:
sed "s/$a/$b/g" archivo
Yo utilizo la barra / y no la arroba @
Pingback: Bonus Pack 2018: Recopilación de artículos de sospedia.net – jblanco.org
Pingback: Bonus Pack 2018: Recopilación de artículos de sospedia.net – Jose Blanco Vega
¿y la respuesta del repo?
del RETO
¿Pero lo has intentado Hernan?
Es que sino no tiene gracia, pero si insistes lo publico, una pista:
if [ TEST ]; then
else
fi
Mírate este capítulo: https://sospedia.net/scripts-linux-bash-segunda-entrega/
Saludos