Bash
Sumario
Bash Script
Un Shell Script no es más que un fichero con sentencias para el intérprete que se vaya a utilizar. Entre los intérpretes más utilizados se encuentran: Bash,Perl, Python y PHP para los entornos web.
Argumentos posicionales
En un script se pueden especificar argumentos en una línea de comando, es decir un nombre_de_script+un directorio o más un número o una letra. El script en bash accede a estos parámetros mediante las variables $0, $1, etc.:
- $0 Nombre del script
- $1 Argumento uno
- $2 Argumento dos
- $3 Argumento tres, así hasta el nueve.
- $# Número de argumentos total
- $* Cadena con todos los argumentos
- shift Desplaza hacia la izquierda los arguementos, el 10 pasa a ser 9 y así posteriormente.
- $? Código de retorno
El código de retorno
Cada programa que se ejecuta en el shell cuando termina guarda su código de retorno en la variable $?. Este código es un valor numérico que determina si el programa ha terminado de forma correcta. El código de retorno de valor 0 para la correcta ejecucción, cualquier otra valor para la incorrecta ejecucción.
Colores en Bash
En este ejemplo tenemos el hostname/usuario en Verda y los directorios en azul
{{code if [ -n "$force_color_prompt" ]; then if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48 # (ISO/IEC-6429). (Lack of such support is extremely rare, and such # a case would tend to support setf rather than setaf.) color_prompt=yes
else
color_prompt=
fi fi if [ "$color_prompt" = yes ]; then PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' else PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' fi unset color_prompt force_color_prompt # If this is an xterm set the title to user@host:dir case "$TERM" in xterm*|rxvt*) PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" ;; *) ;; esac # enable color support of ls and also add handy aliases if [ -x /usr/bin/dircolors ]; then test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" alias ls='ls --color=auto' #alias dir='dir --color=auto' #alias vdir='vdir --color=auto' alias grep='grep --color=auto' alias fgrep='fgrep --color=auto' alias egrep='egrep --color=auto' fi }}
- $? Código de retorno
Algunos scripts con los principales operadores de bash. comprobar ficheros y directorios, condicionales, bucles, while, until, funciones, etc.:
Redirecciones de entrada y salida
Redirección de salida estándar a un archivo
*hace que el descriptor de archivo 6 sea una copia de stdout (descriptor archivo 1) exec 6>&1 *abre el archivo "test.data" para escritura exec 1>test.data *genera algún contenido echo "data:data:data" *recupera stdout original, al hacer que sea una copia del descriptor de archivo 6 exec 1>&6 *Cierra el descriptor de archivo 6 exec 6>&-
Abre y cierra archivos
# abre el archivo test.data para lectura exec 6<test.data # lee hasta el final del archivo while read -u 6 dta do echo "$dta" done # cierra el archivo test.data exec 6<&-
Salida de órdenes externas
VAR=$(find . -name "*h")
Condicionales con números
- -lt menor que <
- -gt mayor que >
- -le menor o igual que <=
- -gr mayor o igual que >=
- -eq igual ==
- -ne no igual !=
Condionales con texto
- = cadenas de texto exactemente iguales
!= cadenas de texto no iguales
- <
- >
- -n la cadena no está vacía
- -z la cadena está vacía
Condicionales con archivos
- -e existe
- -f archivo normal, no es un directorio
- -s no tiene tamaño 0
- -d es un directorio
- -r tiene permiso de lectura para el usuario que lanza el script
- -w permiso de escritura para el usua...
- -x permiso de ejecución
Manipulación de texto
${cadena:posicion:longitud}
Por ejemplo en la cadena string=abcABC123ABCabc:
echo ${string:0} : abcABC123ABCabc echo ${string:0:1} : a (primer caracter) echo ${string:7} : 23ABCabc echo ${string:7:3} : 23A (3 caracteres desde posición 7) echo ${string:7:-3} : 23ABCabc (desde posición 7 hasta el final) echo ${string: -4} : Cabc (atención al espacio antes del menos) echo ${string: -4:2} : Ca (atención al espacio antes del menos)