10 de Noviembre del 2012 Gua N PROGRAMACION EN SHELL BASH ______________________________________________________________________
Un programa Shell (llamado a veces como guin Shell o Shell script) es un archivo de texto que contiene el Shell y comandos de Linux. Cuando un programa Shell es ejecutado, el Shell lee el contenido del archivo lnea por lnea y la ejecuta como si se estuviera escribiendo cada comando en la lnea de comandos. No hay nada que no se pueda poner en un programa Shell que no se pueda escribir en la lnea de comandos. Los programas Shell contienen ms cosas de lo que esperara en un simple lenguaje de programacin. Los programas pueden contener servicios como: Variables. Estructuras lgicas (If then, And, Or, etc). Bucles (while, for). Funciones. Comentarios.
La forma en que estos servicios son implementados depende del Shell en que se est programando. Aunque las variaciones a menudo no son grandes no significa que un programa escrito para el Shell Bourne funcionara en el Shell c. Los programas shell son un poco diferentes de lo que se acostumbra a programar. Estos son archivos de texto plano que no necesitan ser compilados (como programas escritos en c/c++, pascal, etc, que requieren compilacin y vinculacin para producir un archivo ejecutable). El Shell interpreta los programas Shell, si hay un error (sintaxis o ejecucin) se despliega su respectivo mensaje como si se hubiera escrito en la lnea de comandos. En el nivel ms bsico, un programa interpretado es tpicamente rpido de escribir/modificar y ejecutar. Los programas compilados tpicamente requieren escritura, compilacin, vinculacin y ejecucin, por lo que consumen ms tiempo de desarrollo y prueba. Sin embargo, un programa compilado/vinculado es un archivo binario conteniendo una coleccin directa de llamadas de sistema. El programa interpretado, por otra parte, debe ser primero procesado por el Shell que convierte los comandos a llamadas de sistema o llamadas a otros binarios, lo que hace a los programas Shell lentos.
5. Variables predefinidas Muchas variables predefinidas son establecidas durante el proceso de inicio de sesin, como por ejemplo $USER, nombres que no siempre son estndar de un sistema a otro. Sin embargo muchas variables Shell predefinidas son familiares en todos los sistemas. $0 = nombre del programa $1 hasta $9 = parmetros desde el 1 hasta el 9 $# = nmeros de parmetros
[root @linux~]#vi parmetros
#!/bin/bash #Programa que despliega en la pantalla un mensaje echo esta es una prueba de un scripts Shell para sistemas operativos
- Expresiones para caracteres alfabeticos o cadenas:
- Expresiones para nmeros: - Expresiones lgicas
- Expresiones para ficheros
#!/bin/bash test f lectura echo $? test -f lecturas echo $? -f suma echo $?
Uso de if Se utiliza para probar el estado de un comando. Si se quiere comparar una expresin se debe usar el comando test [ expresin ] o [ expresin ] Sintaxis: if [ expresin ] then // lo que hay que hacer Fi
#!/bin/bash if test f /etc/hosts then -f /etc/hosts else echo el fichero no existe fi #!/bin/bash #Uso del if para verificar el estado de un comando if ls /usr/include/pwd.h > /dev/null then echo "El archivo pwd.h existe" else echo "El archivo pwd.h ha sido borrado!" fi #!/bin/bash #Uso del if evaluando una expresin if [ "$1" = "3" ] then echo "SI, es el nmero 3" else echo "NO, es la nmero 3" fi
Uso de case Case se usa para comparar valores contra una lista de patrones. Su sintaxis es: case valor in Patrn 1) comando Mas comandos ;; Patrn 2) comando Mas comandos ;; Patrn n) . esac
Uso de while y until Tambin es posible ejecutar bloques de rdenes de forma iterativa dependiendo de una condicin. La comprobacin puede realizarse al principio (while) o al final (until). La sintaxis es la siguiente:
while [ expresin ] # Mientras la expresin sea cierta... do ... done
until [ expresin ] # Mientras la expresin sea falsa... do ... done
14. [root @linux~]#vi sh_while
esc :wq [root @linux~]#chmod 111 sh_while (enter) [root @linux~]#bash sh_while (enter) #!/bin/bash echo -n Desea continuar? read respuesta case $respuesta in S* | s*) respuesta=El programa debe continuar.. ;; N* | n*) respuesta=Programa finalizado ;; *) respuesta= Respuesta incorrecta ;; esac echo $respuesta #!/bin/bash a=12 while $a le 53 do echo contador=$a a =`expr $a+1` done
TRABAJOS A DESARROLLAR
I. Hacer un programa que determine el signo zodiacal correspondiente de una persona en base al mes y el da de nacimiento. Por ejemplo: [usuario@linux ~]$bash zodiaco agosto 14 Su signo es LEO
II. Cree un shell script llamado doble que pida un nmero por teclado y calcule su doble. Debe comprobar el nmero introducido y antes de terminar preguntar si deseamos calcular otro doble, en cuyo caso no terminar. Ejemplo: Introduzca un nmero para calcular el doble: 89 El doble de 89 es 178 Desea calcular otro doble (S/N)?
III. Cree un shell script llamado fecha_hora que devuelva la hora y la fecha con el siguiente formato: Son las hh horas, xx minutos del da dd de mmm de aaaa donde mmm representa las iniciales del mes en letra (ENE, FEB, MAR, ..., NOV, DI C). IV. Cree un shell script llamado infosis que muestre la siguiente informacin: Un saludo de bienvenida del tipo: Hola usuario uuu, est usted conectado en el terminal ttt donde uuu y ttt son, respectivamente, el nombre de usuario y el terminal desde el que se ejecuta la orden. La fecha y la hora actuales, usando para ello el ejercicio nmero III. Una lista con los usuarios conectados. Una lista de los procesos del usuario que se estn ejecutando en ese momento.