Bash

De notas.romsolutions.es
Ir a la navegación Ir a la búsqueda

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)