¿Cómo se hace un script, paso a paso?
- Escribe en un editor de texto (nano, mcedit, vim, nedit, etc.):
#! /bin/bash # Las líneas que empiezan por "#" son comentarios # La primera línea o #! /bin/bash asegura que se interpreta como # un script de bash, aunque se ejecute desde otro shell. echo "Este es el primer comando" echo" "Tras 5 segundos verás un listado del directorio actual" sleep 5s ls --color echo "Fin del ejemplo"
- Grábalo con un nombre cualquiera, por ejemplo "miprimerscript"
- Ejecuta "chmod +x mimprimerscript"
- Ejecuta "./miprimerscript" (el "./" significa "del directorio actual")
Como se puede comprobar, "echo" sólo muestra mensajes en pantalla, "sleep" hace una pausa y "ls" nos muestra una lista de ficheros.
¿Qué se puede hacer, además de meter eso?
- Manejar variables. Se introducen asÍ:
VARIABLE=valor; export VARIABLE (en sh) export VARIABLE=valor (en bash).
- var1='expr'
- var2="string"
- Se escriben tras el nombre del script y se asignan consecutivamente a $1, $2, $3, ... Por ejemplo, si ejecuto "nombre-del-script Hola" y dentro exista una orden "echo $1" el resultado será ordenador recibe una orden "echo Hola". Hay otras muchas variables predeterminadas. Importantes a recordar:
- $# :num. de argumentos
- $? :Valor del ultimo comando
- $* :todos los arg de la shell
- $$ :PID de la Shell (echo "para matarme, usa kill $$")
- $ :opciones pasadas a la shell
- $! :PID del ultimo comando &
- $HOME
- $PATH
- $PS1 :prompt de 'espera'
- $PS2: prompt de 'continua'
- $IFS :Lista de char que separan palabras en los argumentos
Las variable de entorno se pueden ver así:
echo $<tab><tab> (solo los nombres de las variables env (con los valores asignados) set | less
- Ordenes condicionales ( if test $2=$var1 then ... fi)
if [ "$1" = "hola" ]; then ordenes elif [ ]; then ordenes else ordenes fi
- Menu (case)
case variable in a) comandos ;; b*) comandos ;; *) comandos ;; esac
- ejecución en hora programadas
at hora fecha comando
- Manipulación de archivos
tr A B fichero1 fichero2 (cambia A por B en fichero1, lo salva en fichero 2) sort fichero1 > fichero2
- echos (muchos). Mejor usar cat:
cat <<CADENA_QUE_INDICA_FINAL teto con muchas líneas ... CADENA_QUE_INDICA_FINAL exit num :sale del programa con el valor de status 'num'.
- Input de variables
read -p mensaje VAR1 read VAR1 --> toma la salida estándar de otro programa
- Patrones
- *,? comodines
- [ccc] :cualquiera de los caracteres a, b o c.
- "..." reconoce ... exactamente
- \c :Reconoce c literalmente
- a | b ---> a o b
- bucles FOR
for var1 in 0 1 2 3 4 ; do ordenes done
- bucles UNTIL
until comando do comandos done
- funciones
[function] nombre() { comandos; }
- variable de salida
Si al final del script ponemos algo como:
exit 16
Al ejecutarse corectamente, esa variable la podremos ver con:
echo $?
Y esto nos asegura que el script se ejecuto hasta esa línea.