Guia UpciLinux03lenguaje Script

7
SISTEMAS OPERATIVOS ALVARO ENRIQUE CHAVEZ ZUBIETA 10 de Noviembre del 2012 Guía Nº PROGRAMACION EN SHELL BASH ______________________________________________________________________ Un programa Shell (llamado a veces como guión 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 línea por línea y la ejecuta como si se estuviera escribiendo cada comando en la línea de comandos. No hay nada que no se pueda poner en un programa Shell que no se pueda escribir en la línea de comandos. Los programas Shell contienen más cosas de lo que esperaría en un simple lenguaje de programación. Los programas pueden contener servicios como: Variables. Estructuras lógicas (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 compilación y vinculación para producir un archivo ejecutable). El Shell interpreta los programas Shell, si hay un error (sintaxis o ejecución) se despliega su respectivo mensaje como si se hubiera escrito en la línea de comandos. En el nivel más básico, un programa interpretado es típicamente rápido de escribir/modificar y ejecutar. Los programas compilados típicamente requieren escritura, compilación, vinculación y ejecución, por lo que consumen más tiempo de desarrollo y prueba. Sin embargo, un programa compilado/vinculado es un archivo binario conteniendo una colección 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. 1. [root @linux~]# vi ejemplo1 (Enter) esc :wq [root @linux~]#chmod 111 ejemplo1 [root @linux~]#bash ejemplo1 (enter) ¿Que observa? ___________________________________________________________________________ #!/bin/bash date sleep 5 date

Transcript of Guia UpciLinux03lenguaje Script

  • SISTEMAS OPERATIVOS

    ALVARO ENRIQUE CHAVEZ ZUBIETA

    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.

    1. [root @linux~]# vi ejemplo1 (Enter)

    esc

    :wq

    [root @linux~]#chmod 111 ejemplo1

    [root @linux~]#bash ejemplo1 (enter)

    Que observa?

    ___________________________________________________________________________

    #!/bin/bash

    date

    sleep 5

    date

  • 2. [root @linux~]#vi ejemplo2

    esc

    :wq

    [root @linux~]#chmod 111 ejemplo2 (enter)

    [root @linux~]#bash ejemplo1 (enter)

    Que observa?

    ___________________________________________________________________________

    3. [root @linux~]#vi mensaje

    esc

    :wq

    [root @linux~]#chmod 111 mensaje (enter)

    [root @linux~]#bash mensaje (enter)

    4. Usando variables El uso de variables en un programa Shell es bien sencillo, simplemente se escribe:

    Nombrevariable = Valor

    Los resultados de los comandos pueden ser almacenados en las variables o pueden contener lneas

    ejecutables.

    [root @linux~]#vi prueba

    esc

    :wq

    [root @linux~]#chmod 111 prueba (enter)

    [root @linux~]#bash prueba (enter)

    Que observa?

    __________________________________________________________________________

    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

    #!/bin/bash

    who

    date

    history

    #!/bin/bash

    var=ls -l echo $var

    var=`ls -l`

    echo $var

  • esc

    :wq

    #chmod 111 parametros (enter)

    #bash parametros (enter)

    Que observa al usar la variable $*?

    ___________________________________________________________________________

    6. [root @linux~]#vi suma

    esc

    :wq

    [root @linux~]#chmod 111 suma (enter)

    [root @linux~]#bash suma (enter)

    [root @linux~]#bash suma 40 15 60

    Que observa?

    ___________________________________________________________________________

    7. Salidas y entradas bsicas Comando echo:___________________________________________________________

    Comando read:___________________________________________________________

    [root @linux~]#vi lectura

    esc

    :wq

    [root @linux~]#chmod 111 lectura (enter)

    [root @linux~]#bash lectura (enter)

    8. [root @linux~]#vi parametros

    esc

    :wq

    #!/bin/bash

    echo $0

    echo $#

    echo $1

    echo $2

    echo $3

    echo $*

    #!/bin/bash

    var=`expre $1+$2+$3`

    echo La respuesta es $var

    #!/bin/bash

    echo introduce 3 variables read var1 var 2 var3

    echo las variables introducidas son: echo var1=$var1

    echo var2=$var2

    echo var3=$var3

    #!/bin/bash

    # Uso de variables predefinidas. Nombre de Archivo: parmetros

    var=`expr $1 + $2 + $3`

    var1= let $1 + $2 + $3

    echo la respuesta es $var.

  • [root @linux~]#chmod 111 parametros (enter)

    [root @linux~]#bash parmetros 20 10 50 (enter)

    9. [root @linux~]#vi comando_test

    esc

    :wq

    [root @linux~]#chmod 111 comando_test (enter)

    [root @linux~]#bash comando_test (enter)

    - 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

    10. [root @linux~]#vi comando_test

    esc

    :wq

    [root @linux~]#chmod 111 comando_test (enter)

    [root @linux~]#bash comando_test (enter)

    11. [root @linux~]#vi archivito

    esc

    :wq

    [root @linux~]#chmod 111 archivito (enter)

    [root @linux~]#bash archivito (enter)

    12. [root @linux~]#vi expression

    esc

    :wq

    [root @linux~]#chmod 111 expresion (enter)

    [root @linux~]#bash expresion (enter)

    #!/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

    13. [root @linux~]#vi sh_case

    esc

    :wq

    [root @linux~]#chmod 111 sh_case (enter)

    [root @linux~]#bash sh_case (enter)

    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, DIC).

    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.