Você está na página 1de 31

Prog ramacion bash shell

Nota importante antes de continuar... Para poder continuar leyendo este manual y aprender un poco de programacion de bash shell tienes que saber al menos los comandos basicos de GNU/LInux. Nota 2: Para la reproduccion de audio y musica necesitas tener instalado OppenOfiice.org programa gratuito parecido a Office pero mucho mejor!, y para seleccionarlos ya que muchas veces es dificil teclear mayus+f1 y seleccionarlo para empezarlo a reproducir, todos los formatos son libres!. Nombre= bash (bourneagain shell) otro shell bourne, ya que antes de el estaba el de el sistema operativo UNIX que era la bourne shell (sh), si haces juego de palabras, por ejemplo: born-again = renacimiento Copyrigth= Free software fundation inc. FSF es una organizacin fundada por richard stallman creador de proyecto GNU.

Richard Stallman hablando sobre Software

libre, Formato .ogg libre.

Cancion del software libre by Richard Stallman Esta cancion es muy buena yo la encontre por youtube, inventada por el mismo Richard Stallman, escuchenla -->

Que es una shell Es una parte muy importante de todo sistema operativo que se encarga de ejecutar ordenes basicas para el manejo del sistema (es decir, si tu tienes un shell podrias no tener el nautilus y estar navegando por tus carpetas facilmente, Nautilus es por donde navegas por ventanas es como el explorer de windows solo que mejor xD) Con un shell puedes hacer infinidad de cosas como controlar tu pc, programar en el, etc etc, es algo muy poderoso y mas todavia en sistemas basados en UNIX como es Ubuntu, Fedora, Arch Linux(mas enfocado a la shell jejeje), etc etc existen muchas distros. Tipos de Shells Hay distintas shells como pueden estar tambien las Korn(ksh) y C (csh), tambien hay shells para windows como algun ejemplo es PuTTY, el cual es software libre y lo puedes bajar desde su pagina oficial: www.cygwin.com , aunque la mayoria de las veces esta el ms-dos o cmd pero no seria muy potente! :p

Bash fue adaptado por IEEE POSIX Shell (POSIX= Portable Operating System Interface la X viene de UNIX). Empecemos con comandos en la programacion Antes que nada cabe aclarar que un comando es una instruccin, es decir, que tu eres el jefe y le dices has tal cosa y el lo hace! Un ejemplo es el comando Sudo, el cual sirve para logearte como root, es decir, como superusuario (rango mas alto que el de un administrador). Comando Echo El comando Echo lo que hace es mostrarnos un texto en pantalla. Su sintaxis es: Echo TextoQueQuieras Nota: las comillas son agregadas por el contenido de algun metacaracter (veremos la definicion de lo que es un poco mas adelante!!!), como puedes ver en la ventana de la derecha tenemos un echo Esto es un ejemplo de el textp que puedes agregar y debajo de ella se muestra en pantalla el texto sin xd@admin:~$ el cual significa usuario@grupo:~logeo

El comentario #!/bin/sh Como ya muchos saben y sino pues aqu les explico que mayoria de las veces siempre viene este comentario al principio, un comentario siempre empieza con #comentario y dice !/bin/sh para hacer referencia a que se debe ejecuta con esa shell o que es compatible con otras. En este caso es la bash ya que siempre termina con .sh al guardarlos ya veran en lecciones mas avanzadas. Redireccion de ficheros Un fichero es algo que esta en nuestro ordenador que contiene bits que gasta memoria dentro de l, asi se podria decir mas o menos :P. Los ficheros estandar que estan abiertos para todos los programas en ejecucion son: Entrada estandar /dev/stdin (un ejemplo: el teclado!) Salida estandar /dev/stdout (un ejemplo: La pantalla!) Salida de error /dev/stderr (un ejemplo: La pantalla!) Otros ficheros que son especiales: /dev/null La nada de unix /dev/zero Fuente infinita de ceros /dev/random datos aleatorios Una forma facil para redirijir ficheros es el uso de > (mayor que), < (menor que) >> (dos menor que) cada uno tiene su significado por ejemplo el mayor que es para crear un fichero, el menor que para redirigir hacia adentro, el dos mayor que para aadir a un archivo, dependiendo delo que necesite el script, ya veremos mas adelante sino es mas de 1 ejemplo o solo 1 pero ya para que lo tengan un poco mas claro! Variables de la Shell

Una variable la podemos definir como un contenedor, es decir, algo que guarda los datos para despues al ser llamados mostrarlos, la variable se suele crear dandole un nombre cualquiera (NOMBRE, VARIABLE), es decir, el que tu quieras y precedido por el signo igual (=) y luego un valor el cual le dars (valor que le quieras dar). Para poder crear una variable en la shell tienes que tener en cuenta los siguentes puntos: Las variables shell van en mayusculas. no hay espacios en ningunos de los dos lados del signo igual (=) son llamadas o visualizadas con el signo de dollar ($) Si te fijas en la imagen de lado cree una variable llamada HOLA la cual contenia un valor esta es una variable Y la llame con el signo de dlar diciendole echo $HOLA es decir muestrame la variable HOLA, y despues de esa linea me muestra el valor que contenia la variable. Nota: no necesariamente la variable tiene que estar en mayuscula pero es una preferencia. Eliminar los significados especiales de los metacaracteres y que son. como dijimos anteriormente aqu diremos que es un metacaracter,

Un metacaracter es un carcter que tiene un significado especial en un programa informatico, unos ejemplo de metacaracteres de la shell: asterisco (*), interrogacion (?), corchetes ([]), los cuales pueden tener otro significado para la shell Bash. Al eliminar el significado de los metacaracteres la operacin realizada es llamada Escape. Ahora para eliminar los metacaracteres hay distintas maneras, las cuales son: (\) Slash invertido: indica que el carcter que sigue es un carcter alfanumerico normal. Si te fijas en la imagen ubicada arriba puedes ver como le digo que me muestre una '<>?&$* los cuales son caracteres especiales o metacaracteres e interpreta como si fueran caracteres normales mostrandomelos en pantalla.

() Comillas dobles: esta anula la mayoria de los metacaracteres exeptuando el dollar ($) el cual se puede anular con el slash invertido (\).

Si miras la imagen de arriba en el primer echo me muestra exactamente el texto, en el segundo con el signo dollar tambien me lo muestra, pero al ponerle el texto junto con el signo de dollar no me muestra como si fuese una variable :p lo cual es lo que les dije anteriormente. (') Comillas simples o sencillas: ests pueden anular cualquier metacaracter exepto a ellas mismas, es decir, las comillas simples.

Si te das cuenta al principio puse entre comillas simples varios metacaracteres, peo al ponerle entre las comillas simples otra comilla simple y querer mostrar el texto no podia! :( lo cual es la exepcion que les dije. (`) El acento grave: Este es muy importante, ya que la shell interpreta a todo lo que este dentro de esos acentos como un comando (orden ejecutable).

Ahora si miras bien la imagen de arriba al principio agrego un echo que diria muestrame y como puse ls que es un comando de la shell que muestra todos los directorios de la carpeta donde nos encontramos, pero ese ls lo puse entre los acentos graves lo cual me la ejecuto como un comando y luego la ejecute sin echo el ls, pero si te fijas detenidamente son las mismas cosas solo que no se acomodan bien :) Tambien podriamos aver puesto echo muestrame directorios `ls` lo cual hubiera ocasionado lo mismo solo que al principio muestra el mensaje muestrame directorios. El comando Read Este lo que hace es lo que dice la palabra leer! como?, bueno pues lee una linea y la almacena en una variable hasta para usarla despues...

como se ve en la imagen, vamos a traducirla a como se podria decir en espaol: leeme unavariable (es el nombre que le dimos a la variable), luego esa variable no se usar hasta que el usuario la digite es decir nosotros no le damos un valor sino el que se lo da es el usuario al momento de estar corriendo como un script, este read seria como un set /p en el batch de windows, ya que el usuario introdujo su dato en este caso aquielusuariodigitasutextononosotrossinoelusuario entonces ahi yo llamo la variable para que me la muestre en la pantalla con un echo se llama como una variable solo que el usuario digita el texto $unavariable con lo cual me muestra: se llama como una variable solo que el usuario digita el texto aquielusuariodigitasutextononosotrossinoelusuario. Bueno intente ser lo mas explicito posible XD...

Logica de la shell Primero que nada la logica se le puede llamar facilmente la Razon es decir razonamiento!!, bueno entonces veamos las logica que hay en la shell:
0 true 1 false

esta es la llamada logica inversa, ya que en realidad siempre 1 es verdadero pero en este caso es falso por lo cual es logica inversa, entonces en este caso si seria 0=true y 1=false. OK! Por lo cual Bash es poseedor de logica inversa. 0 es la ejecucion correcta de un comando 1 es la ejecucion incorrecta de un comando $? la variable retiene el valor de retorno del ultimo comando ejecutado

como puedes ver en la imagen de arriba abro un archivo con el editor cat pero ese archivo que quiero abrir no existe por lo cual me arroja que no existe, ahora uso la variable retorno($?), que me muestra que el ultimo valor ejecutado la cual fue incorrecto=1. Ahora en la segunda parte, es decir, el segundo comando que puse tire un ls el cual es un comando que se ejecuto por lo cual existe y me mando la salida de directorios, ahora utilice la variable retorno ($?)y me dio como resultado que el ultimo comando ejecutado fue correcto=0. Instruccin If Then (y de una ves else) Bueno facilmente lo que significaria en espaol if seria como un si, y then seria como un entonces!. A estos tambien se les puede llamar condicionales, un ejemplo: if [ lacondicion ] then ordenes... ultima orden else ordenes fi si [ lacondicion ] es verdadera entonces ejecutar ordenes y mas ordenes sino ejecuta ordenes termina la condicion

If seria un Si y termina con fi que es if alreves. Los corchetes son necesarios, ya veras por que son una orden. Debe haber espacio en blanco entre los corchetes

por ejemplo aqu cree un script el cual contiene comentarios (#) todo lo que se escriba despues de el signo numero ser tomado como comentario. Ahora vamos a interpretar un poco el codigo en espaol vendria siendo:

Si variable1 es igual a cero entonces es verdadero sino (else luego lo veremos) es falso termina condicional Ahora si quieren hacer el archivo no olviden guardarlo con extension .sh por ejempo aqu este seria el archivo que yo guarde el cual puede tener el nombrequequieras.sh

Si te fijas lo primero que hago seria darle permisos de ejecucion al archivo que acabo de crear con chmod 777 nombredetuarchivo.sh en mi caso es nombrequequieras.sh. Para ejecutarlo seria poner ./nombredetuarchivo.sh N donde la N es el numero que quieras darle a la variable $1 que ser llamada. En el primero yo puse ./nombrequequieras.sh 1 y me arrojo que era falso Luego en la segunda ejecucion puse 0 en ves de uno por lo que me arrojo que era cierto. Ese es un condicional If -then-else le agregamos el else ya que estamos en eso para no volverlo a repetir digamos lo que es el else ,el else es traducido como un sino, es decir, en el caso de el ejemplo de arriba decimos sino es verdadero es falso obvio pura logica XD!. La orden test = Verdadero o falso? Este es un comando interno de bash shell, ideal para usar con un condicional if, lo que hace es evaluar si la expresion es verdadera (0) o falsa (1), y si no hay expresion test devuelve falso. Hay dos sintaxis son: test <expresion> [ <expresion> ] Las dos maneras son correctas, la segunda manera la de corchetes tiene que aver un espacio de separacion de la expresion.

Figura 1

Figura 2

Bueno como pueden ver este es un ejemplo claro, si la cadena esta vacia me dara un falso y si est tiene algo de contenido me dara un cierto, lo guardo como cadena.sh en mi escritorio:

Ahora vamos a ejecutarlo en una terminal:

Ahora la primera ejecucion del script dice que la cadena es cierto por lo que esta seria igual a la figura 1 (la que contiene texto), y la segunda ejecucion nos da un falso, por lo que seria la figura 2 (el que no contiene texto).

Ahora algunas categorias de comprobacion del comando test La sintaxis de todas la expresiones deben de ser de la siguiente manera: test expresion_1 operador_logico expresion_2 Numerico: expresion1 -eq expresion2 comprueba si expresion 1 es igual (=) a expresion 2 expresion 1 -ge expresion2 comprueba si expresion1 es mayor o igual (>=) que expresion2 expresion1 -gt expresion2 comprueba si expresion1 es mayor (>) que expresion2 expresion1 -le expresion2 comprueba si expresion1 es menor o igual que (<=) expresion2 expresion1 -lt expresion2 comprueba si expresion1 es menor (<) que expresion2 expresion1 -ne expresion2 comprueba si expresion1 es distinto (!=) que expresion2 Cadena(Texto): Nota: La sintaxis es la misma que la del Numerico. expresion1=expresion2 comprueba si la expresion1 es igual a la expresion2 expresion1!=expresion2 comprueba si la expresion1 es distinta que la expresion2 Otra de las comprobaciones de la cadenas, es diferente, es decir

su sintaxis, seria: test operador $VARIABLE estos son los valores que puedes poner donde dice operador: -z Prueba si la cadena esta vacia -n Comprueba el valor de una cadena str Verifica que no sea cadena nula Archivo: archivo1 -ef archivo2 tienen el mismo manejador (en la forma en que son abiertos, editados o visualizados) y numeros de inodo (permisos, fechas, ubicacin, pero no el NOMBRE) archivo1 -nt archivo2 ve cual archivo es mas nuevo (fecha de modificacion) archivo1 mas nuevo que archivo2 archivo1 -ot archivo2 ve cual arhivo es mas viejo (en fecha) Tambien puedes hacer pruebas con los archivos, esto seria de la siguiente manera: test -operador $archivo -f $archivo = El archivo existe y es un archivo regular -L $archivo = El nombre de fichero es un vinculo simbolico (ln) -s $archivo = El fichero no esta vacio -r $archivo = El fichero se puede leer -w $archivo = El fichero se puede modificar y se puede escribir en l. -x $archivo = El fichero es ejecutable -d $archivo = El nombre de fichero es un directorio -c $archivo = El nombre del archivo hace referencia a un dispositivo caracter(Dispositivos orientados a caracteres transmiten solo un Bit o solo un Byte a la vez, es decir, utilizan la transmisin serial de datos, sin usar buffer.), veamos algunos ejemplos:

-b $archivo = El nombre del archivo hace referencia a un dispositivo bloque(Dispositivos orientados a bloques transmiten datos en bloques (paquetes) y por esa razn son usados a menudo para la transmisin paralela de datos. Estos dispositivos utilizan el Buffer de datos del sistema operativo.). Veamos algunos ejemplos:

-O $archivo = El archivo existe y es propietario del mismo. -p $archivo = El archivo existe y fue nombrado tuberia(un archivo

tuberia es uno de redireccionamiento, es decir, un archivo para que salga o entre, un ejemplo seria: $ls | more). -S $archivo = El archivo es un Socket (Un socket de Internet no es un archivo de dispositivo, sino una forma de comunicacin entre procesos) Algunos ejemplos:

-u $archivo = El archivo existe y tiene activado el bit set-user-ID (tambien llamado setuid o suid, Se utilizan principalmente para permitir a los usuarios del sistema ejecutar binarios con privilegios elevados temporalmente para realizar una tarea especfica.) -t [FD] = El descriptor del archivo FD (stdout por default) esta abierto sobre una terminal (archivo FD es dispositivo de disquete). -e $archivo = El archivo existe. -k $archivo = El archivo existe y tiene activado el bit sticky (Histricamente, el sticky bit se utilizaba en ficheros ejecutables. Cuando se asignaba, le indicaba al sistema operativo (SO) que mantuviera el programa en swap para ejecuciones posteriores incluso de otros usuarios . Hoy en da, el sticky bit se utiliza con directorios. Cuando se le asigna a un directorio, significa que los elementos que hay en ese directorio slo pueden ser renombrados o borrados por el propietario del elemento, el propietario del directorio o el usuario root, aunque el resto de usuarios tenga permisos de escritura.) -G $archivo = El archivo exite y es propietario efectivo por ID de grupo. orden if-then-elif bueno si seguimos el manual hasta aqu entonces sabran lo que es la orden if-then lo unico nuevo ser elif que vendria siendo como un if, es decir, un si mas... veamos su sintaxis y de ahi un ejemplo: if [condicion 1] then ordenes elif [condicion 2]

then ordenes else ordenes fi aqu ahora veremos nuestro ejemplo:

si miras decimos que si la variable contiene el valor domingo nos imprimir en pantalla que no se trabaja, si contiene feriado nos devolvera en algunos se trabaja, y si no contiene nada nos devolver que se trabaja!. Como puedes ver el archivo lo guarde como trabajo.sh y le di permisos de ejecucion y lo ejecute con determinados parametros para la variable, veamos la ejecucion en la terminal:

si puedes ver primero hice un ls para ver si se encontraba ahi, luego le di permisos de ejecucion y di un ls para ver si se aplicaron, luego lo ejecute con parametro feriado y me mando a la pantalla en algunos se trabaja, luego lo ejecute con el parametro domingo y me mando a la pantalla no se trabaja, luego no le puse ninguno por lo que me mando a la pantalla se trabaja. Bucle While un bucle se puede decir que es un repetidor, es decir, se repite muchas veces, y while se traduciria como mientras, lo que seria que mientras que sea verdadero se ejcutar las veces que sea necesario y mientras que no sea no se ejecutar . Su sintaxis seria: While [ condicion ] do ordenes y mas ordenes done Entonces vamos con 2 ejemplos en codigo:

como puedes ver ahi esta el archivo ya no es necesario explicar ya que el comentario que puse en el codigo lo explica todo y se ve claramente! Otra cosa que hay unos signos ; esto significa que esta cerrando esa linea de codigo para empezar otra como por ejemplo en el codigo esta: while [ $i -lt 6 ] ; do que como puedes ver en la misma linea hay dos codigos el while y el do pero para separarlos e indicar que do seria otro codigo utilizamos ; Nota: Los comentarios son los que estan #esteesuncomentario recuerda guardar en tu escritorio y darle permisos, recuerda siempre la extension .sh, seria elnombrequequieras.sh ahora vamos a ver que pasa cuando ya lo ejecutamos en una terminal o shell:

como puedes ver lo unico que pasa es que se ejecuta hasta 5 ya que cuando hace la suma en la variable dice que par! Y como puedes ver luego le puse noesquit, por lo que se siguio ejecutando la

orden read, pero cuando le puse la palabra verdadera! O correcta pues entonces ahi dejo de ejecutarse, facilmente para explicar este bucle (repetidor) seria mientras que la variable sea verdadera se sigue ejecutando el codigo sino no... Facil! Bucle Until Bueno el bucle until es casi identico a el bucle while con la diferencia de ser un hasta que y no un mientras que, es decir, hasta que la variable sea verdadera deja de ejecutarse y mientras que no lo sea se sigue ejecutando asi que tiene una pequea diferencia una de la otra. Su sintaxis seria asi: until [ condicion ] do ordenes y mas ordenes done Ahora veamos un ejemplo, para ello creamos nuestro archivo:

aqu esta mi archivo creado aunque me equivoque en escribirlo bien pero lo que importa es el codigo asi que vamos directamente a l:

si se fijan bien, vamos a explicar el codigo a como va cada linea: VAL=1 #la variable VAL vale 1 until [ $VAL -eq 10 ] #se ejecuta hasta que $VAL sea igual a 10 do #empezar echo creando arch$VAL #muestra en pantalla los archivos que vaya creando claro llegar hasta el archivo 9 touch arch$VAL #el comano touch crea los archivos del 1 al 9 VAL=`expr $VAL + 1` #el comando expr puede realizar operaciones y ` ` ejecuta la variable +1, es decir que vaya incrementando 1 la variable VAL para que no se quede en 1 done # Termina la creacion de archivos ls -l arch[0-9] # ve la lista con permisos de todos los achivos que se llamen arch del 1 al 9 es decir arch1, arch2, etc... rm arch[0-9] #elimina todos los archivos del 0-9 Y el script deja de ejecutarse. Veamos como se ve en una shell:

Estructura del bucle for -in Permite repetir un bloque de comandos asignando valores de una serie a una variable en cada iteracin.(repetir una serie de pasos un cierto nmero de veces.) En cada iteracin la variable VARIABLE toma un valor de SERIE, que en caso de no contener elementos har que no se ejecute nada y se devuelva un valor 0. En caso de que se ejecuten comandos, el resultado devuelto tras el bucle es el del ltimo comando ejecutado. Su sintaxis seria la siguiente: for VARIABLE in SERIE; do bloque de comandos done

Ahora veamos un ejemplo simple:

primeramente como siempre creamos nuestro archivo listo con su codigo: Bueno ahora vamos a ver lo que contiene el codigo para analizarlo un poquillo:

como puedes ver for seria que guardara en la variable en este caso i guardara los valores 1 2 3 4 5 y luego empieza otra linea que diria ejecutar que muestre en pantalla Numero y $i los valores ya que eso es lo que contiene la variable i y ya con eso estaria hecho, recuerden que esto es muy simple y pueden haber ejemplos mucho mas complejos. Veamos ahora lo que nos muestra en la pantalla:

Y ahi puedes ver lo simple que era el codigo. Se podria decir que este bucle for -in es el mas utilizado!

Bueno otro ejemplo mas complejo este lo pondre sin imagenes y lo pondre para que ustedes lo descubran, les dejare lo que hace porsupuesto: for VARIABLE in `/etc/rc.d/rc.*` do echo $VARIABLE start #arranca todos los mis demonios done pues como se pueden dar cuenta se ejecutan todos los archivos /etc/rc.d/rc y desde ahi con el comando start empiezan a ejecutarse todos los demonios que tu tengas en tu computadora. Ordenes logicas estas realizan operaciones sobre otros comandos de unix en este caso linux por la shell Condicion AND esta condicion en espaol significa Y. Veamos un ejemplo: comando1 && comando2 Este seria ejecutar en segundo plano, y && (es AND), ahora la logica de esto es que comando2 solamente se ejcuta si comando1 es verdadero (es decir un 0). Condicion OR esta condicion significa en espaol O. Veamos un ejemplo: Comando1 || Comando2 como puedes ver el OR(que significa o se utilizan dos tuberias ||), ahora el comando 2 es ejecutado solamente si el comando1 no lo es, es decir, que tendria que ser distinto a un 0.

Estructura Case Esta estructura elige entre varias opciones, case en espaol significa caso lo que seria en caso de... elige entre las opciones... Veamos un ejemplo simple: Bueno ya con mi archivo creado con el nombre de case.sh entonces les muestro el codigo de lo que se podria hacer un menu simple sin llamar en el codigo a ningun pograma ya que no lo he hecho. Como ven esta el comando read que seria cpmo un set /p en el cmd de windows, es decir algo para que tu introduscas un dato, en este caso puedes elegir a, b,c, y si no eliges ninguna te salio No eligio ninguna opcion valida, otra cosa llama a Programa1, Programa2, Programa3 pero no se ejcutaran ya que no los tengo pero solo era para ver un ejemplo, recuerden. Ahora veamos su ejecucion: Como pueden ver no tengo el programa pero si funciono el case, y cuando no escribi ninguna de las que eran me salio No eligio ninguna opcion valida, otra cosa que les queria decir que en l codigo en ves de cerrarse un case es decir una linea de a,b,c se cierra con 2 ;; en ves de una! Y que * actua como un else en esta opcion de case.

Veamos un ejemplo de un menu funcionando pero ay lo tendran que descubrir como creen que funciona, se los dejo con imagenes:

aqu el script ejecutandose.

Operaciones logicas con las expresiones logicas ! Expresion = cierto si la expresion es cierta sino negacion NOT logico Expresion1 -a Expresion2 = cierto si la expresion 1 y 2 son ciertas sino negacion AND logico Expresion1 -o Expresion2 = cierto si la expresion 1 o 2 son ciertas OR logico Variables especiales de la shell de linux Cuando se ejecuta nuestro programa en shell hay una serie de variables que siempre estarn disponibles, entre ellas las que nos permiten acceder a los distintos argumentos con los que fue ejecutado nuestro script. $# = Contiene el numero de parametros de la linea de orden $$ = Contiene el numero de PID (Id de el proceso, en el monitor de sistema puedes ver los id de los procesos en ejeucion en tu pc) del proceso en ejecucion $? = Contiene el estado de salida de la ultima orden $0 = Contiene el nombre del guion , tal como se escribe en la linea de orden $@ o $. = contiene todos los parametros de la linea de orden $1 , $2 .. $9 = Las variables especiales $1 , $2 .. $9 . Contienen los argumentos del 1 al 9 respectivamente. Se ignoran los argumentos de la linea de orden posteriores al 9. Sustitucion de los parametros El shell de linux nos permite la posibilidad para sustituir los parametros, lo que permite comprobar su valor y cambiarlo de auerdo a una opcion especificada. Esto es util en la programacion de la shell, cuando se necesia verificar si una variable es igual a algo. Por ejempo la orden read hay que comprobar si el usuario escribio algo!.

Su sintaxis es un signo de un dlar ($), un conjunto de llaves ({}), una variable, dos putos(:), un carcter y una palabra de la siguiente manera: ${VARIABLE: carcter de opcion palabra} El carcter determina lo que har con la palabra. Los 4 caracteres de opcion son los siguientes: +-=? Estas 4 opciones funcionaran de una manera difetente, dependiendo si la variable esta vacia o no. Una variable esta vacia, solo si su valor es una cadena vacia (recuerda que puedes comprobarlo con = test -z $variable) Ahora un ejemplo facil ,digamos que queremos mover una variable llamada archivo con el nombre de archivonuevo pero haciendolo simplemente de la siguiente manera: mv $archivo $archivonuevo no se podr de mandar un error, pera eso se le incluye la sustitucion de parametros, veamos como si se puede: mv $archivo ${archivo}nuevo Ahora si se podr, intentalo, la shell la intepreta bien! Ahora para no hacer tan complicado para los usuarios nuevos como yo, esto del shell scripting, explicaremos asi los 4 caracteres de opcion que les habia comentado mas arriba (+-?=)... ${parametro:-cadena} : si la variable relacionada(parametro) tiene un valor y no esta vacia (nula) entonces se usa el valor que ya contiene, pero si no es asi entonces se sustituye el valor por la cadena.

${parametro:+cadena} : esta es todo lo opuesto a la opcion -. Lo que vendria siendo de la siguiente manera, si la variable relacionada (parametro) tiene un valor y no esta vacia (nula) entonces el valor se cambia, pero si no es asi el valor de la cadena queda inalterado. ${parametro:=cadena} : Esto significa que si la variable esta vacia (nula) entonces su valor cambia al de la cadena. Pero si no es asi y no esta vacia su valor, es decir, el de la cadena no cambia. ${parametro:?cadena} : significa que si la variable relacionada que en este caso es el parametro, tiene asignado un valor y no esta vacia, entonces su valor se sustituye. Pero si la variable esta vacia se imprime la palabra es decir la cadena y se sale del guion actual. Si se omite la cadena y se muestra el mensaje prefijado parameter null or not set. Depuracion La depuracio de un archivo .sh creado en bash, primeramente depuracion significa ver si tiene errores, es decir, bugs, mas claramente ver si tiene errores para corregirlos para que pueda funcionar correctamente como queremos que funcionen todos los scripts que creamos nosotros mismos. Cuando se est escribiendo un script, puede convenir invocarlo de forma especial para generar informacin de comandos ejecutados y errores, para ayudar en la depuracin. Las salidas se imprimen en el error estndar, por lo que pueden direccionarse a un archivo sin mezclarse con la salida del comando. bash -x ecopars.sh imprime cada comando en la salida; bash -v ecopars.sh invoca el script obteniendo una salida verbosa con informacin sobre cada comando ejecutado. bash -xv ecopars.sh 2>ecopars.err rene las dos fuentes de informacin y direcciona el error estndar a un archivo.

Este archivo fue creado por Arthusu (Jesus Arturo) Basandose en muchos manuales especialmente en uno llamado Programacion en BASH Shell escrito por Edwin Plauchu, espero que lo busquen y lo bajen se los recomiendo mucho recuerden que esto es solo para empezar y ustedes pueden ir giandose para buscar mucha mas informacin en internet que existe mucha. Paginas para las que fue creada y les dedico mis mas sinceros agradecimientos: Mi BLOG: www.sectorwarez.blogspot.com

Y 1 Foros donde Modero: Dhackers: www.foro.dhackers.com

Espero que les haya sido de mucho agrado este manual que construi con mucho esfuerzo para todos ustedes los iniciados en linux como yo. Este obra est bajo una licencia Creative Commons Atribucin 2.5 Mxico.

Você também pode gostar