Вы находитесь на странице: 1из 9

SCRIPT LINUX alff21 el Dom Ago 10, 2008 7:13 pm QU ES UN SCRIPT DE LINUX? Equivale a un archivo *.

BAT de MSDOS, con la diferencias siguientes: No tiene que terminar con la extensin .bat. De hecho, no tiene porqu tener extensin . Tiene que tener permisos de ejecucin (ver chmod ). Puede ser mucho ms complejo. En su forma ms simple, un archivo de texto, con una lista de comandos, que se eje cutan en ese orden de forma automtica, del mismo modo que si los escribes uno a u no en una consola de texto o una terminal, lo que en ciertas tareas repetitivas es bastante cansino, salvo que usemos un script. ejemplos GUIONES SHELL 1.- Ejemplo. Crea un fichero que reciba un argumento que sea otro fichero, si el fichero tien e permiso de lectura que lo indique, y controlando el paso de argumemto. if [ then echo exit fi if [ then echo else echo -z $1] "Introduzca un fchero" -d $1 ] "Es un directorio" "Es un fichero"

2.- Ejemplo. Crea un fichero de procesos por lotes que reciba un argumento,el argumento sera el n del mes y dependiendo del valor del mismo se indica el mes del que se trata. echo "Escribe el numero que se corresponda a un mes" case $1 in 01) echo Enero;; 02) echo Febrero;; 03) echo Marzo;; 04) echo Abril;; 05) echo Mayo;; 06) echo Junio;; 07) echo Julio;; 08) echo Agosto;; 09) echo septiembre;; 10) echo Octubre;; 11) echo Noviembre;; 12) echo Diciembre;;

*) echo Mes invalido;; esac 3.-Ejemplo. Vamos a crear un pequeo menu para localizar la posocion del usuario. echo "ELIGA UN OPCIN" echo "1 Posicin actual del usuario" echo "2 Nombre del usuario actual" echo read selecion case $selecion in 1)pwd;; 2)whoami;; *)echo selecione una opcion valida;; esac 4.-Ejemplo. Vamos a realizar un programa SHELL que reciba desde la lnea de comando tres palab ra y se encarge de mostrarla por pantalla y ordenarlas alfaveticamente. ij [ $# -ne 3 ] then echo "Debe especificar tres parametros" fi echo $1 >lista echo $2 >>lista echo $3 >>lista sort lista rm lista 5.-Ejemplo. Repetir el ejercicio anterior pero leyendo las tres palabras de forma interastiv a. echo read read read echo echo read echo echo echo sort "Introduzca tres parametros" A B C Gracias "Las palabras ordenadas son:" K $A>lista $B>>lista $C>>lista lista

6.- Ejemplo. Vamos a realizar un SCRIPT que utilice un men con 4 opciones, controlando el paso de argumento: -Primero buscar un archivo.

-Segundo los permisos de archivo. -Tercero buscar una cadena de caracteres de un archivo. -Cuarto acceder a la ayuda de un comando. echo echo echo echo echo echo echo SELECCIONE UNA OPCION 1 Buscar un archivo 2 Cambiar los permisos de archivo 3 Buscar una cadena de caracteres de un archivo 4 Acceder a la ayuda de un comando 5 Salir

echo echo opcion read opcion case $opcion 1)clear; echo introdusca el nombre del archivo a buscar:;actual=`pwd`; read arch ivo ;echo introduzca la ruta de busqueda; read; cd $ruta; find $archivo; cd $act ual;; 2)clear;echo introduzca el nombre del archivo a modificar los permisos:; read ar chivo1; ls la $archivo1; echo seleccione los permisos que desea establecer:; read permisos; chmod $permisos $archivos1; ls la $archivo1;; 3)clear; echo introduzca la cadena de valores a buscar; read cadena; echo introd uzca el archivo en el cual se va a buscar la cadena read archivo2; grep $cadena $archivo2;; 4)clear; echo introduzca el nombre del comando que desee ver la ayuda:; read com ando; man $comando;; 5)exit;; *)echo seleccione una opcion valida de la lista;; esac echo Desea realizar otra opcion? Si No read otra case $otra in Si)./nombre_del_fichero_de_script;; No) clear;; esac 7.- Ejemplo. Crear un programa que muestre por pantalla los n del 0 al 10 y sus cuadrados. Clear a=1 while [ $a lt 11] do echo La raz cuadrada de

$a es

resultado=`exp $a * $a` echo Resultado = $resultado let a=$a+1 done 8.- Ejemplo. Calcular la media de tres nmeros introducidos desde el teclado. clear echo Introduzca 3 nmeros para calcular la media read a read b read c d=3 resulatado=`expr $a + $b + $c / $d echo resultado es $resultado 9.- Ejemplo. Crear un SCRIPT que acepte un numero de parmetros que sern directorios, para cada parmetro se preguntara si existe y en su caso se visualizara, en caso contrario a parecer un mensaje diciendo que ese parmetro no existe. echo Introduzca un directorio read a while [ $a !=exist] do if [ -d $a] then echo dirs correctos>correctos echo $a>>correcto echo El directorio es correcto else echo dirs incorrectos>incorrectos else echo $a>>incorrecto echo El directorio no existe fi echo Introduzca otro directorio read a done

10.- Ejemplo. Vamos a crear un Script que dado un numero muestre la tabla de multiplicar. La v amos hacer de dos formas con FOR y WHILE. FOR echo "Escriba un numero" read a echo echo "La tabla de multiplicar de dicho numero es:" echo for b in 1 2 3 4 5 6 7 8 9 10

do resultado=`expr $a "*" $b` echo "$a X $b=" $resultado done WHILE echo "Esta aplicacion es la tabla de multiplicar" echo echo "Introduzca el numero deseado que quiera ver la tabla" read multiplicando echo comienzo=0 fin=10 while [ $conienzo -le $fin ] do echo $multiplicando "X" $comienzo "=" `expr $multiplicando "*" $comienzo` let comienzo=comienzo+1 done echo 11.- Ejemplo. Crear un guion shell que indique si la hora del sistema es am o pm. clear echo "La fecha del sistema es el siguiente:" date hora=`date +%H` am=11 if [ $hora -la $am ] then echo "Es antes del mediodia .am" else echo "Es despues del mediodia .pm" fi Para ejecutar los SCRIPT tenemos que cambiar los permisos de dicho archivo: Ej: chmod 750 nombre_del_archivo ./nombre_del_archivo

FUNCIONES 1. Ejemplo. Buscar un fichero desde la lnea de comando con una funcin. busca ( ) { find /-name "nombre_del_archivo" }

Esta funcion la cargamos en memoria con un punto.

.(nombre_de_la_funcion) Ej: .busca

2.- Ejemplo. Crear un ejercico con funciones que realize la suma y la resta de dos numeros in troducidos, esto lo realizaremos desde un editor de texto. clear echo "Introduce el primer numero:" read num1 echo echo "Introduzca el segundo numero:" read num2 echo suma ( ) { echo `expr $num1 "+" $num2` } resta ( ) { echo `expr $resta1 "-" $num2` } echo "La suma de la variable es:" suma echo sleep 3 echo "La resta de la variable es:" resta Este archivo lo ejecutamos cambiando los permisos. Ej: chmod 750 nombre_del_archivo ./nombre_del_archivo

Cmo se hace un script, paso a paso? o Escribe en un editor de texto (nano, mcedit, vim, nedit, etc.): #! /bin/bash # Las lneas que empiezan por "#" son comentarios # La primera lnea o #! /bin/bash asegura que se interpreta como # un script de bash, aunque se ejecute desde otro shell. echo "Este es el primer comando" echo" "Tras 5 segundos vers un listado del directorio actual" sleep 5s ls --color echo "Fin del ejemplo" o Grbalo con un nombre cualquiera, por ejemplo "miprimerscript" o Ejecuta "chmod +x mimprimerscript"

o Ejecuta "./miprimerscript" (el "./" significa "del directorio actual") Como se puede comprobar, "echo" slo muestra mensajes en pantalla, "sleep" hace un a pausa y "ls" nos muestra una lista de ficheros. Qu se puede hacer, adems de meter eso? o Manejar variables. Se introducen as: VARIABLE=valor; export VARIABLE (en sh) export VARIABLE=valor (en bash). + var1='expr' + var2="string" + Se escriben tras el nombre del script y se asignan consecutivamente a $1, $2, $3, ... Por ejemplo, si ejecuto "nombre-del-script Hola" y dentro exista una ord en "echo $1" el resultado ser ordenador recibe una orden "echo Hola". Hay otras m uchas variables predeterminadas. Importantes a recordar: # $# :num. de argumentos # $? :Valor del ultimo comando # $* :todos los arg de la shell # $$ :PID de la Shell (echo "para matarme, usa kill $$") # $ :opciones pasadas a la shell # $! :PID del ultimo comando & # $HOME # $PATH # $PS1 :prompt de 'espera' # $PS2: prompt de 'continua' # $IFS :Lista de char que separan palabras en los argumentos Las variable de entorno se pueden ver as: echo $<tab><tab> (solo los nombres de las variables env (con los valores asignados) set | less o Ordenes condicionales ( if test $2=$var1 then ... fi) if [ "$1" = "hola" ]; then ordenes elif [ ]; then ordenes else ordenes fi o Menu (case) case variable in a) comandos ;; b*) comandos ;; *) comandos ;; esac o ejecucin en hora programadas at hora fecha comando o Manipulacin de archivos tr A B fichero1 fichero2 (cambia A por B en fichero1, lo salva en fichero 2)

sort fichero1 > fichero2 o echos (muchos). Mejor usar cat: cat <<CADENA_QUE_INDICA_FINAL teto con muchas lneas ... CADENA_QUE_INDICA_FINAL exit num :sale del programa con el valor de status 'num'. o Input de variables read -p mensaje VAR1 read VAR1 --> toma la salida estndar de otro programa o + + + + + o Patrones *,? comodines [ccc] :cualquiera de los caracteres a, b o c. "..." reconoce ... exactamente \c :Reconoce c literalmente a | b ---> a o b bucles FOR

for var1 in 0 1 2 3 4 ; do ordenes done 1. bucles UNTIL until comando do comandos done o funciones [function] nombre() { comandos; } 1. variable de salida Si al final del script ponemos algo como: exit 16 Al ejecutarse corectamente, esa variable la podremos ver con: echo $? Y esto nos asegura que el script se ejecuto hasta esa lnea. scripts de inicio * * * + + Al hacer login ---> .bash_profile (este a su vez puede usar .bashrc) Al abrir una terminal --> slo .bashrc Al iniciar el sistema Poner el script en /etc/init.d/fichero Ejecutar update-rc.d ra fijar prioridades en lso runlevels:

update-rc.d miscript start 20 3 4 5 . stop 20 0 1 6 . Esto le da prioridad 20 en los runlevels 2, 3, y 5, y no se ejecuta en en el 0, 1 y 6

filtro-news Para aadir spammers y trolls al filtro de leafnode: #! /bin/bash sudo -u root echo "^From:.*[< ]$1(>| |$)">>/etc/leafnode/filters mp3towav for i in `ls *.mp3` do mpg123 -v -w $i.wav "$i" done Nota :: las comillas de "$i" son necesarias par evitar errores en en los nombres de los ficheros que contienen espacios. multiple-unzip for i in $(ls *.zip) do unzip $i done Simplifiquemos encadenando las rdenes (necesario si lo hacemos en el prompt. for i in $(ls *.zip); do unzip $i; done Si un nobre del archivo zip tiene espacios, se consideraran archivos distintos, as que mejor usamos: for i in *.zip; do unzip "$i"; done No es necesario usar la orden for para esto, el mismo resultado se obtiene con p erl: perl -ne '`unzip $_`' *.zip Aplicar comando a una lista de ficheros cat fichero | xargs <comando>

Вам также может понравиться