Publicado el 26 de Noviembre del 2018
1.041 visualizaciones desde el 26 de Noviembre del 2018
18,8 KB
11 paginas
Creado hace 25a (21/04/2000)
SHELL SCRIPTS CON BOURNE SHELL
Gerardo Travesedo
http://personal2.redestb.es/traque
Creación de comandos y programas usando el shell
Creación y ejecución de shell scripts simples
Programación con Bourne Shell
Pasando argumentos al shell
Manejo de variables
Entrecomillados y caracteres especiales
Leer de la entrada standard
Instrucciones condicionales
La instrucci ón if
El operador &&
El operador ||
Comprobaci ón de ficheros y variables con el comando test
Instrucciones de control
La instrucci ón case
La instrucci ón for
Las instrucciones while y until
Las instrucciones break y continue
Mas funciones shell
Aritméticas
Incluir texto en un shell script
Forzar la evaluaci ón de comandos
Ejecutar un comando sin crear un nuevo proceso
Tratar las señales del sistema operativo
Funciones creadas por el programador
Depuraci ón de shell scripts
CREACION DE COMANDOS Y PROGRAMAS USANDO EL SHELL
Ademas de usar el shell para ejecutar comandos, puedes usar su lenguaje de programación para escribir tus
propios comandos o programas. Puedes poner comandos en el fichero (conocido como shell script) y despues
ejecutar el fichero como un comando o programa.
EL Bourne shell (sh) está disponible en todos los sistemas UNIX. Los scripts del Bourne shell tambien
pueden trabajar bajo el Bourne Again Shell (bash). Los shells C y TC usan un lenguaje de programación
similar al lenguaje C.
CREACION Y EJECUCION DE SHELL SCRIPTS SIMPLES
Para crear un shell script simple, debes poner lineas de comando en un fichero, ponle los permisos de acceso
apropiados y despues ejecuta el fichero.
EJEMPLO :
Este es el contenido de un shell script llamado display :
cat display
# Este script displaya la fecha, hora, nombre de
# usuario y directorio actual
echo "Fecha y hora:"
date
echo
echo "Tu usuario es: `whoami` \\n"
echo "Tu directorio actual es: \\c"
pwd
Las primeras dos lineas que comienzan con una almoadilla (#) son comentarios y no son
interpretadas por el shell. Usa comentarios para documentar tu shell script, te sorprenderá saber lo
fácil que es olvidar lo que hacen tus propios programas.
Las backquotes (`) entre el comando whoami ilustran el uso de la sustitucion de comandos.
- sustitución de comandos : para incluir la salida de un comando dentro de una linea de comandos
de otro comando, encierra el comando cuya salida quieres incluir, entre backquotes (`)
- whoami : displaya el usuario actual
\\n es una opción del comando echo que dice al shell que añada un retorno de carro al final de la
linea. \\c dice al shell que permanezca en la misma linea.
(si utilizas el shell bash, para que funcionen estas opciones tienes que poner echo -e )
Antes de usar el fichero como shell script debemos cambiar los permisos de acceso. Para dar
permiso de ejecución al fichero deberemos usar el comando :
chmod u+rwx display
El +rwx despues de la u te permiten leer, escribir y ejecutar el script, nadie mas tendrá permiso para
hacerlo.
Para dar permiso a otros usuarios para leer y ejecutar el shell script usa :
chmod go+rx display
PROGRAMACION CON BOURNE SHELL
El shell tambien te ofrece un entorno de programación con características similares a las de los lenguages de
programación de alto nivel.
PASANDO ARGUMENTOS AL SHELL
Los shell scripts pueden actuar igual que los comandos standard de Unix y tomar argumentos
desde la linea de comandos.
La forma de pasar estos comandos es con los parámetros posicionales $1 hasta $9. Cada
parámetro corresponde a la posición del argumento en la linea de comandos.
El parámetro posicional $0 hace referencia al nombre del comando o nombre del fichero
ejecutable que contiene el shell script.
Solo se pueden pasar nueve argumentos, pero se puede acceder a mas de nueve usando el
comando shift. Cada vez que se ejecuta el comando shift el argumento 1 desaparece, el 2 se
convierte en el uno, y así sucesivamente hasta el 9 que se convierte en el 8 quedando aquel libre.
Se puede hacer referencia a todos los parametros que se estan pasando usando el parámetro
especial $*. Esto es especialmente útil cuando se pasan nombres de ficheros como argumentos,
por ejemplo :
cat printps
# Este script convierte ficheros ASCII a PostScript
# y los envia a la impresora PostScript ps1
# Usa la utilidad local "a2ps"
a2ps $* | lpr -Pps1
printps elm.txt vi.ref msg
Ejemplo de paso de argumentos :
cat first_5args
# Este script lista los cinco primeros argumentos
echo Los cinco primeros argumentos de la linea
echo de comandos son $1 $2 $3 $4 $5
first_5args mines a pint john o.k.
MANEJO DE VARIABLES
Existen algunas variables que se establecen automáticamente con tu login.
Los valores de algunas de estas variables esta guardados en nombres los cuales colectivamente
son llamados 'tu entorno de usuario'.
Cualquier nombre definido en tu entorno de usuario, puede se accedido por un shell script. Para
incluir el valor de una variable shell en tu entorno debes exportarla.
(Si se modifica el valor de una variable, este permanece hasta que efectuas el logout del sistema
o sales del shell en el cual estas trabajando. Para hacer que otros programas que usan la variable
tengan consciencia del cambio debes teclear el comando export variable).
Algunas variables establecidas internamente por el shell y que están disponibles para el usuario:
$1 - $9 parámetros posicionales
$0 nombre del comando actual
$# número de parámetros posicionales
$? exit status del último comando ejecutado
dado como un string decimal. Si todo ha
ido bien se retorna cero.
$$ el numero de proceso de este shell, útil
para incluirlo en nombres de ficheros
para hacerlos únicos.
$! la pid del último comando ejecutado en
background.
$- las opciones actuales suministradas para
esta invocación del shell.
$* un string que contiene todos los
argumentos del shell comenzando por el $1.
$@@ igual que el anterior, excepto cuando va
entrecomillado.
Reglas que goviernan la evaluación de variables shell :
$var significa el valor de la variable
o nada si la variable no está
definida.
${var} igual que el anterior excepto que
las llaves contienen el nombre de
la variable a ser sustituida.
${var-thing} valor de var si var está
definida, si no thing.
${var=thing} valor de var si var está
definida, si no thing y
el valor de var pasa a ser thing
${var?message} Si definida, $var; si no, imprime
el mensaje y terminal el shell.
Si el mensaje esta vacio imprime
un mensaje standard.
${var+thing} thing si $var esta definida, si
no nada.
ENTRECOMILLADOS Y CARACTERES ESPECIALES
Caracteres especiales para terminar palabras :
; & ( ) | ^ < > nueva-linea espacio tab
Para entrecomillar estos usa el backslsh (\) o llaves con comillas.
Comillas simples :
Entre comillas simples todos los caracteres son entrecomillados incluido
el backslash
grep : ${gid}: /etc/group | awk -F: '{print $1}'
Dobles comillas :
Entre dobles comillas se produce sustitución de variable (el signo del
dolar se interpreta) pero no generación de fichero ( * y ? son
entrecomillados)
Comillas contrarias :
Las comillas contrarias significan ejecutar el comando y sustituir por la
salida.
TODAY=`(set \`date\`; echo $1)`
LEER DE LA ENTRADA STANDARD.
Para leer de la entrada standard se utiliza el comando read, por ejemplo :
echo "Por favor introduzca su nombre:"
read nombre
echo "Bienvenido $nombre"
echo "Introduce tu apellido\n"
echo "seguido de tu nombre: \c"
read apellido nombre
echo "Bienvenido a Madrid $nombre $apellido"
Entrada standard : la fuente de información para un comando. Por defecto es el teclado a menos
que se redireccione a un fichero o a otro comando.
Para redireccionar la entrada o salida standard se usa :
cambiar la entrada = < mail gerardo < documento
cambiar la salida = > grep gerardo /etc/passwd > mi_passw
añadir a la salida = >> cat parte2 >> mi_libro
Tambien se pueden utilizar pipes. Unix permite enlazar dos o mas comandos usando un pipe. El
pipe toma la entrada standard de la salida estandard de otro comando. La | (barra vertical) se usa
para representar la conexión de los comandos.
Ejemplos :
who | wc -l
342
Este comando dice cuantos usuarios estan conectados al sistema.
who saca por la salida standard una lista de usuarios conectados al sistema
wc -l cuenta el numero de lineas de la entrada standard y lista el resultado.
ps -aux|grep joe|sort +5 -6|less
El primer comando ps -aux saca informaci
actualmente. Esta informaci ón entra a la entrada del comando grep joe que busca
una linea que contenga el usuario ?joe?. La salida de este comando se clasifica por el
sexto campo de cada linea y esta salida se displaya en el less.
ón sobre los procesos que corren
INSTRUCCIONES CONDICIONALES
Cada comando Unix retorna un valor de salida el cual puede ser consultado. Este valor está
guardado en la variable de solo lectura $?. El valor 0 es bueno, cualquier otro es malo.
La instrucci ón if usa el status del último comando y condicionalmente ejecuta la siguiente
instrucción. La sintáxis general es :
if test
then
comandos
else
comandos
fi
then, else, y fi son palabras reservadas y como tales unicamente serán reconocidas despues de
una nueva linea o ;(punto y coma). Asegurate de que terminas cada if con su fi correspondiente.
El if se
Comentarios de: Shell scripts con Bourne Shell (0)
No hay comentarios