Scripts de Shell en Linux

download Scripts de Shell en Linux

of 53

Transcript of Scripts de Shell en Linux

  • 7/25/2019 Scripts de Shell en Linux

    1/53

    Scriptsde shell

  • 7/25/2019 Scripts de Shell en Linux

    2/53

    Que es el Shell?

    Es la interfaz entre el usuariofinal y el Sistema Operativo.

    No es el S.O.

    Existen mltiples versiones ypodemos averiguar cualtenemos instalada haciendo:% /bin/sh --version

    Kernel

    Otherprograms

    X windowbash

    csh

  • 7/25/2019 Scripts de Shell en Linux

    3/53

    as ShellsEn !"#$ existen mltiples Shells

    %ourne shell &sh'( ) shell &csh'( *orn shell &+sh'( ,) shell

    &tcsh'( %ourne -gain shell &ash'.

    a m/s popular es la 0ash1 shell.

    %ash incorpora las prestaciones m/s tiles de la

    *orn shell &+sh' y la ) shell &csh'.Ofrece me2oras funcionales sore otras shells

    desde el punto de vista de programaciny desu uso interactivo

  • 7/25/2019 Scripts de Shell en Linux

    4/53

    3rogramaci4n o scripting?ash no es nicamente una excelente shell por l5nea de comandos6

    ,ami7n es un lengua2e de scriptingen s5 mismo

    El shell scriptingpermite utilizar las capacidades de la shell paraautomatizar mltitud de tareas 8ue( de otra forma( re8uerir5anmltiples comandos introducidos de forma manual

    engua2e de programaci4n vs. scripting: os lengua2es de programaci4n son( en general( m/s potentes y

    mucho m/s r/pidos 8ue los lengua2es de scripting

    os lengua2es de programaci4n comienzan desde el c4digo fuente(8ue se compilan para crear los e2ecutales &lo 8ue permite 8ue los

    programas sean f/cilmenete portales entre diferentes SSOO'

  • 7/25/2019 Scripts de Shell en Linux

    5/53

    3rogramaci4n o scripting? !n lengua2e de scriptingtami7n comienza por el c4digo

    fuente( pero no se compila en un e2ecutale

    En su lugar( un int7rprete lee las intrucciones del ficherofuente y las e2ecuta secuecialmente

    os programas interpretados son( en general( m/s lentos 8uelos compilados

    a principal venta2a reside en 8ue el fichero de c4digo fuente

    es f/cilmente portale a cual8uier sistema operativo

  • 7/25/2019 Scripts de Shell en Linux

    6/53

  • 7/25/2019 Scripts de Shell en Linux

    7/53

    E2ecutemos el programa

    $ hola.sh

    bash hola.sh command no% ound

    El directorio home &el lugar donde est/ uicado el programahola.sh' no est/ en la variale de entorno 3-,9

    echo $'H

    bin/us"/bin*

    eemos especificar el path de hola.sh

    $/home/es%udian%e/dm++-/hola.sh

    $./hola.sh

    El primer programa ash

  • 7/25/2019 Scripts de Shell en Linux

    8/53

  • 7/25/2019 Scripts de Shell en Linux

    9/53

    Si lo e2ecutamos veremos 8ue da muchos mensa2es de

    error; Si ya existe un archivo

    ; Si no existe un archivo

    ; ...Ser5a ueno poder introducir controles para decidir 8uehacer segn lo 8ue pase.

    El segundo programa ash

  • 7/25/2019 Scripts de Shell en Linux

    10/53

  • 7/25/2019 Scripts de Shell en Linux

    11/53

    E2emplo

    #!/bin/bash+345Hola Mundo!5 # sin esacios en blanco

    echo $+3

    a l5nea = crea una variale denominada S,> y le asignala cadena 9ola @undoA

    El valor de esta variale se recupera anteponiendo uns5molo BA a su nomre.

  • 7/25/2019 Scripts de Shell en Linux

    12/53

    -tenci4n CEl lengua2e de programaci4n de la shell no hace uncasting de los tipos de las variales

    Esto signifca 8ue una misma variale puede contenerdatos num7ricos o de texto contadorD

    contadorDomingo

    a conmutaci4n del ,#3O de una variale puedeconllevar a confusi4n

    %uena pr/ctica: asociar siempre el mismo tipo de dato auna variale en el contexto de un mismo script

  • 7/25/2019 Scripts de Shell en Linux

    13/53

    El caracter de escape de la ash es\ypreserva el valor literal del siguiente caracter

    al 8ue acompaFa:

    $ ls 61

    ls: *: No such file or directory

    -tenci4n C

  • 7/25/2019 Scripts de Shell en Linux

    14/53

    )omillas simples y doles)uando se asignen datos caracter 8ue contengan espacios enlanco o caracteres especiales( se deer/ encerrar entre comillassimples o doles

    as doles comillas har/n 8ue si( en su contenido se referencia unavariale( 7sta sea resuelta a su valor

    va"45cadena de "ueba5

    nuevava"458alo" de va" es $va"5

    echo $nuevava"

    8alo" de va" es cadena de "ueba

    9acer un script 8ue muestre por pantalla:

  • 7/25/2019 Scripts de Shell en Linux

    15/53

    as comillas simples mostrar/n una cadena decaracteres de forma literal sin resoluci4n de variales

    > var='cadena de prueba'

    > nuevavar='Valor de var es $var'

    > echo $nuevavar

    Valor de var es $var

    )omillas simples y doles

  • 7/25/2019 Scripts de Shell en Linux

    16/53

    )omando exo"%El comando exportpone una variale en el entorno de forma 8uesea accesile por los procesos hi2os. 3or e2emplo:

    $ x4hola $ bash # 9:ecu%a una shell en "oceso hi:o

    $ echo $x # ;ada en x

    $ exi% # 8olvemos al "oceso ad"e

    $ exo"% x

    $ bash

    $ echo $x

    hola # h< es%=.

  • 7/25/2019 Scripts de Shell en Linux

    17/53

    Si el proceso hi2o modifica el valor de la variale x( nomodificar/ el valor original del proceso padre.

  • 7/25/2019 Scripts de Shell en Linux

    18/53

  • 7/25/2019 Scripts de Shell en Linux

    19/53

  • 7/25/2019 Scripts de Shell en Linux

    20/53

    9O@E:argumento por defecto &directorio home' del comando cd.

    3-,9: el path de s8ueda de comandos. Es una lista dedirectorios separados por :A en los 8ue se uscar cuando se tecleacual8uier comando

    "ormalmente( introducimos los comandos de la siguiente manera:

    B .Gtrash.sh

    Estaleciendo 3-,9DB3-,9:. "uestro directorio de traa2o seincluye en path de s8ueda de comando y simplemente podremos

    introducir: B trash.sh

  • 7/25/2019 Scripts de Shell en Linux

    21/53

    OJ"-@E: contiene el nomre de usuario

    9OS,"-@E: contiene el nomre de la m/8uina

    @-)9,K3E: sistema hardLare

    3SM: secuencia de caracteres monstrados antes del prompt

    Nthora

    Ndfecha

    NLdirectorio actual

    Nltima parte del directorio actual

    Nunomre de usuario

    NBcaracter del prompt

    !#: contiene el id del usuario 8ue no puede ser modificado

    S9

  • 7/25/2019 Scripts de Shell en Linux

    22/53

    BP: nmero argumentos

    B: todos los argumentos de la shell

    BR: seme2ante a la variale anterior

    B;: opciones suministradas a la shell

    B?: devolver valor de la ltima orden e2ecutada

    BC: identificaci4n del proceso de la ltima orden 8ue

    comenz4 con

    Variables Intrnsecas

  • 7/25/2019 Scripts de Shell en Linux

    23/53

    )omando exi%

    El comando exitse puede utilizar para finalizar la e2ecuci4n deun script o para devolver una valor( el cu/l estar/ disponile alproceso padre del script.

    )uand un script termina con exit sin par/metros( el estado desalida ser/ el del ltimo comando e2ecutado en el script

    #!/bin/bash

    AM;B-

    . . .

    # sale con el es%ado de la e:ecuciCn

    #del Dl%imo comando.

    E>FM-AM;B

    exi%

    #!/bin/bash

    AM;B-

    . . .

    # sale con el es%ado de la e:ecuciCn

    #del Dl%imo comando.

    E>FM-AM;B

    exi% $G

  • 7/25/2019 Scripts de Shell en Linux

    24/53

    )uando se e2ecuta el script con el comandoexitcon par/metros( la sintaxis es:

    exit nnn

    onde nnnD;=TT y el estado de salida es nnn

    )omando exi%

  • 7/25/2019 Scripts de Shell en Linux

    25/53

    )omando3eadEl comando readnos permite solicitar un valor deentrada para almacenarlo en una variale

    E2emplo &lee".sh'#!/bin/bash

    echo n Fn%"oduca nomb"e de iche"o a bo""a"

    "ead iche"o

    "m i $iche"oecho Iiche"o $iche"o bo""ado!5

  • 7/25/2019 Scripts de Shell en Linux

    26/53

    Opciones read Us &no hace echo de la entrda'

    read Un" &acepta s4lo " caracteres de entrada'

    read Up 0mensa2e1 &muestra un mensa2e'

    read Ut, &acepta una entrada por un tiempo

    m/ximo de , segundos'

    E2emplo$ "ead s n si (+) o no (;)G "esues%a

    si (S) o no (N) ? S

    $ echo $"esues%a

    S

    )omando 3ead

  • 7/25/2019 Scripts de Shell en Linux

    27/53

    Sustituci4n de comandosEl s5molo 0V1 tiene un uso diferente de 0W1. Se utiliza para sustituci4n deinstrucciones. Es decir si dentro de un script aparece el texto 0 VcomandoV1entonces se e2ecutar/ lo orden 8ue estX entre las 0V1

    $ >F+4JlsJ$ echo $>F+ # >is%a los a"chivos

    hola.sh lee".sh

    Otra forma de realizar la sustituci4n de comandos: $(comando)

    $ >F+4$(ls)

    $ echo $>F+

    hola.sh lee".sh

    ls $( d )

    ls $( echo /bin )

  • 7/25/2019 Scripts de Shell en Linux

    28/53

    Operadores aritm7ticosK suma

    "es%a

    1 mul%ilicaciCn

    / divisiCn11 exonenciaciCn

    L mCdulo

    E2emplo$ a4(KN)1O$ echo $a

    $ b4N11O

    $ echo $aK$b

  • 7/25/2019 Scripts de Shell en Linux

    29/53

    a instrucci4n letse puede utilizar para realizar funciones matem/ticas: $ le% ?40KN17

    $ echo $?

    NP

    $ le% Q4?KN1P

    $ echo $Q

    ON

    !n expresi4n aritm7tica se puede evaluar con BYexpressionZoB&&expression''

    $ echo $((NOKN0))

    PO $ 8>34$RNOKN0S

    $ echo $RNO1$8>3S

    PO0

    $ echo $RN11OS

    $ echo $RTLOS

    No es necesario utilizar $Xpara referenciar el valor

    de X

    Evaluaci4n aritm7tica

  • 7/25/2019 Scripts de Shell en Linux

    30/53

    E2emplo &oe"aciones.sh'PCGinGashecho ;n 0#ntroduzca un primer nmero: 1[ read x

    echo ;n 0#ntroduzca un segundo nmero : 1[ read y

    sumaDB&&Bx \ By''

    restaDB&&Bx ; By''mulDB&&Bx By''divDB&&Bx G By''

    modDB&&Bx ] By''

    P imprimimos las respuestas:echo 0Suma: Bsuma1echo 0>esta: Bresta1echo 0@ultiplicaci4n: Bmul1

    echo 0ivisi4n: Bdiv1

    echo 0@4dulo: Bmod1

    Evaluaci4n aritm7tica

  • 7/25/2019 Scripts de Shell en Linux

    31/53

    Estructuras de control ;M;condicional

    a forma m/s /sica es:

    if YexpresinZ[

    then

    instrucciones

    elif YexpresinZ[

    then

    instrucciones

    else

    instrucciones

    fi

    as secciones elif&else if' y elseson opcionales

  • 7/25/2019 Scripts de Shell en Linux

    32/53

  • 7/25/2019 Scripts de Shell en Linux

    33/53

    )omparaci4n num7rica: ;e8

    ;ge

    ;le

    ;ne

    ;gt

    ;lt

    E2emplos:

    Y nM ;e8 n= Z

    Y nM ;ge n= Z Y nM ;le n= Z

    Y nM ;ne n= Z

    Y nM ;gt n= Z

    Y nM ;lt n= Z

    Expresiones

  • 7/25/2019 Scripts de Shell en Linux

    34/53

    Ejemplo(comparacion0s!

    #!/bin/bash

    echo n Fn%"oduca su nomb"e de usua"io 5

    "ead lo2in

    i R $lo2in 4 $E+93 SU %hen

    echo Hola, $lo2in. ACmo es%= hoVG

    else

    echo D no e"es $lo2in!!!

    i

  • 7/25/2019 Scripts de Shell en Linux

    35/53

    Ejemplo(comparacion"s!

    #!/bin/bash

    echo n Fn%"oduca un nDme"o W x W 0 5

    "ead num

    i R $num l% 0 SU %hen

    i R $num 2% SU %hen

    echo $num1$num4$(($num1$num))

    else

    echo ;Dme"o ue"a de "an2o !

    i

    elseecho ;Dme"o ue"a de "an2o !

    i

  • 7/25/2019 Scripts de Shell en Linux

    36/53

    Operadores de archivos: ;d verifica si el path dado es un directorio

    ;f verifica si el path dado es un archivo

    ;s verifica si el path dado en un lin+ sim4lico

    ;e verifica si el fichero existe

    ;s verifica si el fichero tiene un tamaFo mayor a ;r verifica si el fichero tiene permiso de lectura

    ;L verifica si el fichero tiene permiso de escritura

    ;x verifica si el fichero tiene permiso de e2ecuci4n

    E2emplos:

    Y ;d nomreIficheroZ Y ;f nomreIfichero Z

    Y ;e nomreIfichero Z

    Y ;s nomreIfichero Z

    Y ;r nomreIfichero Z

    Y ;L nomreIfichero Z

    Y ;x nomreIfichero Z

    Expresiones

  • 7/25/2019 Scripts de Shell en Linux

    37/53

    E2emplo

    Ejemplo(comparacion#archivoss!#!/bin/bash

    i R /e%c/s%ab SU %henc /e%c/s%ab .

    echo Hecho.

    elseecho "chivo /e%c/s%ab no exis%e.

    exi% i

  • 7/25/2019 Scripts de Shell en Linux

    38/53

    Expresiones

    Operadores l4gicos: C "O,

    ;a -"

    ;o O>

    Ejemplo(comparacion#lo$ica"sh!#!/bin/bash

    echo n Fn%"oduca un nDme"o en%"e W x W 0

    "ead num

    i R $num 2% a$num l% 0 SU

    %henecho $num1$num4$(($num1$num))

    else

    echo ;Dme"o in%"oducido inco""ec%o !

    i

  • 7/25/2019 Scripts de Shell en Linux

    39/53

    Operadores l4gicos: -"

    ^^ O>

    Ejemplo(comparacion#lo$ica&sh!#!/bin/bashecho n Fn%"oduca un nDme"o W x W 0 5

    "ead num

    iR $numbe" 2% S ''R $numbe" l% 0 SU

    %henecho $num1$num4$(($num1$num))

    else

    echo ;Dme"o in%"oducido inco""ec%o !

    i

    Expresiones

  • 7/25/2019 Scripts de Shell en Linux

    40/53

    ospar/metros posicionalesse asignan desde la shell cuando se invoca. 3ar/metroposicional 0"1 se referencia como 0B_"`1( o 0B"1 cuando 0"1 lo forma un s4lo d5gito

    3ar/metros especiales

    BP nmero de par/metros pasados

    Bdevuelve el nomre del shell script 8ue se est/ e2ecutando y su uicaci4n en elsistema de archivos

    B devuelve en una cadena de caracteres todos los par/metros pasados al script

    BRdevuelve un array con los par/metros pasados al script

    Ejemplo(parametrossh!#!/bin/bash

    echo $#U $0U $U $NU $1U $X

    $ a"ame%"os.sh es%udian%e es%udian%eN

    NU ./a"ame%"os.shU es%udian%eU es%udian%eNU es%udian%e

    es%udian%eNU es%udian%e es%udian%eN

    3ar/metros de la shell

  • 7/25/2019 Scripts de Shell en Linux

    41/53

    #nstrucci4nAase

    case$va" in

    val)

    ins%"uccionesUU

    valN)

    ins%"uccionesUU

    1)

    ins%"uccionesUUesac

  • 7/25/2019 Scripts de Shell en Linux

    42/53

    Ejemplo(casesh!#!/bin/bash

    echo n Fn%"oduca un nDme"o en%"e W x W 0

    "ead x

    case $x in

    ) echo 8alo" de x es .UUN) echo 8alo" de x es N.UU

    O) echo 8alo" de x es O.UU

    P) echo 8alo" de x es P.UU

    ) echo 8alo" de x es .UU

    @) echo 8alo" de x es @.UU

    7) echo 8alo" de x es 7.UUT) echo 8alo" de x es T.UU

    Y) echo 8alo" de x es Y.UU

    0 Z 0) echo ;Dme"o inco""ec%o.UU

    1) echo 8alo" no "econocido.UU

    esac

    E2emplo

  • 7/25/2019 Scripts de Shell en Linux

    43/53

    Estructura o"

    for

    o"va"in lis%a

    do

    s%a%emen%sdone

    Ejemplo(for"sh!#!/bin/bash

    le% sum40

    o" num in N O P do

    le% sum 4 $sum K $num

    done

    echo $sum

  • 7/25/2019 Scripts de Shell en Linux

    44/53

    Estructura o"Ejemplo(for&sh!#!/bin/bash

    o" x in ael lai boliU do

    echo 9l valo" de la va"iable x es $x

    slee

    done

    Ejemplo(forsh!#!/bin/bash

    o" x in ael P lai +B>93 boli [FAU do

    echo 9l valo" de la va"iable x es $x

    slee

    done

    Ejemplo(for)sh!#!/bin/bash

    lis%a4an%onio luis ma"ia ea

    o" x in $lis%a

    do

    echo 9l valo" de la va"iable x es $x

    slee

    done

  • 7/25/2019 Scripts de Shell en Linux

    45/53

    Ejemplo(forsh!#!/bin/bash# >is%a %odos los iche"os del di"ec%o"io ac%ual

    o" x in 1do ls l $x slee done

    Ejemplo(for+sh!#!/bin/bash# >is%a %odos los iche"os del di"ec%o"io /bin

    o" x in /bindo ls l $xdone

    Estructura o"

  • 7/25/2019 Scripts de Shell en Linux

    46/53

    Ejemplo(for,sh!#!/bin/bash

    "ead Fn%"oduca el nomb"e de un di"ec%o"io

    di"ec%o"ioecho enlaces simbClicos en el di"ec%o"io

    $di"ec%o"io

    o" iche"o in $( ind $di"ec%o"io %Ve l )

    do

    echo 5$iche"o5

    done

    Estructura o"

  • 7/25/2019 Scripts de Shell en Linux

    47/53

    -rrays con ucles

    )rear un arraymasco%aR0S4e""o

    masco%aRS42a%o

    masco%aRNS4e

    e%4( e""o 2a%o e )

    ongitud m/xima de un array son M= elementos.

    3ara extraer una entrada del array$\a""aVRiS]$ echo $\masco%aR0S]

    e""o$ echo $\masco%aRNS]

    e

  • 7/25/2019 Scripts de Shell en Linux

    48/53

    3ara extraer todos los elementos se utiliza unasterisco:

    echo $\a""aVR1S]

    3ara saer cu/ntos elementos hay en el array:echo $\#a""aVR1S]

    3odemos cominar los arrays con ucles utilizandofor:

    o" x in $\a""aVR1S]

    do

    echo $\a""aVR$xS]

    done

    -rrays

  • 7/25/2019 Scripts de Shell en Linux

    49/53

    %ucle tipo )

    Estructura tipo ) alternativa para for o"(( 9?'3U 9?'3NU 9?'3O))

    do

    ins%"ucciones

    doneEjemplo(forsh!

    #!/bin/bashecho Fn%"oduca un nDme"o U "ead x

    le% sum40

    o" (( i4 U $iW$x U i4$iK )) U do le% sum 4 $sum K $i

    done

    echo >a suma de los "ime"os $x nDme"os es $sum

  • 7/25/2019 Scripts de Shell en Linux

    50/53

    hileexpresion_evalua_a_truedo

    instrucciones

    done

    Ejemplo(.hilesh!#!/bin/bash

    echo n Fn%"oduca un nDme"o U "ead x

    le% sum40U le% i4

    hile R $i le $x SU do

    le% sum 4 $sum K $i

    le% i 4 $i K

    done

    echo >a suma de los "ime"os $x nDme"os es $sum

    Estructura hile

  • 7/25/2019 Scripts de Shell en Linux

    51/53

    un%il Rexpression_evalua_a_trueSdo

    instrucciones

    done

    Ejemplo(untilsh!#!/bin/bash

    echo Fn%"oduca un nDme"o U "ead x

    echo U

    un%il R $x le 0 SU do

    echo $x

    x4$(($x ))

    slee done

    echo U echo IF;

    Estructura un%il

  • 7/25/2019 Scripts de Shell en Linux

    52/53

    Ejemplo(func"sh!#!/bin/bash

    unc%ion chec()\

    i R e 5/home/$5 S

    %hen

    "e%u"n 0else

    "e%u"n

    i

    ]

    echo Fn%"oduca el nomb"e del a"chivo U "ead x

    i chec $x

    %hen

    echo $x exis%e !

    else

    echo $x no exis%e !

    i

    bunciones

  • 7/25/2019 Scripts de Shell en Linux

    53/53

    epuraci4n

    %ash ofrece dos formas de depurar los shell scriptsv : muestra cada l5nea completa del script antes de ser e2ecutada

    !: muestra cada l5nea areviada del script antes de ser e2ecutada

    !so: PCGinGash Uv( o PCGinGash Ux

    Ejemplo(depuracionsh!#!/bin/bash x

    echo n Fn%"oduca un nDme"o U "ead x

    le% sum40

    o" (( i4 U $iW$x U i4$iK )) U do

    le% sum 4 $sum K $i

    done

    echo >a suma de los $x "ime"os nDme"os es $sum