Como Hacer Scripts en Bash

download Como Hacer Scripts en Bash

of 21

Transcript of Como Hacer Scripts en Bash

  • 8/17/2019 Como Hacer Scripts en Bash

    1/21

    Programación de scripts en Bash

    De XTech Capacitacion

    IntroducciónLinux, así como la mayoría de los UNIX, utilizan shell scripts para realizar una infinidad de tareas.Un shell script es un programa que se escribe con una sintaxis particular, en un archio de textoplano, para que sea interpretado por un shell, en este caso !bin!bash.

    Un shell script es b"sicamente un programa que llama a otros programas, con la posibilidad dehacer algun tipo de procesamiento propio #como control de flu$o, operaciones matem"ticas simples,etc%.

    &or lo tanto la forma de crear un shell script es hacer un archio con nuestro ya querido i'

    vi holam

    Luego lo llenamos con las instrucciones que deseamos. &or e$emplo'

    #!/bin/bashecho "Hola mundo!"# Esto es por costumbre utilizado como ejemplo del primer programa.# Se dice que trae suerte!

    Luego le damos permisos de e$ecuci(n a ese archio'

    chmod + holam

    ) de esta manera ya tendremos listo un shell script que se e$ecuta de la siguiente forma'

    ./holam

    *ebemos destacar la primera linea de nuestro script bash'

    #!/bin/bash

    esta línea le indica al sistema que el script ser" interpretado por el programa que se encuentra acontinuaci(n de +, en este caso, !bin!bash

    Las -ltimas dos líneas son comentarios

    # Esto es por costumbre utilizado como ejemplo del primer programa. # Se dice que trae suerte!

    Los comentarios comienzan con + y se extienden hasta el final de la línea. s muy -til ircomentando el c(digo que uno escribe, para recordar qu/ realizan ciertas funciones o algoritmos, yotra persona pueda comprender el funcionamiento de nuestro script.

    VariablesLas ariables en un script 0123 son simplemente identificadores, sin tipo. &ara asignar un alor auna ariable, se utiliza el operador 4, por e$emplo'

    josetech eperto$ %&'()&(*E,-

    &or conenci(n, los nombres de las ariables se usan en may-sculas, aunque no es obligatorio.

  • 8/17/2019 Como Hacer Scripts en Bash

    2/21

    &ara usar el contenido de la ariable, dentro de un script, se usa el operador 5. &or e$emplo'

    josetech eperto$ echo $%&'()&(*E-josetech eperto$

    &ara utilizar el contenido de una ariable, seguida de un texto, debemos usar las llaes 67

    8onsideremos este e$emplo'

    ()H&',"/tmp/ej" mv $()H&' $()H&'0ba1

    n este caso, bash interpretaría a 51983I:; y 51983I:;hola que tal> es una sola palabra.

    1lgunos caracteres especiales m"s'

    4 ! 5 6 7 2 3 8 9 : ; $ < = > " # ? @

    &or lo tanto, si queremos incluir la ? en alguna parte, entonces debemos ponerla @ eces #??%, laprimera para decirle a 0123 que no tome como car"cter especial lo que sigue y la segunda comoese car"cter que queremos incluír. sto es muy com-n en casos como'

    cd algAn4 directorio4 con4 espacios

    Comillas dobles ( )

    Las comillas dobles hacen que los espacios entre las comillas no sean especiales. &or lo tanto,

    podríamos haber utilizado'ls 0l "hola que tal"

  • 8/17/2019 Como Hacer Scripts en Bash

    3/21

    Aodos los otros car"cteres siguen siendo especiales.

    Comillas simples ( ! ! )

    Las comillas simples logran que ning-n caracter #salo la comilla simple misma% sea especial. &ore$emplo, si quisieramos crear un archio que se llame BC5D, lo debemos hacer rode"ndolo de

    comillas simples'touch escaparla>. &ara crear un archio llamado queEtal,deberíamos hacerlo así'

    touch la primera

    Comilla in"ertida ( # # )

    Las comillas inertidas son m"s raras. *eben rodear un comando. se comando ser" e$ecutado, y loque ese comando imprima reemplazar" al contenido de las comillas inertidas. Aal ez lo m"ssencillo sea un e$emplo'

    josetech eperto$ lseperto.au eperto.log eperto.lB eperto.pdC eperto.teeperto.dvi #eperto.lB# eperto.lBD eperto.ps eperto.toc

    josetech eperto$ ',>ls>josetech eperto$ echo $'eperto.au eperto.log eperto.lB eperto.pdC eperto.teeperto.dvi #eperto.lB# eperto.lBD eperto.ps eperto.toc

    josetech eperto$

    l uso m"s frecuente de las comillas inertidas es poder asignar el >resultado> de un comando a unaariable.

    Control de $lu%osto refiere al cauce o flu$o normal de los programas. No siempre hay un solo camino a seguir yestas proposiciones permiten que el programa realice distintas tareas, seg-n las condiciones de lasariables a interpretar.

    i$

    l>if> es un proposici(n de control que erifica si es erdadera o falsa una condici(n.

    2intaxis'

    iC comando0condicinthen  omandos si la condicin es verdaderaelse  omandos si la condicin es CalsaCi

    s importante que la ubicaci(n de las lineas se mantenga, ya que las proposiciones if!then!else!fi secontrolan línea por línea. La parte else es opcional. n caso de querer hacer todo el control en unasola línea, las proposiciones deber"n estar separadas por un punto y coma #F%.

  • 8/17/2019 Como Hacer Scripts en Bash

    4/21

    Los comandos que est/n deba$o del then se e$ecutar"n si la condici(n dio erdadera. sto quieredecir que el alor de retorno de la condici(n fue G #cero%. n caso contrario se e$ecutar"n loscomandos que le siguen al else, si es que se utiliz( esta proposici(n.

    n la condici(n se puede poner un comando, donde la e$ecuci(n del mismo #su alor de retorno%definir" qu/ comandos #de qu/ proposici(n% se e$ecutar"n.

    2i se erifica una condici(n, se deber"n utilizar los corchetes para mayor comprensi(n.$emplos'

    #utilizando comandos%

     El hecho de entregar algo como salida se toma como condición lógica verdadera. 

    iC ps a 5 grep httpd 5 grep 0v grepthen  echo "El Feb server estG Cuncionando"else  echo "El Feb server esta Cuncionando"Ci

    #utilizando condiciones%

    iC 0F /etc/passFd then  echo "Iengo permisos de escritura en el archivo /etc/passFd"else  echo " tengo permisos de escritura en el archivo /etc/passFd"Ci

    &uede suceder que tengamos que testear mas de una condicion, para esto, podemos utilizar lasiguiente estructura'

    iC condicinJ then  omandoJ  omandoKeliC condicinK thenomandoJ

      omandoKelse  omando0por0deCecto #inguna de las condiciones anteriores es verdaderaCi

    sta es una manera de abreiar arias estructuras if < then < else < if en una sola, pudiendo utilizarsem"s de dos condiciones.

    La estructura de control if, es muy utilizada con test, que no es m"s que una operaci(n decomparaci(n, en las condiciones que se requieran.

    Comparaciones de cadenas al$anum&ricas

    perador 'erdad 8I)LE9 siM000000000000000000000000000000000000000000cadenaJ , cadenaK cadenaJ es igual a cadenaKcadenaJ !, cadenaK cadenaJ no es igual a cadenaKcadenaJ 6 cadenaK cadenaJ es menor que cadenaK

    cadenaJ 7 cadena K cadenaJ es maBor que cadena K0n cadenaJ cadenaJ no es igual al valor nulo 8longitud maBorque N90z cadenaJ cadenaJ tiene un valor nulo 8longitud N9

    http://wiki.xtech.com.ar/index.php/Programaci%C3%B3n_de_scripts_en_Bash#testhttp://wiki.xtech.com.ar/index.php/Programaci%C3%B3n_de_scripts_en_Bash#testhttp://wiki.xtech.com.ar/index.php/Programaci%C3%B3n_de_scripts_en_Bash#test

  • 8/17/2019 Como Hacer Scripts en Bash

    5/21

    Comparación de "alores num&ricos

    perador 'erdad 8I)LE9 siM000000000000000000000000000000000000000000 0lt B menor que B 0le B menor o igual que B 0eq B igual que B 0ge B maBor o igual que B 0gt B maBor que B 0ne B no igual que B

    'tributos ue se pueden comprobar

    perador 'erdad 8I)LE9 siM0000000000000000000000000000000000000000000d archivo archivo eiste B es un directorio0e archivo archivo eiste0C archivo archivo eiste B es un archivo regular 8no un  directorioO u otro tipo de archivo especial9

    0r archivo Iienes permiso de lectura en archivo0s archivo archivo eiste B no esta vacPo0F archivo IenQs permiso de escritura en archivo0 archivo IenQs permiso de ejecucin en archivo 8o de bAsqueda  si es un directorio9

    0 archivo Eres el dueRo del archivo0 archivo El grupo del archivo es igual al tuBo.

    archivoJ 0nt archivoK archivoJ es mas reciente que archivoKarchivoJ 0ot archivoK archivoJ es mas antiguo que archivoK

    E%ercicios i$

    • 9ealizar un script que permita emita por pantalla la leyenda >st"s usando H*>, >st"susando nome> o >st"s usando algo que no es H* o nome>. 2eg-n corresponda a cadacaso. 2e puede usar la presencia de =dm o gdm como prueba de que corre el correspondienteadministrador de escritorio.

    case

    l >case> es una proposici(n que puede analizar y alidar arios casos #opciones% del alor de una

    ariable.2intaxis

    case variable inpatrn 5 patrn9  omando@  omando@  omando@@

    patrn 5 patrn9  omando@  omando@  omando@@

    ;9  omandos si ningAn otro valor Cue igualado@@esac

  • 8/17/2019 Como Hacer Scripts en Bash

    6/21

    l case es raramente usado, pero es muy eficiente en algunos casos.

    $emplos'

    case $mes inene;5Ene;9  echo "%es de Enero"@@Ceb;5Teb;9

      echo "%es de Tebrero"@@mar;5%ar;9  echo "%es de %arzo"@@;9  echo "(lgAn otro mes!"@@esac

    E%ercicios case

    • 9ealizar un script que nos permita tocar una tecla y detecte la zona del teclado donde est" lamisma. Las zonas que usamos son' izquierda arriba, izquierda al medio, izquierda aba$o,

    derecha arriba, derecha al medio, derecha aba$o y tocaste cualquier cosa. &ara ingresar latecla usaremos el comando read.

    CiclosLos ciclos contienen secciones del programa que se repetir"n una determinada cantidad de eces ohasta que alguna condici(n cambie.

    $or

    l for debe ser el ciclo m"s utilizado, es muy pr"ctico cuando se traba$a con shell scripts.

    1 diferencia de los lengua$es de programaci(n m"s comunes, un ciclo for dentro de un shell scriptrealiza una acci(n dada sobre cada uno de los elementos de una lista, y no sobre una ariable que sea incrementando en cada ciclo.

    La ariable utilizada en el for #en este caso 5i% es reemplazada por cada una de las palabras de lalista, en cada ciclo del for.

    2intaxis'

    Cor i in lista de palabrasdo  cuerpo del cicloO $i tiene el valor de elementos sucesivos de la lista

    done

    $emplos'

    Cor i in >ls 0J /tmp>do  echo $i  rm 0i $idone

    n este ciclo, el comando ls

  • 8/17/2019 Como Hacer Scripts en Bash

    7/21

    E%ercicios $or

    • 9ealizar un script que permita ingresar un nombre de directorio y de como resultado elnombre de cada archio en /l y una leyenda que diga >*irectorio>, >nlace> o >1rchioregular>F seg-n corresponda.

    *hileste ciclo utiliza la condici(n de terminaci(n de un comando #alor de retorno% para controlar lae$ecuci(n de los comando dentro del ciclo. Aermina la e$ecuci(n del ciclo, cuando el comandodeuele falso #algo diferente a G%.

    2intaxis'

    Fhile comandodo  cuerpo del ciclo ejecutado a condicin deque el comando devuelva verdadero

    done

    $emplos'

    Fhile sleep UNdo  Fho 5 grep danieldone

    n este e$emplo, cada KG segundos #definidos por el comando sleep KG%, erificar" si el usuariodaniel ha ingresado al equipo. n caso de que lo haya hecho, el listado del ho saldr" por pantalla#cada KG segundos%.

    untilste ciclo se comporta de una manera muy similar al anterior, ya que define su control dependiendodel comando que e$ecuta #si /ste da erdadero, se sigue e$ecutando el ciclo%.

    2intaxis'

    until comandodo  cuerpo del ciclo ejecutado a condicinde que el comando devuelva Calso.

    done

    $emplo'until Fho 5 grep danieldo  sleep UNdone

    n este e$emplo, a diferencia del e$emplo del ciclo hile, el ciclo e$ecuta primero el comando, deesta forma no es necesario esperar KG segundos para saber si el usuario daniel esta logueado en elequipo #si el usuario esta logueado, el ciclo termina%.

    'rgumentosLos argumentos siren para pasarle a un programa o una funci(n alores desde la línea de comando.

  • 8/17/2019 Como Hacer Scripts en Bash

    8/21

    Variable Descripción

    5+ N-mero de argumentos

    5B Aodos los argumentos del shell

    5< ;pciones suministradas al shell

    5M :alor de retorno del -ltimo comando e$ecutado55 Identificaci(n del &I* #n-mero de proceso%

    5G Nombre del script

    5J &rimer argumento

    5n 1rgumento >n>

    $emplo'

    #!/bin/sh## Vrograma que recibe argumentos B los imprime por pantalla

    #echo "4$;M $;"echo "4$#M $#"echo "4$NM $N"echo "4$JM $J"echo "4$KM $K"

    Notas sobre el e$emplo'

    n la líneas de impresi(n #echo%, para imprimir el símbolo >5> #pesos% se tiene que anteponer elsímbolo >?> #contra barra%, sino el shell lo a a interpretar como una ariable, y si esta existeimprimir" su contenido.

    +uncionesLas funciones son un recurso esencial para la buena programaci(n, permiten escribir una sola ezun pedazo de c(digo que se repita arias eces en el script, y así, minimizar el margen de error ytambi/n la cantidad de líneas en el programa.

    &ara utilizarlas simplemente se hace un llamado a la funci(n. Las funciones pueden estar dentro delmismo shell script, o en un archio aparte. 8uando se escriben las funciones en un archio aparte,es muy importante utilizar el comando >.> #punto% para cargarlas en memoria. 2i no se cargan enmemoria de esta manera, las funciones no estar"n disponibles.

    $emplo'## argando las Cunciones en memoria#. /home/jose/Cunciones/Cunciones0arch.sh

    ,so

    La sintaxis para utilizar funciones es muy sencilla y no agrega mayor dificultad. l modo de uso seremite a definir la funci(n especificando el nombre y parentesis que abren y cierran. Aodos loscomandos que inolucran la funci(n se encierran con llaes.

    $emplo'

    #archio' lib!arch.sh%

  • 8/17/2019 Como Hacer Scripts en Bash

    9/21

    ## Tunciones para manipulacin de archivos#borrar 892  arch,$J  iC 0z "$arch"

      then  echo "o se recibi ningAn archivo"  return K  else  iC 0C "$arch"   then  iC 0F "$arch"   then  rm 0i $arch  else  echo "o tengo permisos para borrar $arch"  Ci  else

      echo "$arch no es un archivo"  Ci  Ci3

    #archio' principal.sh%

    #!/bin/bash## Vrograma ejemplo para el uso de Cunciones en shell script#

    #

    # argo las Cunciones en memoria#. lib/arch.shdir,./Cor i in $dir/;do  borrar $idone

    Notas sobre el e$emplo'

    #archio' lib!arch.sh%

    sta funci(n toma el archio a borrar como argumento #arch45J%, erifica que se le haya pasado unargumento realmente #if 5arch> O%, que un archio pasado como argumento sea regular #if 5arch> O% y que tenga permisos de escritura. n todos los casos de falsedad responde con unmensa$e aisando el problema.

    #archio' principal.sh%

    l programa hace un ciclo con los archios de un directorio específico #for i in 5dir!B% y se los pasacomo argumento a la funci(n borrar.

    Valores de retorno

    Las funciones pueden deoler alores de error utilizando el comando >return PalorQ>. n caso deque no se especifique un alor de retorno de esta forma, el alor retornado ser" el que retorne el-ltimo comando e$ecutado dentro de la funci(n. *esafortunadamente no es posible asignar el alor

  • 8/17/2019 Como Hacer Scripts en Bash

    10/21

    retornado en una sola línea, siempre es necesario utilizar la ariable especial >5M>.

    $emplo'

    #!/bin/sh

    Cunc 89 2  return $J

    3

    Cunc Necho "retM 8$:9"Cunc Jecho "retM 8$:9"Cunc Kecho "retM 8$:9"Cunc Wecho "retM 8$:9"

    Variables locales a la $unciónxiste la posibilidad de utilizar ariables locales a la funci(n, esto significa que la ariablesolamente a a existir durante la e$ecuci(n de la funci(n.

    &ara crear una ariable local a la funci(n se utilizar el operador >local PnombreRdeRariableQ>.

    $emplo'

    Cunc 89 2  local   ,$J  echo "Xentro de la Cuncin 4$ vale 8$9"3

    echo "(ntes de ejecutar la Cuncin 4$ vale 8$9"Cunc H(!!echo "XespuQs de ejecutar la Cuncin 4$ vale 8$9"

    -peraciones 'ritm&ticasxisten arias formas de calcular alores dentro de un shell script. Aradicionalmente, estos c"lculosse hicieron con programas externos, esto generaba un retardo inmenso en la e$ecuci(n del shellscript.

    3oy los nueos int/rpretes traen la posibilidad de hacer c"lculos internamente. &ara esto se utilizauna sintaxis especial, y es muy importante que los alores de las ariables que utilicen para hacerestos c"lculos sean n-meros -nicamente.

    ,so

    La sintaxis para hacer operaciones aritm/ticas es la siguiente'

    $6epresin7

    Las operaciones que se pueden realizar son'

    •suma 5##JSJ%%

    • resta 5##@

  • 8/17/2019 Como Hacer Scripts en Bash

    11/21

    • diisi(n 5##@!@O%

    • otras como suma de bits, sacar el m(dulo, ealuaci(n de igualdad, etc.

    $emplo'

    #!/bin/sh## peraciones aritmQticas#,Ktot,$$+Jecho "totM 8$tot9"

    bc 

    1 eces hay con$untos de herramientas que nos suenan y no las aproechamos al m"ximo. Tuiz"suna de esas sea bc. La calculadora que podemos usar desde la consola, que aparte de sumar y restarpuede realizar c"lculos con una precisi(n de arios decimales, cambiar de base num/rica o

    programarla, etc. eremos como...2i e$ecutamos bc eremos'

    $ bcbc J.NUopBright JYYJ0JYY-O JYYZO JYY[O KNNN Tree SoCtFare ToundationO &nc.Ihis is Cree soCtFare Fith (*SLIE\ ]())(I\.Tor details tBpe >FarrantB

  • 8/17/2019 Como Hacer Scripts en Bash

    12/21

    scale,^variable,WJNN/variableWW.WWWWW

    3ay una ariable especial llamada last, almacena el resultado de la -ltima operaci(n'

    JNN/WWW.WWWWWlast;KUU.UUUUU

    Cambios en la base num&rica

    3ay dos ariables especiales que son ibase y obase que definen la base de entrada y de salida delos n-meros, respectiamente.

    2i queremos calcular el n-mero en base JG #decimal% a base @ #binario%, haremos'

    obase,K^JNJ

    2i queremos pasar de binario a hexadecimal'

    obase,JUibase,KJJJJJJJJTT

    -tras operaciones matem.ticas

    &odemos usar tambi/n sqrt, K=W, etc.

    2i queremos tener operaciones matem"ticas m"s comple$as tenemos que e$ecutar el bc 0l paracargar la librería matem"tica'

    s 89 Seno de O en radianesc 89 oseno de a 89 (rcotangente de l 89 ogaritmo neperiano de e 89 Eponencial de j 8nO9 Tuncin de *essel de un entero de orden n de

    (plicacin en un script 2i queremos pedir que el usuario teclee algo por teclado, la funci(n es read. &or tanto.

    variable,read89

    sperar" que tecleemos algo y lo pondr" en variable.

    Aambi/n podemos hacer un programa en un archio y e$ecutarlo'

    print "Hola4n"print "Escribe tu aRo de nacimiento4n"nacimiento,read89edad,KNNW0nacimiento

    print edadprint " aRos4n"halt

  • 8/17/2019 Como Hacer Scripts en Bash

    13/21

    ) lo e$ecutamos con bc 0q archivo.bc #el 0q es para que no muestre el 8opyright% estaremospreguntando el aVo nacimiento y mostrando la edad.

    1hora un e$emplo definiendo una funci(n, pas"ndole un par"metro y retorn"ndolo. :eremos que estotalmente intuitio'

    deCine maBor_edad8edad9 2  iC 8edad 6 J[9  return N  iC 8edad 7, J[9  return J3

    print "XP tus edad4n"edad,read89

    iC 8maBor_edad8edad99  print "Eres maBor de edad4n"

    iC 8!maBor_edad8edad99

      print "Eres menor de edad4n"

    halt

    Un -ltimo e$emplo, con un Cor'

    Cor 8i,N@i6JN@i++9 2  print iO"4n"3halt

    ;bseremos en la O para separar la ariable y la cadena en el print.

    &ara salirhalt

    ;tra forma muy -til en los scripts es'

    resultado,$8echo "scale,W@K/W" 5 bc9

    -peraciones lógicas / de comparación

    test&ara usar if podemos usar un nueo elemento, los corchetes que eal-an las condiciones, esto estabasado directamente en test. ) /ste nos sire para comparar ariables.

    &or e$emplo'

  • 8/17/2019 Como Hacer Scripts en Bash

    14/21

    2int"xis'

    epJ operador epK

    Uso de test'

    test [ 0lt Y

    Usando ariables en test'

    variableJ,^variableK,Wtest $variableJ 0gt $variableK

    ;tra forma muy -til de uso de test #si es menor que %'

    W 0lt ^

    ; #si 53189 es distinto de J%'

    $H(E) !, J

    $emplo'

    #!/bin/bashvariableJ,^variableK,W $variableJ 0lt $variableK echo $:

    1qui hemos ealuado dos ariables para er si la ariableJ era menor que la ariable@ y para er elresultado hemos acudido a la Yariable de retornoZ, que nos mostrara G o J.

    8uando necesitamos utilizar la negaci(n, debemos usar el signo $emplo'

    iC ! 0 $T&E  then  chmod + $T&E else  echo "$T&E es ejecutable" Ci

    2i el archio no es e$ecutable, le damos permiso de e$ecuci(n, sino, imprimimos el mensa$e porpantalla

    Interacción con el usuarioWuchos programas no serían factibles si no tui/ramos alg-n mecanismo para interactuar con elusuario, ya sea un simple >&resione nter para continuar> o algo m"s sofisticado, como una lista deopciones de las cuales escoger.

    8uando el programa est" escrito en shell, es muy sencillo lograr ambas cosas, utilizando dosherramientas' read y dialog.

    read

    l comando read es muy sencillo. Le indicamos que pida el alor de una ariable al usuario, elusuario escribe una línea de texto #es decir, cualquier cosa hasta que presione enter%, y la ariable

  • 8/17/2019 Como Hacer Scripts en Bash

    15/21

    toma el alor que el usuario ingres(.

    $emplo'

    josetech eperto$ read 'Hola mundo!josetech eperto$ echo $'Hola mundo!

    josetech eperto$

    2i deseamos s(lo un >&resione enter para continuar> es exactamente lo mismo, simplementeignoramos el alor de la ariable 'interfaz> para que el usuario interact-e, y entrega por la salidaest"ndar el resultado de la acci(n del usuario, ariable 01.

    &uede producir preguntas si!no, men-, lista, calendario, barra de progreso, di"logo de contraseVa,

    cuadro de texto, cuadro de mensa$e, etc. 9ecomendamos leer la documentaci(n del manual #mandialog% o e$ecutar

    dialog 00help

    1parte del programa >dialog>, que produce una salida por consola, puede ser que tenga en susistema un programa >gdialog>, Xdialog o >dldialog> #dependiendo del Linux que utilice%, que sonlo mismo, solo que abren una entana gr"fica, por XJJ, para el di"logo.

    2intaxis'

    dialog 6opciones7 2 00opciones especPCicas 3

    $emplo J #*i"logo >yesno>%'josetech eperto$ dialog 00Besno "Xesea salir:" U WN

    &roduce esto'

    Los argumentos K y G corresponden a la altura y ancho, respectiamente, del cuadro. n su ersi(nXJJ, sería'

    josetech eperto$ gdialog 00Besno "Xesea salir:"

    http://wiki.xtech.com.ar/index.php/Imagen:Dialog1.png

  • 8/17/2019 Como Hacer Scripts en Bash

    16/21

    ) se ería así'

    $emplo @ #*i"logo >inputbox>%'

    josetech eperto$ dialog 00inputbo "&ngrese su nombre" Y WN `uan

    Note que agregamos el argumento >[uan>, que ser" el alor predeterminado para este inputbox'

    ; tambi/n'

    josetech eperto$ gdialog 00inputbo "&ngrese su nombre"

    &roduce esto'

    l caso del >inputbox> suele tener apare$ado la necesidad de asignar ese alor ingresado a unaariable. &ara hacer eso tendremos que usar la siguiente sint"xis'

    '()&(*E,>gdialog 00inputbo "&ngrese su nombre" K7?J>

    Note que pusimos todo el comando entre comillas inertidas para que reemplace el mismo por elalor que el comando representa despu/s de e$ecutarse.

    l K7?J es un truco que permite redirigir la 2A*99 hacia la 2A*;UA, ya que el alor ingresado

    http://wiki.xtech.com.ar/index.php/Imagen:Gdialog2.pnghttp://wiki.xtech.com.ar/index.php/Imagen:Dialog2.pnghttp://wiki.xtech.com.ar/index.php/Imagen:Gdialog1.png

  • 8/17/2019 Como Hacer Scripts en Bash

    17/21

    sale por la salida de error en ez de la est"ndar.

    $emplo #*i"logo >msgbox>%'

    josetech eperto$ dialog 00msgbo "Esto es muB bueno para mensajes" ^ ^N

    &roduce esto'

    ; tambi/n'

    josetech eperto$ gdialog 00msgbo "Esto es muB bueno para mostrar mensajeslargos o de advertencia"

    &roduce esto'

    E%ercicio 2

    *escompresi(n 1utom"tica de 1rchios

    2e debe ingresar el nombre de un archio por la línea de comandos, y el script debe reconocer conqu/ herramienta est" comprimida y proceder a descomprimirlo. 2i el archio no est" comprimido, elscript deber" deoler un mensa$e de error.

    AI&' utilizar el programa >file>

    3esolución

    #!/bin/bash

    http://wiki.xtech.com.ar/index.php/Imagen:Gdialog3.pnghttp://wiki.xtech.com.ar/index.php/Imagen:Dialog3.png

  • 8/17/2019 Como Hacer Scripts en Bash

    18/21

    ## Xecompresor inteligente

    iC 0z $J then## Si no haB argumento salimos del script con error "J!

    #  echo "Xebe ingresar el nombre del archivo"  eit Jelse  ()H&',$JCi

    I&V,>Cile $()H&'>## 'eriCicamos el tipo de archivo# Salida del comando CileM## Vara &V

    # Cile ejemplo.gz# ejemplo.gzM gzip compressed dataO Fas "ejemplo"OCrom Lni## Vara *&VK# Cile ejemplo.bzK# ejemplo.bzKM bzipK compressed dataO bloc1 size ,YNN1

    case $I&V in"$2()H&'3M bzipK";9  bunzipK $()H&'  @@"$2()H&'3M gzip";9

      gunzip $()H&'  @@;9  echo "o esta comprimido"  @@esac

    eit N

    E%ercicio 4

    Listado del *irectorio 3ome

    2e debe realizar un listado recursio del directorio personal, y guardar la informaci(n en un archio.Luego debe comprimirse ese archio y preguntar al usuario en qu/ directorio quiere guardar elarchio comprimido.

    3esolución

    #/bin/bash# istado del Home

    # &niciamos la variable.rm 0rC ./listado.tttouch ./listado.tt()H&',"./listado.tt"

  • 8/17/2019 Como Hacer Scripts en Bash

    19/21

    # istamos los archivos B los guardamos en el archivols 0J D 77 $()H&'cat $()H&'

    # omprimimos el archivo como tar.gztar 0czvC listado.tar.gz $()H&'

    %V)&%&X,listado.tar.gz

    # Vreguntamos al usuario donde desea guardar ese archivo.echo "Vor CavorO ingrese el V(IH donde desea almacenar $%V)&%&X."read V(IHecho $V(IHecho $%V)&%&X

    # uardamos el archivo donde se indico.mv $%V)&%&X $V(IH

    # Se imprime donde se guardo el archivo.echo "Se guardo $%V)&%&X en $V(IH"

    eit N

    E%ercicio 5

    9alizaci(n de un bac=up diario

    2e debe archiar como >tarball> #archio .tar.gz% todos los archios del directorio personal. sto sedebe hacer grabando un 89 regrabable.

    3esolución 2

    #!/bin/bash## Se limpia la pantalla para tener una salida mGs prolija.

    clear

    # Se procede a desmontar el X por si alguien olvid hacerlo.

    echo ";;; Xesmontando X)% ;;;"umount /mnt/cdrom

    # Se limpia nuevamente la pantalla.

    clear

    # Se anuncia al usuario que se comienza a borrar el X.

    echo ";;; *orrando X)% ;;;"echo "Vor CavorO sea paciente. Este proceso puede demorar hasta KN minutos."echo " "

    # Se utiliza el programa cdrecord para borrar el X.

    cdrecord 0v 0dev,(I(V&MNONON 0blan1,Cast 7 /dev/null

    # Se borra nuevamente la pantalla.

  • 8/17/2019 Como Hacer Scripts en Bash

    20/21

    clear

    # Se anuncia por pantalla el comienzo del bac1up del directorio.

    echo ";;; omenzando el bac1up ;;;"

    # Se crea un directorio temporal para almacenar el bac1up.

    m1dir /tmp/bac1upNK

    # Se limpia la pantalla.

    clear

    # Se anuncia por pantalla que se comienza a salvar el directorio personal.

    echo ";;; *ac1up del directorio Versonal ;;;"

    # Se comprime el directorio personal.

    tar 0cvzC /tmp/bac1uoNK/home.tar.gz D/ 7 /dev/null

    # Se limpia la pantalla.

    clear

    # Se anuncia por pantalla que se realiza el &S a grabar.

    echo ";;; reando archivo de )esguardo ;;;"

    # Se crea la imGgen &S.

    m1isoCs 0r 0` 0o bac1upNK.iso bac1upNK/ 7 /dev/null

    # Se borra la pantalla.

    clear

    # Se anuncia el comiezo de la grabacin del X.

    echo ";;; omenzando la grabacion del X)% ;;;"echo "Vor CavorO sea paciente. Este proceso puede tardar hasta WN minutos."echo " "

    # Se comienza a grabar el X con cdrecord.

    cdrecord 0v speed,- dev,(I(V&MNONON 0data bac1upNK.iso 7 /dev/null

    # Se anuncia en pantalla el borrado de los archivos auiliares.

    echo ";;; impiando archivos etras ;;;"rm 0)C /tmp/bac1upNK.iso 7 /dev/nullrm 0)C /tmp/bac1upNK 7 /dev/null

    # Se desmonta el X.

    umount /mnt/cdrom

    # Se limpia la pantalla.

    clear

  • 8/17/2019 Como Hacer Scripts en Bash

    21/21

    # Se anuncia que el proceso Cinaliz con Qito.

    echo ";;; Se realizo el bac1up con eito ;;;"

    eit N

    3esolución 4 (bac6up por 7'8B')

    #!/bin/bash## Se limpia la pantalla para tener una salida mGs prolija.

    clear

    # Se procede a desmontar el X por si alguien olvid hacerlo.

    echo ";;; Xesmontando X)% ;;;"umount /mnt/cdrom

    # Se limpia nuevamente la pantalla.

    clear

    # Se monta por red el X de un cliente FindoFs.

    smbmount //pcW/d /mnt/cdrom 0o username,usuarioOpassFord,contraseRa

    # Se borra nuevamente la pantalla.

    clear

    # Se anuncia por pantalla el comienzo del bac1up del directorio.

    echo ";;; *ac1up del directorio Versonal ;;;"

    # Se comprime el directorio personal.

    tar 0cvzC /mnt/cdrom/home.tar.gz D/ 7 /dev/null

    # Se desmonta el X.

    umount /mnt/cdrom

    # Se limpia la pantalla.

    clear

    # Se anuncia que el proceso Cinaliz con Qito.

    echo ";;; Se realizo el bac1up con eito ;;;"

    eit N