Scripts bash
Enviado por okichurch • 6 de Junio de 2023 • Apuntes • 4.599 Palabras (19 Páginas) • 180 Visitas
SCRIPTS
para finalizar= exit
# para hacer comentarios, solo afecta a la linea que lo lleva
shebang
Es una linea no obligatoria, si existe es la primera y tiene la ruta absoluta del interprete de comandos que debe utilizarse para ejecutar ese script tras una almohadilla y admiración.
Esta linea nos va a dirigir la ejecución del script al interprete correcto si lo tenemos instalado de manera automática
#!bin/bash
el shebang es el único que no es comentario y lleva almohadilla delante
echo -e “texto /n (salto de linea)
texto”
Si usásemos sh como interprete sería “texto /n texto”, es decir, habría que usar comillas.
VARIABLES
No hay que declararlas ni tienen tipo.
#!/bin/bash
variable1=15
variable2=hola
echo la variable1 vale $variable1
echo la variable2 vale $variable2
resultado:
la variable1 vale 15
la variable2 vale hola
Si la variable tiene espacios, se encierra su valor entre comillas
variable3=”odio los scritpts”
variable4=’con todas mis fuerzas’
echo $variable3
echo $variable4
resultado:
odio los scripts
con todas mis fuerzas
variable de solo lectura:
declare -r variable=valor
El valor no va a ser modificado durante la ejecución del script
#!/bin/bash
declare -r temperatura=28
echo Temperatura $temperatura
temperatura=30
echo $temperatura
Resultado:
oscar@oscar-VirtualBox:~/scripts$ ./temperatura.sh
Temperatura 28
./temperatura.sh: línea 7: temperatura: variable de sólo lectura
28
PARA LLAMAR A UN SCRIPT DESDE OTRO
desde el scritpt inicial
ruta/nombrescript
si estuviesen en la misma carpeta
./nombredelscript
TIPOS
Aunque no es obligatorio, podemos declarar un tipo para la variable. De esa manera, siempre va a tener que recibir un valor compatible con el tipo asignado.
Declare -i variable
esta variable va a ser de tipo integer y su valor siempre debe estar dentro del rango de un entero, en caso de que asignemos un alfanumerico su valor será cero, en caso de que sea un valor tipo float dará error
GNU nano 4.8 temperatura.sh
#!/bin/bash
declare -i temperatura
temperatura=28
echo Temperatura $temperatura
temperatura=3.5
echo $temperatura
temperatura=aserf
echo $temperatura
Resultado:
Temperatura 28
./temperatura.sh: línea 9: 3.5: error sintáctico: operador aritmético no válido (el elemento de error es ".5")
28
0
Las variables tienen un valor sólo para su script, si llamamos a otro script desde el primero no va a mostrar el valor de las variables del primer script en el segundo.
Para que exporten el valor hay que poner delante de la variable export
VARIABLES DE SISTEMA
las podemos ver introduciendo el comando set en el cmd
Para ver el resultado de una variable del sistema usamos $?
EXPRESIONES
Ejemplo
oscar@oscar-VirtualBox:~/scripts$ ls
llamado.sh primero.sh temperatura.sh variables.sh
oscar@oscar-VirtualBox:~/scripts$ $?
0: no se encontró la orden
TEST el comando test sirve para evaluar expresiones. Si se cumple la condición da como resultado 0.
En la ayuda hay múltiples opciones de uso
oscar@oscar-VirtualBox:~/scripts$ test -d temperatura.sh
oscar@oscar-VirtualBox:~/scripts$ $?
1: no se encontró la orden
Como temperatura.sh no es un directorio no me va a dar cero, porque no se cumple la condición
num1=16
num2=17
if test $num1 -eq $num2
then
echo números iguales
else
echo números diferentes
fi
resultado:
números diferentes
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#!/bin/bash
echo dame el primer valor
read num1
echo dame el segundo valor
read num2
if test $num1 -eq $num2
then
echo Los números son iguales
else
echo los números son diferentes
fi
si ponemos echo -n nos pide el dato en la misma linea, sin él hace salto de línea
Esta linea
if test $num1 -eq $num2
Podríamos sustituirla por esta
if [ $num1 -eq $num2 ]
Ojo, muy importante respetar los espacios entre los corchetes y el código, de otra forma no funcionaría. Es recomendable usar los corchetes en vez de test
man test y nos saldrá la ayuda con todas las opciones (comparacion cadenas, recorridos, etc)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
comparar cadenas
#!/bin/bash
echo dame un nombre:
read num1
if test $num1 = PEPE
then
echo Es PEPE
else
echo No es PEPE
fi
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
cadena vacía
#!/bin/bash
echo dame un nombre:
read num1
if test -z $num1
then
echo cadena vacia
else
echo cadena no vacia
fi
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#!/bin/bash
echo dame un nombre de una ciudad:
read num1
if test “$num1” = "CIUDAD REAL"
then
echo Acertaste
else
echo Fallaste
fi
Importante tener en cuenta las comillas cuando trabajamos con alfanuméricos (el espacio es alfanumérico) para que no rompa y el espacio después del =
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
...