Es una exigencia de POSIX que los comandos internos (builtin-commands) estén disponibles también como comandos externos.
break
para salir de un bucle, si se añade un valor numérico ese será el de niveles de bucles
:
comando nulo, es más rápido que true (while :) , se puede iniciar un come ntario con dos puntos al principio de la línea (menos eficiente que #) y para configuraci ón adicional de las variables ???? (MIRAR ESTO)
: ${var:=value}
sin los dos puntos la shell intentaría evaluar ${var} como un comando.
continue
hace que los bucles for while o until continuen hasta la siguiente iterac ión. Se puede usar con un parámetro adicional.
for x in 1 2 3
do
echo before $x
continue 1
echo after $x
done
before 1
before 2
before 3
.
El comando punto ejecuta el comando en la shell actual
. ./shell_script
Cuando se ejecuta un comando externo o un script se crea un subshell y el comando se ejecuta en el nuevo entorno. source y . (punto) son sinónimos. Puede usarse para incorporar definiciones de variables y funciones a un script o para modificar el entorno actual a fin de ejecutar algunos comandos (con otra versión del compilador etc..)
source ./.bashrc
. ./.bashrc.custom
echo
eval
jorge@debian:~/DEV/bash/apuntes$ foo=10
jorge@debian:~/DEV/bash/apuntes$ x=foo
jorge@debian:~/DEV/bash/apuntes$ y='$'$x
jorge@debian:~/DEV/bash/apuntes$ echo $y
$foo
jorge@debian:~/DEV/bash/apuntes$ eval y='$'$x
jorge@debian:~/DEV/bash/apuntes$ echo $y
10
Eval permite generar código y que se ejecute sobre la marcha.
exec
reemplaza el shell actual por un comando diferente. Tras exec ya no se ejecutará ningún comando del script porque la shell donde se ejecuta este ya no existe.
Otro uso de exec sería exec 3< afile, que abre el descriptor de archivo 3 para leerlo desde "afile".
exit
exit n envía el código de salida. Si no se especifica, el script enviará el código de salida del último comando ejecutado. 0 indica éxito, se pueden usar además del1 al 125. Los demás valores tienen significados reservados.
126 | El archivo no es ejecutable |
127 | No se encontró un comando |
128 | Y siguientes, hubo una señal |
export
hace que la variable que se llama como el parámetro esté disponible en las subshells.
set -a | |
set --allexports | ambos exportarán todas las variables de aquí en adelante. |
expr
evalúa sus argumentos como si fueran una expresión
x=`expr $x + 1`
x=$(expr $x + 1)
expr1 | expr2 | expr1 si no es cero, sino expr2 |
expr1 & expr2 | cero si alguna es cero, sino expr1 |
= | |
> | |
>= | |
< | |
<= | |
!= | |
+ | |
- | |
* | |
/ | |
expr1%expr2 | módulo entero |
expr se suele reemplazar por $((...)) que es más eficiente
printf
printf "format string" parametro1 parametro2 ... Todos los caracteres que no sean % y \ aparecen literalmente en la salida.
\" | comillas dobles |
\\ | barra invertida |
\a | campana |
\b | retroceso de espacio |
\c | elimina el resto de salidas |
\f | salto de página |
\n | nueva línea |
\r | retorno de carro |
\t | tabulador |
\v | tabulador vertical |
\ooo | caracter único con valor octal ooo |
\xHH | caracter único con valor hexadecimal HH |
Algunos especificadores de conversión
%D | número decimal |
%C | caracter |
%S | cadena |
%% | envía el caracter literal % |
return
retornamos un valor para el script que llama a la función, si no se especifica, envía el código de salida del último comando de la función
set
configura los valores de parámetro de la shell. Puede ser útil para usar campos en comando que envían valores separados por comas
set $(date)
echo el mes es $2
también se puede usar para controlar el modo de ejecución del shell mediante la transmisión de parámetros. set -x sirve para que el script muestre una traza del comando que se está ejecutando en ese momento.
shift
reduce en uno todos los parámetros posicionale. $0 no varía, con lo qque desaparece $1. Si se le especifica un valor, las variables se mueven todas esas posiciones. $* $@ y $# se modifican automáticamente
while [ $1 != "" ] ; do
echo $1
shift
done
sirve para escanear todos los parámetros posicionales y se necesitará siempre que tengamos más de nueve.
trap
se utiliza para especificar las acciones a realizar cuando se reciban las señales.
jorge@debian:~/DEV/bash/apuntes$ trap -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
trap.sh (no me funciona, hay que averiguar porqué)
#!/bin/sh
trap `rm -f /tmp/my_tmp_file_$$` INT
echo creando fichero /tmp/my_tmp_file_$$
date > /tmp/my_tmp_file_$$
echo "presiona (CTL-C) para interrumpir..."
while [ -f /tmp/my_tmp_file_$$ ] ; do
echo el fichero existe
sleep 1
done
echo el fichero ya no existe
trap INT
echo creando fichero /tmp/my_tmp_file_$$
date > /tmp/my_tmp_file_$$
echo "presiona (CTL-C) para interrumpir..."
while [ -f /tmp/my_tmp_file_$$ ] ; do
echo el fichero existe
sleep 1
done
echo nunca va a llegar a esta línea
exit 0
unset
elimina variables y funciones del entorno. No puede hacerlo con las variables de lectura definidas por la propia shell.
No hay comentarios:
Publicar un comentario