Está en la página 1de 7

Programacin Shell

En esta parte necesitaremos un editor de texto plano, como pueden ser: vi, nano, emacs, kwrite, gedit, etc. Ejemplo 1. Crear un archivo prueba1.sh, con el siguiente contenido: #!/bin/sh echo Probando los script! Si intentamos ejecutarlo con ./prueba1.sh , no funcionara. Esto es porque la extensin sh no es lo que hace que sea ejecutable. Para que se pueda ejecutar tenemos que darle permisos de ejecucin: $ chmod +x prueba1.sh Ahora s es ejecutable. El programa consta de dos lineas: Un comentario, desde el smbolo # hasta el final de esa lnea, donde se indica al shell con la secuencia #!/bin/sh que /bin/sh es el programa que se debe usar para ejecutar este archivo. Un comando que muestra un texto en stdin. Es la primera linea "ejecutable", ya que los comentarios son ignorados por el intrprete.

Variables
Una variable es un contenedor. Consta de un identificador que la distingue de otra (su nombre) y de un contenido. La relacin entre variable y contenido es de equivalencia. Por lo general las variables en shell no tienen tipos asociados. No deben existir espacios entre el identificador, el smbolo de = y el contenido; si dejamos espacios en blanco el shell creer que son comandos a ejecutar y no la asignacin de una variable. Para acceder al contenido de una variable empleamos $ delante de su identificador:
$identificador = contenido Ejemplos: $ i=1 ; echo $i $ msg="Mola mundo!" ; echo $msg $ escribe=echo; $escribe goo!

Cuando empleamos $identificador el shell busca el valor almacenado en la variable asociada a ese identificador y lo utiliza para reemplazar esa ocurrencia de $identificador.

Operaciones aritmticas
Para que el shell evalue una operacin aritmtica y no la tome como argumentos de un comando, por ejemplo: $ echo 1+1 Si queremos que sustituya la operacin por su valor emplearemos: $((expresin)) evala la expresin aritmtica y reemplaza el bloque por el resultado Ejemplo: $ echo $((1+1))

Algunos operadores aritmticos soportados:


+ * / % ( ) suma mutiplicacin resta divisin entera resto de la divisin entera agrupar operaciones

Sentencias Condicionales
Existe un comando para evaluar condiciones, que permitir que nuestros programas "tomen decisiones": test expresion [ expresion ] Este comando evalua expresion, y si evala a cierto, devuelve cero (true), o en otro caso 1 (false). Si no hay expresin, test siempre devuelve falso. Este comportamiento puede ser algo confuso, ya que en lgica los valores cierto y falso suelen ser al contrario.

test soporta gran cantidad de operadores, algunos son: -d archivo cierto si archivo existe y es un directorio -e archivo cierto si archivo existe, independientemente del tipo que sea -f archivo cierto si archivo existe y es un archivo normal -r archivo cierto si archivo existe y se puede leer -s archivo cierto si archivo existe y tiene tamao mayor que cero -w archivo cierto si archivo existe y se puede escribir sobre l -x archivo cierto si archivo existe y es ejecutable
EJEMPLO:
test -e Pruebas ; echo $?

NOTA:

$? Proporciona el resultado del ltimo programa Ejecutado

COMPARACIN CON VALORES NUMRICOS

n1 -eq n2 cierto n1 -ne n2 cierto n1 -gt n2 cierto n1 -ge n2 cierto que n2 n1 -lt n2 cierto n1 -le n2 cierto que n2 EJEMPLO:

si los enteros n1 y n2 son iguales si los enteros n1 y n2 no son iguales si el enteros n1 es mayor que n2 si los enteros n1 y n2 son iguales o n1 es mayor si el enteros n1 es menor que n2 si los enteros n1 y n2 son iguales o n1 es menor

$ test -1 -gt -2 && echo si $si $ test -1 -gt -2 && echo -1 es mayor que -2 -1 es mayor que -2

$ test -2 -gt -2 && echo -2 es mayor que -2

s1 = s2 cierto si las cadenas de texto s1 y s2 son idnticas s1 != s2 cierto si las cadenas de texto s1 y s2 no son idnticas s1 < s2 cierto si la cadena de texto s1 es menor que s2 s1 > s2 cierto si la cadena de texto s1 es mayor que s2 -n cadena cierto si la longitud de la cadena de texto es distinta de cero EJEMPLO:
$cad1=1 $cad2=11 $ if test $cad1 = $cad2 > then echo Cadenas Iguales > else echo Cadenas Diferentes > fi Cadenas Diferentes EJEMPLO SIN USAR test $cad1=1 $cad2=11 $ if [ $cad1 = $cad2 ]; > then echo son iguales > else echo son diferentes > fi son diferentes EJEMPLO USANDO VALORES NUMERICOS $ cad1=5 $ cad2=5 $ if test $cad1 -eq $cad2 > then > echo Valores iguales > else echo Valores diferentes > fi Valores iguales

! expresion cierto si expresion1 -a cierto si expresion1 -o cierto si


EJEMPLO:

expresion es falsa (negacin) expresion2 expresion1 y expresion2 son ciertas expresion2 expresion1 o expresion2 son ciertas

$n1=3 $n2=3 $ if test $n1 -eq 3 -a $n2 -eq 3 > then echo iguales > else echo diferentes > fi iguales

Adems existen los operadores lgicos && (AND, multiplicacin lgica) y || (OR, suma lgica), que se puede aplicar al valor de salida de los programas:

$ $ $ $ $ $ $ $

true && true ; echo $? true && false ; echo $? false && true ; echo $? false && false ; echo $? true || true ; echo $? true || false ; echo $? false || true ; echo $? false || false ; echo $?

El sistema de evaluacin del shell es perezoso y va de izquierda a derecha. Si se encuentra la suma lgica true || ALGO, ALGO no se evaluar porque se asume que cierto o falso o cierto o cierto siempre es cierto.

Sentencias if ... then ... [ else ... ]


Esta es la principal estructura que nos permitir ejecutar un bloque de cdigo, o (alternativamente) otro, dependiendo de como se evalue una condicin.

if CONDICION; then bloque de comandos fi if CONDICION; then bloque de comandos b1 else bloque de comandos b2 fi

En el primer caso el bloque de comandos se ejecutar solo si la condicin es evaluada a cierto. En el segundo caso el bloque b1 se ejecutar si la condicin es evaluada a cierto, y sino se ejecutar el bloque b2. La condicin puede ser, por ejemplo, una llamada al comando test o una operacin lgica entre los valores de salida de diferentes comandos.

read linea # comparamos cadenas de texto, as que usamos comillas if [ "$linea" = "secreto" ]; then echo ACERTASTE! fi
$ if [ "$LOGNAME" = "martinvaldes2" ] > then echo "martinvaldes2 esta logeado" > else echo "usuario no logeado" > fi

$ read usuario martinvaldes2 $ if [ "$LOGNAME" = "$usuario" ] > then echo $usuario logeado > else echo $usuario incorrecto > fi

Sentencia for
$for i in 1 2 3 4 5; do echo $i done --------------------------------------$ for i in 1 2 3 4 5; do > echo $(($i * 2)) > done

$ for i in $(seq 1 10); do > echo $i > done

También podría gustarte