Edición y programación en Shell El editor Vi El editor visual vi permite modificar el contenido de las líneas que componen un texto en Linux.
Con la tecla <ESC> se pasa del modo de entrada al modo de orden. Para pasar del modo de orden al de entrada. Orden a
Modo de entrada A
Cuando el editor se encuentra en modo de entrada, los caracteres que se introducen como texto se ubican en un sector de la memoria RAM llamado Buffer. Para editar un archivo:
I O
o
vi archivo
Descripción Añadir texto después de la posición del cursor Añade al final de la línea actual Inserta al comienzo de la línea actual Abre una línea por encima de la línea actual Abre una línea por debajo de la línea actual
Se abre el archivo con el contenido Si el archivo no existe vi lo crea, y el cursos se ubica en la primera línea listo para escribir. vi + archivo Para posicionar el cursor sobre la última línea del archivo que se abre vi +#línea archivo posiciona el cursor en una línea determinada
Ordenes sobre archivos Después de ejecutar la orden <ESC>, se puede Orden :w :x :q!
Descripción Guardar y seguir Guardar y salir Abandonar el editor
Reemplazar texto Modo de Orden Cuando el editor esta en modo orden, los caracteres que se introducen son ordenes que controlan la pantalla y cambian el contenido del buffer. Las ordenes al editor aparecen en la última línea de la pantalla.
Orden c$
cw
Descripción Permite cambiar hasta el final de la línea Permite cambiar hasta el final de la palabra
Borrar texto Orden dw dh dl d) dd
Buscar texto. Descripción Hasta el final de la palabra actual El carácter a la izquierda El carácter a la derecha Hasta el siguiente <Enter> El párrafo hasta el siguiente <Enter>
y) yy
Descripción Hasta el final de la palabra actual Hasta el siguiente <Enter> Todo el párrafo
P
Para buscar hacia adelante: / cadenabuscar<Enter> Para buscar hacia atrás ?cadenabuscar<Enter>
/ <Enter> hacia adelante ?<Enter> hacia atrás
Buscar y reemplazar :%s/ cadena/ nuevacadena/g reemplaza todas las apariciones de una cadena especificada por una nueva sin confirmación.
Pegar texto Orden p
/ cadenabuscar<Enter>
Para repetir la última búsqueda:
Copiar texto Orden yw
Buscar una cadena en el texto
Descripción A la derecha del cursor A la izquierda del cursor
Nota: para los comandos anteriores si la orden va precedida de un número, este indica el número de veces seguidas que la orden se ejecutara. Cortar Texto Cuando se borra un texto, este es colocado en un buffer llamado clipboard. Este va a contener el texto más recientemente eliminado. Este procedimiento se utiliza para la orden Cortar.
:%s/ cadena/ nuevacadena/gc El editor realiza una confirmación antes de reemplazar :#linea,#linea/ cadena/ nuevacadena/g reemplaza especificando un rango de líneas. <Ctrol><G> Para saber en qué línea nos encontramos
Programación en el Shell Los programas creados para ser ejecutados por el Shell de Linux se llaman Scripts. Estos permiten automatizar tareas rutinarias. Variables del Shell Para listar las variables existentes en Linux se utiliza el comando: echo $ <Tab><Tab>
Obtención de valores. Para ver el valor de una variable se utiliza el comando echo, anteponiendo al nombre de la variable el signo $ echo $HOME /home/trabajos Se puede utilizar el valor de la variable HOME para evitar escribir el nombre de camino completo. mv tarea $HOME/clase mueve el archivo tarea al directorio clase en el directorio de trabajo del usuario.
Algunas variables. HOME, contiene el nombre de camino absoluto del directorio de trabajo. /home/user
Para ver todas las variables actuales del Shell se utiliza el comando set, sin parámetros.
PATH, contiene una lista de nombres de directorios separados por el carácter ( : ) . En esta lista el Shell debe buscar los programas ejecutables.
Definición de variables.
Un ejemplo de PATH personalizado: PATH=/bin:/home/martha/bin:/var/add/bin:.
Esto significa que cuando el usuario martha introduzca una orden, el shell buscara en primer lugar el programa en el directorio /bin, después en el subdirectorio home/martha/bin:/ , luego en var/add/bin: y por ultimo en el directorio actual (.)
Una variable se define escribiendo su nombre seguido por el signo = y su valor. Una variable es local al script, para que pueda ser vista por todo el sistema se antepone export. No debe existir el carácter espacio entre el nombre de la variable y el signo =, ni espacio entre este y el valor de la variable. Variables del usuario:
PS1 y PS2: Definen los signos de las peticiones de orden primaria y secundaria, $ para PS1 y > para PS2.
El usuario puede definir nuevas variables del Shell para su uso. Si por ejemplo se utiliza un directorio frecuentemente, se puede asignar a una variable:
USER: Contiene el login del usuario.
TRABAJO:”/home/martha/clase/sabados”
SHELL: contiene el nombre del programa Shell. Normalmente /bin/bash
Al usar la variable en una línea de comandos: mv archivo $TRABAJO
El comando test también puede ser representado por [ ].
Variables del entorno La colección de variables y valores de un programa se denomina entorno. Incluye las variables HOME, PS1 Y PATH. El entorno se visualiza usando el comando env.
Principios de programación
Comando test utilizado para evaluaciones numéricas -lt Menor que -le Menor o igual que -gt Mayor que -ge Mayor o igual que -eq Igual a -ne No igual a Decisiones Múltiples: CASE
Lectura de datos case $USER in Para solicitarle al usuario un dato se emplea la instrucción read. read –p “ingrese un numero:” numero Se muestra el mensaje que está entre comillas para que el usuario ingrese un número, y la información es almacenada en la variable número. Instrucciones condicionales: Decisiones
root) echo “el administrador”;; martha) echo “martha Lucia”;; *) echo “usuario desconocido”;; esac Estructuras de repetición: Ciclos Permiten ejecutar múltiples veces una sola instrucción.
If – then – else- fi , permite ejecutar un conjunto de instrucciones solamente si se cumple una determinada condición.
Ciclo For
If test “clave” = “12345”; then
do
For i in „ls‟;
echo $i; echo “Acceso permitido”; done else en el ejemplo i tomara cada valor enviado por el comando ls.
echo “acceso no permitido”; fi
Ciclo while La instrucción comparaciones.
test
permite
crear
El bloque de instrucciones encerradas entre las instrucciones do – done, se
ejecutaran hasta que la condición del while deje de ser verdadera. email=”” while test –z “$email”
echo “la suma es $suma”
El orden expr, evalúa los argumentos y escribe el resultado en la salida. read –p “ingrese el nombre : ” nombre
do read –p “ingrese el email:” email
l= „expr length $nombre‟
done
echo “la longitud de su nombre es $l”
La instrucción test – z indica que esta debe retornar verdadero si la variable es vacía.
Operadores aritméticos
La condición será verdadera si la variable email contiene la cadena vacía. No se permite que el usuario omita esta entrada de datos. Ciclo until La condición se ejecuta hasta que deje de ser falsa. email=”” until test –n “$email” do
+ Suma arg2 a arg1 - Resta arg2 a arg1 * Multiplica los argumentos / Divide arg1 entre arg2 (división entera) % Resto de la división entera entre arg1 y arg2
Los símbolos *, ( y ) tienen un significado especial para el shell y deben ser precedidos por el símbolo backslash ( \ ) o entre comillas simples
Operadores relacionales read –p “ingrese el email:” email
done La instrucción test – n indica que esta debe retornar verdadero si la variable no es vacía. Evaluación de expresiones. read –p “Ingresa el numero A: ” A read –p “Ingresa el numero B: ” B suma = „expr $A + $B‟
= Compara si los argumentos son iguales != Compara si los argumentos son distintos > Compara si arg1 mayor que arg2 >= Compara si arg1 mayor o igual que arg2 < Compara si arg1 menor que arg2 <= Compara si arg1 menor o igual que arg2
Los símbolos > y < tienen significado especial para el shell, por lo que deben estar entre comillas simples
Construcción de Scripts
#script que determina si dos variables leídas desde teclado son iguales o no
Crear un archivo de texto con un editor
echo “¿Son iguales las variables?” echo –n “Introduce la primera variable: “ read var1 echo –n “Introduce la segunda variable: “ read var2 resultado=´expr $var1 = $var2´ echo Resultado=$resultado
Guardarlo con extensión .sh, así nombrearchivo.sh, en una ubicación conocida. Asignar permisos de ejecución al archivo creado, utilizando la orden chmod.
Devolverá 0 si las dos variables introducidas son distintas y 1 si son iguales.
La primera línea de cada script debe contener: #!/bin/bash
Ejemplo3. Montar y desmontar el CDROM
Una línea de comentarios debe comenzar con el carácter #
#Este script monta automáticamente o desmonta el CD, y lo expulsa.
Para ejecutar un script:
If ( ! mount /dev/cdrom > /dev/null 2>/dev/null) Then
./nombrescript param1 param2 … Al utilizar comandos como instrucción se utilizan comillas simples, para utilizar la salida de estos en el código.
Umount /dev/derom Eject /dev/cdromfi fi Ejemplo4. Listar archivos.
Ejemplo1: #!/bin/bash #script que multiplica dos números leídos desde teclado #La opción –n se emplea para evitar el retorno de carro echo “Multiplicación de dos números:” echo –n “Introduce el primer número:” read num1 echo –n “Introduce el primer número:“ read num2 resultado=´expr $num1 \* $num2´ echo El resultado de la multiplicación es =$resultado Ejemplo2: #!/bin/bash #El script se llama ejemplo2
#!/bin/bash While test –z “$salir” do clear echo “1. Listado de formato simplificado” echo “2. Listado de formato completo” echo “3. Listado de formato con marcas” echo “4. salir” echo read –p “Digite su opción: “ orden clear case $orden in 1) #listado de formato simplificado ls echo echo “La orden fue (ls), presione <Enter>” readd;; 2) #listado de formato completo Ls -l
echo echo “La orden fue (ls -l), presione <Enter>” read;; 3) #listado de formato completo Ls -F echo echo “La orden fue (ls -F), presione <Enter>” read;; 4) #salir salir=”si” esac done
Ejemplo5.
Ejemplo 5.Envia un mensaje si hay 1 o mas usuarios conectados #!/bin/bash cuantos=´who | wc –l´ If[\$cuantos –gt 1]; then echo “hay más de un usuario conectado” else echo “solo se encuentra usted conectado” fi
Bibliografía. Richard Petersen, Manual de referencia, Linux. Osborne, McGraw-Hill. 1a edición en español, 2001. Carlos Eduardo Gómez Montoya, Julián Esteban Gutiérrez Posada. Linux: comandos y conceptos. 2000