Sistemas Operativos II
MSc. Rafael Vejarano
Contenido
Unidad II. El Shell .............................................................................................................. 2
2.1 Introducción ......................................................................................................... 3
2.1.1 Para qué sirve los scripts Shell ..................................................................... 3
2.1.2 Historia de los Shell ...................................................................................... 4
2.1.3 Conceptos básicos ....................................................................................... 5
Variables .......................................................................................................... 7
Variables de entorno ........................................................................................ 9
Entrecomillado ............................................................................................... 14
Ejecución de Shell .......................................................................................... 15
Parámetros .................................................................................................... 16
Automatización de tareas con Crontab........................................................... 17
Estructuras de control .................................................................................... 20
1
Sistemas Operativos II
MSc. Rafael Vejarano
Unidad II. El Shell
Linux. [Link] (CCO)
Un intérprete de comandos es un programa informático que tiene la capacidad de
traducir las órdenes que introducen los usuarios, mediante un conjunto de
instrucciones facilitadas por él mismo directamente al núcleo y al conjunto de
herramientas que forman el sistema operativo. Estas instrucciones son introducidas
por medio del Shell, el cual consiste en la interfaz de usuario tradicional de los
sistemas operativos basados en Unix y similares, como GNU/Linux.
En esta unidad estudiaremos como programar en la línea de comando de Linux.
2
Sistemas Operativos II
MSc. Rafael Vejarano
2.1 Introducción
El núcleo o kernel es la parte central de un sistema operativo y es el que se encarga
de realizar toda la comunicación segura entre el software y el hardware del
computador. Los programas que usan CLI (Command-line Interface) para
interactuar con el kernel de algún sistema operativo se llaman con frecuencia
Intérprete de comandos o Shell. La línea de comandos es un método para manipular
con instrucciones escritas al programa que subyace debajo. A esta interfaz se le
acostumbra a llamar consola de sistema o consola de comandos. Se interactúa con
la información de la manera más simple posible, sin gráficas ni nada más que el
texto crudo. Las órdenes se escriben como líneas de texto (de ahí el nombre) y si
los programas responden, generalmente lo hacen poniendo información en las
líneas siguientes.
2.1.1 Para qué sirve los scripts Shell
El intérprete de comandos o Shell es un programa que permite a los usuarios
interactuar con el sistema, procesando las órdenes que se le indican.
Los comandos invocables desde el Shell pueden clasificarse en internos
(corresponden en realidad a órdenes interpretadas por el propio Shell) y externos
(corresponden a ficheros ejecutables externos al Shell). Además de comandos, los
Shell ofrecen otros elementos para mejorar su funcionalidad, tales como variables,
funciones o estructuras de control.
Además de utilizar el Shell desde la línea de comandos (basada en el prompt como
la indicación del Shell para anunciar que espera una orden del usuario), puede
emplearse para la interpretación de shell-scripts. Un shell-script o "guión de
órdenes" es un fichero de texto que contiene un conjunto de comandos y órdenes
interpretables por el Shell.
3
Sistemas Operativos II
MSc. Rafael Vejarano
2.1.2 Historia de los Shell
Las líneas de comandos se originaron cuando se conectaron teletipos a
computadoras, en los años 50. En términos de acción inmediata y respuesta,
supusieron un avance sobre el uso de tarjetas perforadas.
Con el uso de monitores como interfaces, las CLI comenzaron a evolucionar hacia
interfaces gráficas de usuario (GUI), como las provistas por Microsoft Windows, Mac
OS y el X Window System. El rol como principal interfaz de usuario les fue
definitivamente quitado cuando Microsoft, en respuesta al éxito del lanzamiento del
Macintosh OS de Apple en 1984,
presentó Windows al año
siguiente. Empezaba la era de las
ventanas. Entonces se acuñó el
término Interfaz de Texto (TUI),
para referirse a las interfaces que
no usaban más que el modo texto
para su funcionamiento. Los
programas que usan TUI pueden
tener menús, ventanas y cursores
del ratón, pero todo representado
con texto ASCII. CLI y TUI, no es
Macintosh Apple. [Link] (CCBY)
lo mismo.
Eventualmente las CLI emigraron de las Shell y se transformaron en parte integral
de varias aplicaciones como interfaz alternativa y/o paralela a las GUI. En la
actualidad, las líneas de comando permanecen como un importante (y a veces
único) medio para interactuar con programas.
El shell considerado más antiguo es el Bourne Shell (sh). Fue escrito en los años
70 por Steve Bourne en los laboratorios AT&T. Además de ejecutar comandos,
dispone de funcionalidades de programación.
Durante el mismo periodo, Bill Joy inventa el C-Shell (csh), incompatible con el
Bourne, pero que ofrece funcionalidades suplementarias como el histórico de
comandos, el control de tareas, así como la posibilidad de crear alias de comandos.
4
Sistemas Operativos II
MSc. Rafael Vejarano
Estos tres aspectos se retomarán más tarde en el Korn Shell. El C-shell se usa poco
en el mundo Unix.
En 1983, David Korn retoma el Bourne Shell y lo enriquece. Este nuevo intérprete
tomará el nombre de Korn Shell (ksh). Este último se usará cada vez más hasta el
punto de convertirse en un estándar de hecho. El ksh 88 (versión de 1988) es junto
con el Bourne Again Shell (ver a continuación) el shell más utilizado actualmente.
Ha servido como base para la estandarización del shell (IEEE Posix 1003.2).
En 1993, una nueva versión de Korn Shell ve la luz. Presenta una
retrocompatibilidad con ksh 88, con algunas excepciones. ksh 93 (/usr/bin/ksh93)
está disponible de forme estándar en algunas versiones UNIX recientes: Solaris 11,
AIX 6 y 7.
Figura. 1. Pantalla de la terminar de linux
2.1.3 Conceptos básicos
En su forma más básica, un shell-script puede ser un simple fichero de texto que
contenga uno o varios comandos. Para ayudar a la identificación del contenido a
partir del nombre del archivo, es habitual que los Shell scripts tengan la extensión
".sh", por lo que seguiremos este criterio (pero recuerde que es algo meramente
informativo y opcional).
5
Sistemas Operativos II
MSc. Rafael Vejarano
Por ejemplo, el siguiente fichero sería un shell-script:
[Link] Nombre del archivo
echo "Contenido carpeta personal:"
ls ~/
Para ejecutar un Shell, este debe tener el permiso de ejecución.
Compruébese que el fichero "[Link]" tiene permisos de ejecución
generales (si no los tuviese, para asignárselos bastaría ejecutar "chmod +x
[Link]").
Invoque el script para que sea interpretado, usando por ejemplo el comando:
./[Link]
Además de comandos, los shell-scripts pueden contener otros elementos,
aportados por el shell para mejorar la funcionalidad de los scripts. De forma
resumida, la estructura básica de un shell-script es la siguiente:
script_ejemplo.sh
#!/bin/dash <-- Shebang
# Esto no se interpreta <-- Comentarios (no interpretados)
echo Hola <-- Contenido del script
ps w
echo "Proceso lee el script: $$"
Como contenido del script pueden utilizarse múltiples elementos (comandos,
variables, funciones, estructuras de control, comentarios) que se analizarán en el
siguiente apartado.
El "shebang" permite especificar el intérprete de comandos con el que deseamos
que sea interpretado el resto del script cuando se usa invocación implícita (ver más
6
Sistemas Operativos II
MSc. Rafael Vejarano
adelante). La sintaxis de esta línea es la secuencia #! seguida del ejecutable del
shell deseado, sobre lo que deben realizarse las siguientes advertencias:
Es imprescindible que sea la primera línea del script, ya que, en caso
contrario, sería interpretado como un comentario (comienza con el carácter
#).
Puede haber espacios entre #! y el ejecutable del "shell".
El shebang no es obligatorio (cuando se usa invocación implícita, si no se
indica se intentará usar el mismo tipo de shell desde el que se ha invocado
el script).
Variables
Como en cualquier lenguaje de programación, en el lenguaje Shell se pueden crear
y utilizar variables, que aquí se llaman parámetros. Existen varios tipos de
parámetros:
Si el nombre es un número se denominan parámetros posicionales.
Si el nombre es un carácter especial se denominan parámetros especiales.
El resto se denominan simplemente variables.
El Shell permite realizar las siguientes operaciones básicas con las variables:
VAR=""
Sólo Definición
VAR=
Definición y/o Inicialización/Modificación VAR=valor
$VAR
Expansión (Acceso a Valor)
${VAR}
Eliminación de la variable unset VAR
Sobre ello deben realizarse las siguientes observaciones respecto a:
7
Sistemas Operativos II
MSc. Rafael Vejarano
Definición y uso:
Las variables sólo existen en el proceso Shell en que son definidas (locales
al proceso).
Las variables sólo son accesibles desde el momento de su definición hacia
abajo del script, esto es, siempre deben definirse primero e invocarse
después (no puede usarse una variable que es definida más adelante).
Pueden utilizarse también dentro de funciones (ver más adelante) aunque se
hayan declarado fuera de ellas. En el estándar POSIX todas las variables son
globales, aunque existen variantes (como bash) que permiten la creación de
variables locales a las funciones.
No es necesario definir las variables previamente a su uso, ya que se crean al
asignarles la primera vez un valor. Al definir una variable sin inicialización, su valor
por omisión es la cadena nula, esto es, las siguientes entradas son equivalentes:
VAR=
VAR=""
Con el comando set (sin argumentos) puede ver todas las variables (y funciones)
definidas en el shell actual.
Nombrado: téngase en cuenta que Linux es "case sensitive" (sensible a
mayúsculas y minúsculas) en general, lo que incluye el nombre de las
variables. Así, VAR y var serán tomadas como dos variables independientes.
Para el nombre de una variable puede usarse:
o 1er carácter: una letra o el carácter de subrayado _.
o 2º y posteriores caracteres: una letra, dígito o el carácter de
subrayado.
Inicialización/Modificación del valor de una variable:
8
Sistemas Operativos II
MSc. Rafael Vejarano
o Es importante no incluir ningún espacio ni antes ni después del
signo =. Si se hace, el Shell intentará interpretar el nombre de la
variable como un comando (recuerde que la sintaxis del Shell es
especialmente estricta en lo que a espacios se refiere).
o El valor de una variable siempre es tomado por el Shell como una
cadena de caracteres.
o Si el valor de una variable contiene caracteres especiales, espacios,
u otros elementos que puedan ser malinterpretados por el shell, tendrá
que ir entrecomillado o deberá incluir el carácter de escape donde sea
necesario.
Expansión de una variable: el uso de las llaves {} sólo es necesario si justo
tras el nombre de la variable se desean escribir más caracteres, sin añadir
ningún espacio antes. Se verá más adelante con más detalle.
Ejemplo
script_variables.sh
echo "Variable mal definida, error de orden no encontrada":
VAR = 1
echo "Variables bien definidas:"
VAR=1
VAR1=2
var=3
echo "Variables: $VAR $VAR1 $var"
echo "Variable VAR: $VAR"
echo "Variable VAR1: $VAR1"
echo "Variable VAR seguida de 1 (requiere llaves): ${VAR}1"
echo "Comillas dobles: $VAR"
echo 'Comillas simples: $VAR'
echo "Valor: $VAR-1"
Variables de entorno
9
Sistemas Operativos II
MSc. Rafael Vejarano
Las variables de entorno son una lista de ajustes que guardan varios estados de
una sesión. Cuando se inicia una sesión ya sea en el entorno gráfico o en una
terminal, se leen las variables de entorno. Para poder acceder al contenido de una
variable podemos utilizar el commando echo y el nombre de la variable precedido
de un $:
~$ echo $LANG
es_ES.UTF-8
Este comando nos muestra el idioma en el que se mostrarán los mensajes en
la shell.
Si queremos ver las variables de entorno que estamos usando, tenemos el
comando env . Nos mostrará todas las variables de entorno que hay cargadas en
nuestra sesión.
Podemos configurar las variables de entorno modificando los archivos de
configuración de la shell. En nuestro caso la shell por defecto que usamos es bash,
por lo tanto el fichero de configuración que debemos usar es: $HOME/.bashrc .
~$ nano $HOME/.bashrc
Una de las variables de entorno que se puede configurar es la variable PATH.
Cuando entramos en la shell y ejecutamos un programa la shell ha de saber dónde
encontrar el ejecutable correspondiente a ese comando. Este ejecutable es un
fichero con el mismo nombre que hemos escrito en la shell y que tiene el permiso
de ejecución activado. Por ejemplo, el ejecutable del comando cp es:
~$ ls -l /bin/cp
-rwxr-xr-x 1 root root 109648 2010-09-21 20:32 /bin/cp
10
Sistemas Operativos II
MSc. Rafael Vejarano
En este caso el fichero /bin/cp es un ejecutable que pertenece al usuario root, pero
que todo el mundo puede leer y ejecutar y que se encuentra en el directorio /bin.
Dado que el comando cp es simplemente un fichero ejecutable en bin para utilizarlo
deberíamos escribir su ruta completa:
~$ /bin/cp [Link] [Link]
Aunque podríamos ejecutar el comando de ese modo nunca lo hemos hecho. De
alguna forma la shell ha sabido encontrar el comando cp en el directorio /bin a pesar
de que no se lo hemos dicho.
Cuando intentamos ejecutar un comando lo que la shell hace es buscar el fichero
ejecutable correspondiente en una lista de directorios que se encuentra almacenada
en una variable de entorno denominada PATH . Podemos imprimir esta lista utilizado
el comando echo:
~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/us
r/games
En el ejemplo mostrado al escribir un comando en la shell, ésta lo buscará primero
en el directorio /usr/local/sbin, después en /usr/local/bin y así sucesivamente hasta
que lo encuentre en alguno de los directorios del $PATH. Si el comando no se
encuentra la shell devolverá un error::
~$ hola
No se ha encontrado la orden «hola», quizás quiso decir:
La orden «cola» del paquete «git-cola» (universe)
hola: orden no encontrada
Cuando intentemos ejecutar programas creados por nosotros mismos o
descargados desde algún lugar deberemos tener este detalle en cuenta. Por
11
Sistemas Operativos II
MSc. Rafael Vejarano
ejemplo, si descargamos un ejecutable llamado hola_mundo y después intentamos
ejecutarlo, la shell no lo encontrará:
~$ ls
hola_mundo
~$ hola_mundo
No se ha encontrado la orden «hola», quizás quiso decir:
La orden «cola» del paquete «git-cola» (universe)
hola_mundo: orden no encontrada
La shell no lo encuentra porque el directorio de trabajo (“.”) no está incluido en el
PATH. Podríamos ejecutar el comando si le indicamos a la shell la ruta en la que se
encuentra el comando:
~$ /home/usuario/hola_mundo
Hola mundo!
También podríamos utilizar una ruta relativa:
~$ ./hola_mundo
Hola mundo!
O podemos añadir el directorio donde se encuentra el ejecutable en el PATH. Si por
ejemplo instalamos un programa en nuestro home en el directorio programa,
podemos añadir este directorio al path y ejecutar el programa simplemente
ejecutandolo con su nombre.
programa: /home/user/dibujacirculos/bin/draw_circle
añadimos al path:/home/user/dibujacirculos/bin
12
Sistemas Operativos II
MSc. Rafael Vejarano
nuevo PATH: PATH=/home/user/dibujacirculos/bin:$PATH
Para que la shell cargue la variable de entorno, podemos utilizar el
comando source que actualizará las variables de entorno con los valores que
hayamos puesto en el fichero que carguemos, en este caso .bashrc .
~$ source $HOME/.bashrc
Se puede dar el caso que tengamos el mismo programa instalado por dos metodos
distintos. Ambos programs tienen un ejecutable que se llama igual. ¿Cómo
podemos saber cuál de los ejecutables se está ejecutando? En linux tenemos el
comando which que nos revolvera la ruta completa. La shell va recorriendo los
directorios del path en orden hasta que en alguno encuentra el
ejecutable. which devuelve el path completo del ejecutable que la shell usa.
~$ which cp
/bin/cp
Otra variable de entorno que se usa mucho es la variable HOME. Hace referencia
a la carpeta personal de usuario. Para el usuario user la carpeta es: /home/user
~$ echo $HOME
/home/user
Podemos cambiar el valor de una variable de entorno. Los cambios que hagamos
solo se verán en la terminal en la que estemos. Si queremos que la variable la
“hereden” las aplicaciones que lanzamos desde esa shell tenemos que hacer la
variable disponible, para ello podemos usar el comando export :
export PATH=/binarios:$PATH
13
Sistemas Operativos II
MSc. Rafael Vejarano
Por ello en el fichero .bashrc las variables las tenemos que definir con export
delante.
Entrecomillado
El Shell tiene una lista de caracteres que trata de manera especial (operadores) y
una serie de palabras reservadas (palabras que tienen un significado especial para
el Shell).
Cuando queremos utilizar un carácter especial del Shell o una palabra reservada
del lenguaje sin que sea interpretada como tal o prevenir una expansión o
sustitución indeseada (las expansiones y sustituciones se verán en un apartado
posterior) es necesario indicárselo al Shell mediante las comillas (simples o dobles)
o el carácter de escape. Por ejemplo, para escribir el nombre de un fichero que
contenga espacios, para pasar el símbolo < como argumento a un programa.
El carácter de escape \: indica que el siguiente carácter debe preservar su valor
literal. El carácter de escape se elimina de la línea una vez procesado. Si aparece
al final de una línea, significa "continuación de línea" e indica que el comando
continúa en la siguiente línea (puede ser utilizado para dividir líneas muy largas).
El entrecomillado de una cadena vacía ( '' o ") genera una palabra vacía (palabra
que no tiene ningún carácter).
2.1.3..1 Simple
Comillas simples ' ' : todo texto ‘entrecomillado’ con comillas simples mantendrá su
valor literal, no se producirá ninguna expansión ni sustitución y será considerado
como una única palabra.
14
Sistemas Operativos II
MSc. Rafael Vejarano
2.1.3..2 Doble
Comillas dobles ": es equivalente a usar comillas simples, salvo que en este caso sí
se hacen expansiones y sustituciones (todas menos las expansiones de tilde y ruta
y la sustitución de alias que veremos más adelante).
Ejecución de Shell
Un script en shell es un archivo de texto que contiene los comandos Unix internos
o externos, así como palabras clave del Shell.
No hay ningún convenio establecido para el nombre de scripts de Shell. El nombre
de un archivo script de Shell puede tener extensión, pero no es obligatorio. Sin
embargo, generalmente se usa la extensión ".sh" (incluso si el script no se interpreta
con el ejecutable llamado "sh").
Ejemplo: A continuación, se muestra el script [Link]:
pwd
cd /tmp
pwd
ls
Ejecución del script:
$ ksh [Link]
/home/redes
/tmp
f1 f2 f3
$
Los comandos se ejecutan secuencialmente.
15
Sistemas Operativos II
MSc. Rafael Vejarano
Parámetros
Son parámetros identificados por un carácter especial creados por el Shell y cuyo
valor no puede ser modificado directamente. En esta tabla se muestran los
parámetros especiales definidos en el estándar:
Parámetro
Valor
especial
Se expande a todos los parámetros posicionales desde el 1. Si se usa dentro
de comillas dobles, se expande como una única palabra formada por los
$* parámetros posicionales separados por el primer carácter de la
variable IFS (si la variable IFS no está definida, se usa el espacio como
separador y si está definida a la cadena nula, los campos se concatenan).
Se expande a todos los parámetros posicionales desde el 1, como campos
$@
separados, incluso aunque se use dentro de comillas dobles.
$0 Nombre del Shell o shell-script que se está ejecutando.
Opciones actuales del Shell (modificables con el comando set). Consulte las
$- (guion)
opciones disponibles con el comando man dash .
$# Nº de argumentos pasados al script (no incluye el nombre del script).
Valor devuelto por el último comando, script, función o sentencia de control
invocado. Recuerde que, en general, cualquier comando devuelve un valor.
$?
Usualmente, cuando un comando encuentra un error devuelve un valor
distinto de cero.
$$ PID del proceso shell que está interpretando el script.
$! PID del último proceso puesto en segundo plano.
Mire el contenido del script script_var-[Link], que deberá contener lo siguiente:
Ejemplo:
#!/bin/sh
echo \$@=$@
echo \$*=$*
echo \$0=$0
echo \$1=$1
echo \$2=$2
echo Cambio parámetros posicionales
set uno dos tres
echo \$1=$1
echo \$2=$2
16
Sistemas Operativos II
MSc. Rafael Vejarano
echo Desplazo
shift
echo \$1=$1
echo \$2=$2
echo \$-=$-
echo \$#=$#
echo \$?=$?
firefox &
ps w
echo \$$=$$
echo \$!=$!
Automatización de tareas con Crontab
El comando crontab se utiliza en sistemas UNIX para programar la ejecución de
otros comandos, es decir, para automatizar tareas. Podemos ver los crontabs que
se están programados y también editarlos, lógicamente.
Para verlos, utilizamos este comando:
sudo crontab -l
Para editarlos:
sudo crontab -e
Formato de las Tareas
Las tareas cron siguen una determinada sintaxis. Tienen 5 asteriscos seguidos del
comando a ejecutar. Ahora explicaré para qué sirve cada cosa.
* * * * * /bin/ejecutar/[Link]
Los 5 asteriscos
17
Sistemas Operativos II
MSc. Rafael Vejarano
De izquierda a derecha, los asteriscos representan:
Minutos: de 0 a 59.
Horas: de 0 a 23.
Día del mes: de 1 a 31.
Mes: de 1 a 12.
Día de la semana: de 0 a 6, siendo 0 el domingo.
Si se deja un asterisco, quiere decir "cada" minuto, hora, día de mes, mes o día de
la semana.
Por ejemplo:
* * * * * /bin/ejecutar/[Link]
Ejecuta este script:
Cada minuto
De cada hora
De cada día del mes
De cada mes
De cada día de la semana
Otro ejemplo:
30 2 * * 1 /bin/ejecutar/[Link]
18
Sistemas Operativos II
MSc. Rafael Vejarano
Ejecutar este script:
En el minuto 30
De las 2 de la noche
De cada día del mes
De cada mes
Sólo si es viernes
En resumen, todos los viernes a las 2:30 horas se ejecutará el script.
Intervalos de tiempo
Ejecutar un script de lunes a viernes a las 2:30 horas:
30 2 * * 1-5 /bin/ejecutar/[Link]
Ejecutar un script de lunes a viernes cada 10 minutos desde las 2:00 horas durante
una hora:
0,10,20,30,40,50 2 * * 1-5 /bin/ejecutar/[Link]
Esto quizá puede ser largo. La sintaxis de crontab permite lo siguiente. Imaginemos
que queremos ejecutarlo cada 5 minutos:
*/5 2 * * 1-5 /bin/ejecutar/[Link]
Palabras Reservadas
Muchas veces tenemos palabras reservadas para facilitar el uso de programas o
lenguajes de programación. Cron no podía ser menos, así que tenemos algunas
19
Sistemas Operativos II
MSc. Rafael Vejarano
que suelen ser las más comunes. Ya cada uno que lo configure conforme a sus
necesidades. Aquí van:
@reboot: se ejecuta una única vez al inicio.
@yearly/@annually: ejecutar cada año.
@monthly: ejecutar una vez al mes.
@weekly: una vez a la semana.
@daily/@midnight: una vez al día.
@hourly: cada hora.
Por ejemplo, para ejecutar el script cada hora:
@hourly /bin/ejecutar/[Link]
Estructuras de control
El uso de las estructuras básicas de control nos permite indicarle al programa que
acción tomar con base en diferentes variables o condiciones que se presenten
durante la ejecución del mismo.
Las principales estructuras básicas de control son:
if ... then ... else
case
while
20
Sistemas Operativos II
MSc. Rafael Vejarano
for
unti
Sencilla (con y sin else)
Esta sentencia nos sirve para definir que si se cumple cierta condición ejecute un
comando (o serie de comandos) y si no se cumple la condición que ejecute otro
conjunto de comandos (o nada). La sintaxis más básica de esta instrucción es de la
siguiente manera:
ifcondición ; then comandos ; fi
o en diferentes líneas:
if condición
then
comandos
fi
Cuando sea una sola condición y un sólo comando es recomendable utilizar la
primera sintaxis y para instrucciones de más de un comando se entiende mejor en
la opción de diferentes líneas.
Otras sintaxis para la sentencia if con más opciones son:
if condición
then
comandos1
else
comandos2
fi
Con esta sintaxis, lo que logramos es revisar una condición y en caso de que se
cumpla ejecutará la serie de comandos1 y si no se cumple ejecutará la serie de
comandos2. Si requerimos más opciones podemos utilizar:
21
Sistemas Operativos II
MSc. Rafael Vejarano
if condición1
then
comandos1
elif condición2
then
comandos2
...
fi
En esta forma de sintaxis, como podrás ver cambia la palabra else
por elif (abreviación de else if), lo cual nos permite evaluar una segunda condición
si no se cumple la primera y así sucesivamente podemos evaluar tantas condiciones
como queramos.
Ejemplo:
#!/bin/bash
#
# Comparación de valores numéricos
#
let NUM1=1
let NUM2=2
let NUM3=3
if [ $NUM1 -ne $NUM2 ] && [ $NUM1 -ne $NUM3 ]; then
echo "\$NUM1 es diferente a \$NUM2 y \$NUM3"
fi
if [ $NUM1 -lt $NUM3 ]; then
echo "\$NUM1 es menor que \$NUM3"
fi
22
Sistemas Operativos II
MSc. Rafael Vejarano
Case
Esta instrucción nos permite evaluar una variable entre sus posibles valores para
ejecutar comandos de acuerdo al valor de la variable. La sintaxis es de la siguiente
forma:
case variable in
patron1)
comandos1;;
patron2|patron3)
comandos2;;
...
esac
Podemos utilizar también el carácter | como cláusula ó, es decir que si la variable
tiene un valor o el otro realice la acción.
23