SISTEMA OPERATIVO
LINUX
PROGRAMACIÓN DE SHElL
script
Por: Ing. Edwin Calle Terrazas
Versión 1.1
EL SHELL
Al entrar en un Linux en modo consola estamos usando un shell o
interprete de comandos. Un shell no es más que un programa que le
facilita al usuario interactuar con el sistema operativo: administrar el
sistema, programar, crear todo tipo de contenidos de texto, etc.
Para hacer todo eso el usuario debe utilizar una serie de comandos que
le permiten manipular ficheros, directorios, procesos, etc.
En los sistemas Windows el shell es un entorno visual intuitivo y fácil de
utilizar, aunque también tiene otro shell disponible, una herencia del
sistema MS-DOS que no ha evolucionado mucho. En Linux disponemos
de multitud de entornos visuales para elegir, pero la gran diferencia
respecto a Windows es que en Linux el entorno gráfico no es más que
un programa más; es algo opcional que podemos lanzar desde un shell
o intérprete de comandos. La otra diferencia importante es que el shell
de linux es una herramienta muy poderosa.
Ing. Edwin Calle Terrazas 2
EL PROMPT DEL SHELL
Es el indicador $ (o prompt), en algunos sistemas este indicador incluye
tu nombre de usuario, el nombre de la maquina y el directorio en el que
te encuentras)
Mientras que el prompt esta desplegado, tu puedes introducir
comandos. El shell lee la entrada despues de presionar la tecla enter.
LOS DIFERENTES TIPOS DE SHELL
Desde la creación del sistema Unix original han existido diferentes tipos
de shells con diferentes características. Veamos los más usados:
Bourne Shell (sh)
El shell original de Unix fue creado a mediados de los 70's por Stephen
R. Bourne, fue el primer shell que apareció en los sistemas Unix.
El Bourne shell se encuentra normalmente en el directorio bin y su
nombre de archivo es sh (/bin/sh). En adición a ser un interprete de
comandos el Bourne shell es un lenguaje de programación con una
estructura similar a el antiguo lenguaje de programacion ALGOL.
Ing. Edwin Calle Terrazas 3
Bourne Again Shell (bash)
El Bourne Again Shell ó bash, fue desarollado como parte del proyecto
GNU y ha reemplazado a el Bourne shell sh, en los sistemas basados
en GNU, tal como Linux.
Prácticamente todas las distribuciones de Linux utilizan bash como su
reemplazo de sh.
Incluye caracteristicas de C shell, Korn Shell y logicamente Bourne
shell. Bash fue escrito inicialmente por Brian Fox y es actualmente
mantenido por Chester Ramey.
Debido a que bash es totalmente compatible con el Bourne shell, la
mayoría de las distribuciones de Linux reemplazan el Bourne shell con
bash (/bin/bash y /bin/sh), son el mismo archivo.
En la primera línea de un programa debemos indicar que shell vamos
a utilizar para interpretar los comandos del programa.
4
Un script de shell no es más que un fichero de texto que contiene una
serie de comandos del sistema linux. Además de los comandos que
forman parte del shell con los que podemos crear estructuras que
facilitan la programación de scripts complejos.
Para crear un programa en el shell, usamos en este caso el editor vi
para crear el archivo.
vi prog1
Luego escribimos y guardamos el programa
como si fuera un archivo de texto.
Para ejecutarlo utilizamos el comando sh seguido del nombre del
programa.
sh prog1
5
VARIABLES
En el shell se pueden definir variables y por tanto dentro de los scripts
también. Aquí no hay declaración de tipos, pero sí que podemos definir
variables que contienen números, cadenas, booleanos e incluso arrays.
Para declarar una variable basta con hacer:
nombre_var=valor
La podemos exportar para que se convierta en una variable global.
export nombre_var
A partir de que se crea la variable ya podemos acceder o mostrar su
valor a través de su nombre con el símbolo del dólar por delante.
echo $nombre_var
6
OPERADORES
- menos == Igual
+ mas != distinto
* multiplicación && and
/ división || or
% modulo ! not
** exponente
variable++ incremento
variable-- decremento
COMPARACIONES PARA NUMEROS ENTERO
-gt greater than (mayor que)
-ge greater equal (mayor igual)
-lt less than (menor que)
-le less equal (menor igual)
-eq equal (igual)
-ne not equal (distinto)
Ing. Edwin Calle Terrazas 7
COMPARACIONES DE CADENAS
= Es igual a
== Es igual a
!= Es distinto a
< Es menor a
> Es mayor a
Ejemplo:
[ “$s1” = “$s2” ]
8
EXPRESIONES ARITMÉTICAS
Los valores de todas las variables de la shell de Bash se
almacenan en forma de cadenas de caracteres. Los datos enteros
también se almacenan en forma de cadenas de caracteres. Para
poder realizar operaciones aritméticas y lógicas con ellos, es
preciso traducirlos a enteros y volver a traducir el resultado a una
cadena de caracteres para almacenarla correctamente en una
variable de la shell.
Afortunadamente, en la shell de Bash existen varias maneras de
realizar operaciones aritméticas con datos numéricos:
● Utilizando la expansión del shell $((expresión))
Ejemplo: a=$(($x + $y))
● Utilizando la orden let var=expresión
Ejemplo: let a=$x+$y
9
Otra forma de realizar expresiones matemáticas es a través del
comando: expr, su formato es:
expr $valor \operador $valor2
Si quiero realizar la suma de a + b
`expr $a \+ $b`
Si quiero realizar a – b y el resultado asignar a la variable c
c=`expr $a \- $b`
10
CONDICION IF
En el shell podemos crear las habituales estructuras condicionales de
if ó if-else.
FORMATO DE IF FORMATO DE IF - ELSE
if condición; then if condición; then
operaciones operaciones
fi else
operaciones
ó también: fi
if condición
then
operaciones TAMBIEN TENEMOS IF-ELSEIF - ELSE
fi if condición; then
operaciones
elif condición; then
operaciones
else
operaciones
fi
11
En la condición IF podemos utilizar los operadores relacionales: -gt, -lt, etc
Esta condición debe ir entre corchetes.
Veamos algunos ejemplos:
if [ $x -lt 0 ]; then x es menor que 0
if [ $x -le 0 ]; then x es menor igual que 0
if [ $x -gt $y ]; then x es mayor que y
if [ $x -ge $y ]; then x es mayor igual que y
if [ $x -eq $y ]; then x es igual y
if [ $x -ne $y ]; then x es igual a y (distinto)
12
CASE
También podemos crear programas utilizando el case ó el switch-case
tan típico del lenguaje C.
Tiene el siguiente formato:
case variable in
valor1)
operaciones_si_variable_igual_a_valor1 ;;
valor2)
operaciones_si_variable_igual_a_valor2 ;;
valor3)
operaciones_si_variable_igual_a_valor3 ;;
*)
operaciones_en_cualquier_otro_caso ;;
esac
13
Ing. Edwin Calle Terrazas 14