Scripts bash
okichurchApuntes6 de Junio de 2023
4.599 Palabras (19 Páginas)222 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
echo dame un numero:
read num1
if test -z $num1
then
echo no has introducido el valor de la variable
echo el script finalizara
exit
fi
if test $num1 -eq 20
then
echo Acertaste
else
echo Fallaste
fi
Comprobamos que la variable tiene valor, si se le diese al enter sin introducir el valor de la variable la comparación sería :$num1 por lo que el programa rompería
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
VALIDACIONES
Es recomendable el uso de expresiones regulares, que investiguemos sobre ello
OPERADORES LOGICOS
echo dame un dato:
read a
echo dame otro:
read b
if test $a -gt 7 -a $b -lt 3
then
echo se cumple que a es mayor que siete y b menor que tres
else
echo a no es mayor que siete y b no es menor que tres
fi
if test $a -gt 7 -o $b -lt 3
then
echo se cumple que a es mayor que siete o b menor que tres
else
echo a no es mayor que siete y b no es menor que tres
fi
-a para el and
-o para el or
echo dame un dato:
read a
echo dame otro:
read b
echo dame otro:
read c
# se tiene que dar que a sea mayor que siete o b menor que tres y c igual a>
if [ \( $a -gt 7 -a $b -lt 3 \) -a $c -eq 20 ]
then
echo cumple
else
echo no cumple
fi
Ojo, para que los parentesis funcionen hay que escaparlos con el slash
negacion:
echo dame un dato:
read a
if [ ! $a -gt 40 ]
then
echo menor de cuarenta
else
echo mayor de cuarenta
ojo con los espacios, si la admiración que da la negación va pegada a la variable rompe el programa
EXPRESIONES ARITMÉTICAS
expr
Ojo, hay que escapar la multiplicación con el slash \*
para sumar uno a la variable total
total = `expr $total + 1`
echo precio de manzana
read unidad
echo numero de manzanas
read manzanas
total=`expr $unidad \* $manzanas`
echo el precio total es $total
OJO MUY IMPORTANTE LOS ESPACIOS, SI VA UNO ENTRE EL IGUAL Y LAS COMILLAS DE EJECUCIÓN ROMPE
pero si usamos let ya no hay que usar comillas de ejecución
...