GNU/Linux LPIC-1 / 24 de Octubre de 2018: bash shell scripting

 

https://q2dg.github.io/LPIC1/

No es necesario que los scripts tengan la extensión “.sh”: se ejecutarían igual, pero usualmente se pone.

exit acaba el programa:

#!/bin/bash
echo -e "Hola\tamic!"
ls
#Això és un comentari
date
exit
echo "Adéu"
#!/bin/bash
x=32
y=$x
z=x
echo x y z
echo $x $y $z</meta http-equiv="content-type" content="text>
#!/bin/bash
echo -n "Introdueix un valor: "
#El valor introduït s'assignarà a la variable anomenada X
read X
echo -n "Introdueix dos valors separats per espais: "
#Cada valor separat per espais s'assignarà a una variable diferent
#Si a la última variable encara queden valors, s'assignaran tots a aquesta
read Y Z
echo -n "Tens cinc segons per introduïr un valor secret: "
read -s -t 5 SECRET
echo -e "\nX val $X, Y val $Y i Z val $Z \nEl secret val $SECRET"


-s => silent

 

#!/bin/bash

x=32
y=$x


echo ${y}hola

 

Operaciones matemáticas en Bash, entre doble paréntesis:
#!/bin/bash

x=32
y=33

z=$(($x+$y))
echo $z

Calculadoras para terminal: bc (binary calculator):

Le pasamos los cálculos al bc:

#!/bin/bash
echo "3+4" | bc
echo "4/6;3+4" | bc
echo "scale=4;4/6;3+4" | bc

 

x pasará a valer lo que me devuelva el ls:

#!/bin/bash
x=$(ls)


Averiguamos ruta de un programa, con lo que me devuelva el which:

grep -c “sadfddsfddsf” /etc/fstab

 

if: se podría poner con corchetes simples (no dobles), que es la notación clásica, que es la más compatible con todos los shells. Bash tieen la notacion de 2 corchetes, que permite más cosas. Pero si ese script se ejecuta en otro que no sea Bash, no funcionará con doble corchetes.

#!/bin/bash

ge, greater or equal
gt, greater than
ne, non equal (diferente)
lt, less than

 

“arx1” -ef “arx2” : es compleix si els dos arxius apunten al mateix inode (són enllaços forts)
“arx1” -nt “arx2” : es compleix si arx1 és més nou que arx2 (si sa data de modificació és posterior)
“arx1” -ot “arx2” : es compleix si arx1 és més vell que arx2 (si sa data de modificació és anterior)

-s “arxiu” : es compleix si existeix i el seu tamay és major que 0

nt: newer than
ot: older than
-s “arxiu”: size, si el archivo tiene tamaño

 

Podemos concatenar instrucciones con ;

rm $1 && echo “Ahora ya no existe”
&& Concatena. Ejecuta los dos comandos. Si funciona el comando anterior, tira para adelante, si no, se detiene:

Doble tuberia, es el “o”:
Ejecuta el primer comando que funcione bien. Ideal para “planes B”:

Xul.leta amb regles d’escriptura general
*En una assignació de valors a variables, NO S’HAN DE DEIXAR espais entre el nom de la variable i el
signe =, ni entre el signe = i el valor de la variable.
*Cada cop que s’escrigui claudàtors d’apertura o tancament ([[ o ]]) S’HA DE DEIXAR un espai en blanc DAVANT I DARRERA d’ells.
*En una comparació de cadenes (del tipus [[ “cad1” == “cad2” ]] S’HA DE DEIXAR un espai en blanc
DAVANT I DARRERA del signe =
En qualsevol cas, si voleu comprovar la correcta sintaxis del vostre script, sempre podeu anar a
http://www.shellcheck.net i provar al quadre online que apareix allà si qualsevol script està ben escrit (i si no, on es troba l’error). També es pot fer servir “shellcheck” sense tenir Internet si s’instal.la al sistema. Un altre truc és executar com a primera comanda del nostre script la comanda set -ex ; el que fa aquesta comanda és aturar l’script al primer error que trobi i mostrar la línia problemàtica.

 

#!/bin/bash
echo "Pulsi 'a' o 'b':"
echo "a) M'agrada el futbol"
echo "b) M'agrada el basket"
read opcio
case $opcio
in
"a") echo "Li agrada el futbol" ;;
"b") echo "Li agrada el basket" ;;
*) echo "No li agrada cap opció" ;;
esac

BUCLES

Todos los bucles se pueden hacer con el bucle while.

 

#!/bin/bash
contador=100
while [[ $contador -ge 0 ]]
do
echo $contador
contador=$(($contador - 2))
done
echo "Fi"

 

 

#!/bin/bash

#!/bin/bash

Juego de adivinar el número:

#!/bin/bash
numerosecret=$RANDOM
while [[ true ]]
do
echo -n "Introdueix un número: "
read numerousuari
if [[ $numerosecret -lt $numerousuari ]] ; then echo "La solució és menor que el número que has escrit"
elif [[ $numerosecret -gt $numerousuari ]] ; then echo "La solució és major que el número que has escrit"
else echo "MOLT BÉ!!" ; break
fi
done
echo "Fi"


Comando file: te dice qué és el fichero que le digas.
ELF: Executable Linux File

#!/bin/bash

FUNCIONES

ARRAYS

Deberes: piedra, papel, tijera


Variable ? nos dice el código de error que ha retornado el ultimo comando ejecutado (util para por ejemplo, el zenity):

resposta=$(zenity –entry –text=”Te gusta la playa?” 2>

Cogemos lo que nos devuelve el programa zenity y lo ponemos en la variable resposta. Para eso. hemos de poner $ y entre paréntesis, el comando de zenity.

 

#!/bin/bash

 

 

#!/bin/bash

 

 

#!/bin/bash

 

#!/bin/bash

 

#!/bin/bash