#1 Tuto Linux Capitulo 3/9 (Uso y Configuracion Intermedia)
Módulo III
Uso y Configuración intermedia
En este módulo se estudiará más en detalle el uso de Linux, así como también herramientas que nos permitan administrar Linux.
Editor “vi”
El "vi" es un editor muy poderoso, podrá ser un editor muy poco amigable con el usuario, pero es el único editor que siempre va a estar en cualquier distribución de Linux (así como en cualquier otro Unix). Entendemos que es vital que cualquier persona que esté aprendiendo a manejarse dentro de Linux, debe poder utilizar este editor.
Introducción al "vi"
El editor "vi" tiene dos modos, modo edición y modo comando. Podríamos imaginar al modo comando como el momento en el cual estamos navegando dentro de los menues de cualquier editor tradicional de caracteres. Cualquiera que haya utilizado un editor tradicional de caracteres sabe que mientras se navega por los menues no se puede seguir escribiendo el texto editado. El modo comando del "vi" tiene esa semejanza, mientras estoy en el modo comando, no se puede escribir sobre el texto, sino darle ordenes al editor para que ejecute una u otra función predeterminada.
Las ordenes que se le da al editor en el modo comando son muy específicas y muy puntuales. Como no existe semejante cosa como un menú de funciones en el "vi", se utilizan letras y combinaciones de ellas, para lograr la ejecución de las mismas.
Modo Comando
Cuando invocamos el editor con la línea "vi [nombre de archivo]", entramos en modo comando.
La siguiente es una tabla que detalla algunos de los comandos mas utilizados. Es muy importante que se respeten las mayúsculas y minúsculas ya que significan cosas distintas.
Comandos simples
Comando Descripción
"a" Entra al modo edición, una posición después de la ubicación del cursor (diminutivo de "append").
"A" Entra al modo edición, al final de la línea en la que estamos ubicados.
"i" Entra al modo edición, exactamente en la posición actual del cursor.
"I" Entra al modo edición, al principio de la línea.
"x" Borra el caracter que está debajo del cursor.
"X" Borra el caracter que está detrás del cursor.
"yy" Copia una línea entera en el buffer (un "copy").
"p" Pega lo que tenga en el buffer en el lugar donde estamos ubicados (un "paste").
"dd" Borra el contenido de una línea y lo copia al buffer (un "cut").
Flechas Movimiento dentro del archivo.
"h" Mueve el cursor hacia la izquierda.
"l" Mueve el cursor hacia la derecha.
"k" Mueve el cursor hacia arriba.
"j" Mueve el cursor hacia abajo.
"." Repite la ultima función.
"cw" Nos permite reeditar caracteres hasta que se encuentre un ":", una ",", un "." o un espacio.
"cW" Nos permite reeditar caracteres hasta que se encuentre un espacio (sin importar que caracteres haya hasta el espacio).
"r" Reemplaza el caracter debajo del cursor.
"R" Reemplaza todos los caracteres hasta el final de la línea o finalización del modo "reemplazo".
"ZZ" Grabar el archivo y salir del editor.
"u" Revertir el último comando ejecutado (o edición agregada).
"G" Ir al final del archivo.
"numero <comando>" El número representa cantidad de líneas, el comando puede ser cualquiera de los descriptos que se aplique. Por ejemplo para subir 10 líneas, podemos ejecutar "10k". Otro ejemplo sería, copiar 20 líneas, lo haríamos con "20yy".
"o" Agregar una línea debajo de la que estamos ubicados y cambiar a modo edición.
"O" Agregar una línea arriba de la que estamos ubicados y cambiar a modo edición.
Comandos combinados
Además de los comandos citados en la tabla anterior, existen muchos otros comandos o funciones que se pueden ejecutar desde el "vi" utilizando el comando simple ":". Cuando se teclea este símbolo, el editor nos lleva a la ultima línea de la pantalla donde podremos ejecutar diferentes funciones.
La siguiente es una tabla con las funciones mas utilizadas, todas estas funciones se pueden ejecutar, únicamente, despues de teclear los ":".
Es importante destacar que se pueden combinar estas funciones, por ejemplo, podríamos ejecutar ":wq" y además de grabar el archivo, se saldrá del editor.
Función Descripción
"w [nombre de archivo]" Grabar archivo (si le agregamos el símbolo de admiración "!", se fuerza la grabación).
"q" Salir del editor (si le agregamos el símbolo de admiración "!", se sale del editor sin grabar).
"n [nombre de archivo]" Editar el archivo pasado como argumento, manteniendo el anterior en memoria.
"n #" Volver al archivo anterior.
"r <nombre de archivo>" Insertar el archivo, pasado como argumento, dentro del archivo actual.
"! <comando>" Ejecutar "<comando>" (del shell) y mostrar su salida.
"!! <comando>" Ejecutar "<comando>" (del shell) y insertar la salida del mismo dentro del archivo en edición.
"x" Grabar y salir del editor (sinónimo de ":wq")
Modo Edición
Para ingresar al modo edición se pueden utilizar varios comandos, la mayoría de ellos están descriptos en la tabla de comandos simples (ej.: "a", "i", "A", "I").
Existe una única tecla para salir del modo edición y es la tecla "escape" ("Esc").
Una vez que se ingresó al modo edición, simplemente tenemos que escribir el texto deseado.
Programación en Bash
Shell Scripts (programación en shell)
Introducción
Linux, así como la mayoría de los UNIX, utilizan shell scripts para realizar una infinidad de tareas. Un shell script es un programa que se escribe con una sintaxis particular, para que sea interpretado por un shell (en este caso /bin/bash).
Un shell script es básicamente un programa que llama a otros programas, con la posibilidad de hacer algun tipo de procesamiento propio (como control de flujo, operaciones matemáticas simples, etc.)
Existen muchos shells disponibles para Linux pero habitualmente se utiliza el bash (bourne again shell) para la programación en shell ya que está disponible libremente y es fácil de usar. Por lo tanto todos los scripts que escribamos en este artículo usarán el bash (aunque la mayoría de veces también funcionarán con su hermano mayor, el bourne shell).
Para escribir nuestros programas en shell usaremos cualquier clase de editor de texto, p.ej. Vi, mcedit, joe... como con otros lenguajes de programación.
El programa debe empezar con la siguiente línea (debe ser la primera línea del fichero):
#!/bin/bash
Los caracteres #! indican al sistema que el primer argumento que sigue en la linea es el programa a utilizar para ejecutar este fichero. En este caso usamos el shell /bin/bash.
Cuando hallas escrito y guardado tu script debes hacerlo ejecutable para poder usarlo.
Para hacer el script ejecutable debemos escribir el siguiente comando:
chmod +755 nombre-del-script.
Después puedes ejecutar tu script escribiendo:
./nombre-del-script
Variables
Asignación:
La asignación de variables se realiza simplemente indicando su nombre, un signo =, y el valor, como en el siguiente ejemplo:
nombre="Luis"
Valor:
El valor de una variable se toma anteponiendo un signo $ al nombre, así si queremos imprimir el valor de la variable nombre que creamos antes:
echo $nombre
Entradas/Salidas (I/O)
La entrada salida puede manejarse con los comandos echo y read:
echo $variable
echo -n "Esto no imprime un carácter nueva línea al final"
read ciudad
read ciudad calle nro
Este último ejemplo lee 3 valores desde el teclado, tomando como separador el estándar definido para el shell (usualmente el espacio). Los valores van a las variables que se están leyendo ($ciudad, $calle y $nro).
Si se desea dirigir a pantalla múltiples líneas de texto, puede utilizarse un truquito con el comando cat:
#!/bin/bash
cat << IMPRIMIRHASTAAQUI
Esto es un ejemplo
de un texto realmente largo
que debemos sacar por pantalla
hasta llegar al punto indicado
en el comando cat de arriba
IMPRIMIRHASTAAQUI
?sigue el script?
Variables predefinidas
Variable Descripción
$# Número de argumentos
$* Todos los argumentos del shell
$- Opciones suministradas al shell
$? Valor de retorno del último comando ejecutado
$$ Identificación del PID (número de proceso)
Programación avanzada en shell scripts
Los shell scripts son una herramienta muy utilizada en Linux, por lo tanto, es importante que el asistente logre un buen nivel de conocimiento en esta herramienta.
En este nivel más avanzado se verá nueva sintaxis de shell script, que le permitirá al administrador escribir shell scripts más fáciles de leer y mucho más funcionales.
Argumentos
Los argumentos sirven para pasarle a un programa o una función valores desde la línea de comando.
Variable Significado
$* Todos los argumentos
$# Cant. de argumentos
$0 Nombre del script
$1 Primer argumento
$2 Segundo argumento
$n Argumento 'enésimo'
Ejemplo:
#!/bin/sh
#
# Programa que recibe argumentos y los imprime por pantalla
#
echo "\$*: $*"
echo "\$#: $#"
echo "\$0: $0"
echo "\$1: $1"
echo "\$2: $2"
Notas sobre el ejemplo:
En la líneas de impresión (echo), para imprimir el símbolo "$" (pesos) se tiene que anteponer el símbolo "\" (contra barra), sino el shell lo va a interpretar como una variable, y si esta existe imprimirá su contenido.
Argumentos
Los argumentos que se pasan en el momento de invocar el script se asignan a las variables automáticas $1, $2, $3, etc...
script perro gato loro
$1 vale perro, $2 vale gato, $3 vale loro.
En ocasiones se desea asignar a una variable el valor obtenido mediante la ejecución de otro comando. Esto se logra encerrando el comando entre ' como se ve en el siguiente ejemplo:
horaydia='date'
Otras variables automáticas son $0 que contiene el nombre del script, y $# que contiene la cantidad de argumentos ingresados durante la ejecución del script.
Expresiones
El comando test permite evaluar expresiones devolviendo verdadero o falso como resultado (usualmente se utiliza con el comando if):
test "$nombre" = "Luis"
El ejemplo de arriba chequea igualdad.
Si deseamos chequear desigualdad debemos usar el operador != como en C:
test "$nombre" != "Carlos"
Otros operadores son:
test $variable
Chequea si la variable contiene algún dato, en cuyo caso devuelve verdadero.
test -z $variable
Chequea si la variable no contiene datos (longitud cero), en cuyo caso devuelve verdadero.
test $variable1 -eq $variable2
Chequea igualdad entre variables numéricas enteras, si son iguales devuelve verdadero.
test $variable1 -ge $variable2
Chequea si el primer valor es mayor o igual que el segundo, en cuyo caso devuelve verdadero.
test $variable1 -gt $variable2
Chequea si el primer valor es mayor que el segundo, en cuyo caso devuelve verdadero.
test $variable1 -le $variable2
Chequea si el primer valor es menor o igual que el segundo, en cuyo caso devuelve verdadero.
test $variable1 -lt $variable2
Chequea si el primer valor es menor que el segundo, en cuyo caso devuelve verdadero.
test $variable1 -ne $variable2
Chequea que los dos valores no sean iguales, en cuyo caso devuelve verdadero.
test $archivo1 -nt $archivo2
Chequea las fechas de modificación de dos archivos, devolviendo verdadero si el archivo1 es más nuevo que el archivo2.
test -f $archivo
Chequea si el archivo existe, en caso afirmativo devuelve verdadero.
test -d $archivo
Chequea si el archivo en cuestión es un directorio y si existe, en cuyo caso devuelve verdadero.
test -r $archivo
Chequea si tenemos permiso de lectura sobre el archivo, devolviendo verdadero en caso afirmativo.
test -w $archivo
Chequea si tenemos permiso de escritura sobre el archivo, devolviendo verdadero en caso afirmativo.
test -x $archivo
Chequea si tenemos permiso de ejecución sobre el archivo, devolviendo verdadero en caso afirmativo.
test -b $archivo
Chequea si el archivo es un block device, devolviendo verdadero en caso afirmativo.
test -c $archivo
Chequea si el archivo es un character device, devolviendo verdadero en caso afirmativo.
Evaluando el resultado de un comando
Dado que los comandos que se ejecutan con éxito devuelven un código de ejecución equivalente a verdadero, mientras que los que fallan devuelven un código de ejecución equivalente a falso, podemos evaluar directamente el resultado de un comando como en el siguiente ejemplo:
grep "$nombre" /etc/passwd > /dev/null
Si el usuario existe el resultado será verdadero, de lo contrario será falso.
El '> /dev/null' es para evitar la salida del grep por pantalla.
Condicionales y ciclos:
if ... then ... else ... fi
Un ejemplo simple de if donde se chequea el shell en el que estamos trabajando con la variable de entorno $SHELL.
#!/bin/bash
if [ "$SHELL" = "/bin/bash" ]; then
echo "tu shell es el bash (bourne again shell)"
else
echo "tu shell no es bash sino $SHELL"
fi
Otro ejemplo donde el usuario ingresa por teclado su nombre y es comprarado con la variable nombre.
#!/bin/bash
echo -n Ingrese nombre de usuario:
read usuario
if test "$nombre" = "Luis"
then
echo "Hola Luis"
else
echo "Fuera de aquí!"
fi
&&
(permite un if...then rápido, en realidad es un AND lógico)
test "$nombre" = "Luis" && echo "Hola Luis!"
||
(similar al anterior pero para el caso falso, en realidad es un XOR lógico)
test "$nombre" = "Luis" || echo "Ud. no es Luis!"
case ... in ... esac
case $nombre in
Luis) echo "Hola Luis, como va todo?"
;;
Carlos) echo "Hola Carlos!"
;;
Pepe) echo "Despertate Pepe!!!"
;;
*) echo "no tengo idea de quién es Ud."
esac
while ... do ... done
nombre="Lorenzo"
while test "$nombre" = "Lorenzo"
do
echo -n "Ingrese su nombre, Lorenzo es inaceptable: "
read nombre
done
until ... do ... done
until test "$nombre" = "Lorenzo"
do
echo -n "Ingrese su nombre, Lorenzo es inaceptable: "
read nombre
done
for ... in ... do ... done
for nombrearchivo in *html
do
echo -n "El archivo: $nombrearchivo contiene "
wc -l $nombrearchivo
done
Ese programa recorre todos los archivos con extensión html en el directorio actual, y cuenta las líneas en cada uno de ellos.
Cómo evitar que salgan falsos positivos en el grep
ps aux | grep httpd | grep -v grep > /dev/null
El ps aux lista todos los procesos.
El primer grep filtra todas las líneas que contienen httpd, pero por desgracia baja la línea grep httpd que estamos ejecutando.
Por esto el segundo grep inverso, para mostrar las líneas que no contienen la palabra grep.
Finalmente enviamos todo a /dev/null para evitar que salga por pantalla.
Select
La sentencia select es una extensión específica del bash y es muy útil para usos interactivos. El usuario puede escoger una opción de una lista de difirentes valores:
select var in ... ; do
break
done
.... ahora podemos usar $var ....
Un ejemplo:
#!/bin/sh
echo "¿Cuál es tu sistema operativo favorito?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Otros"; do
break
done
echo "Has seleccionado $var"
Aquí tienes lo que haría el programa:
¿Cuál es tu sistema operativo favorito?
1) Linux
2) Gnu Hurd
3) Free BSD
4) Otros
#? 1
Has seleccionado Linux
Funciones
Las funciones son un recurso esencial para la buena programación, permiten escribir una sola vez un pedazo de código que se repita varias veces en el código, y así lograr minimizar el margen de error y también la cantidad de líneas codificadas en el programa.
Para utilizarlas simplemente se hace un llamado a la función. Las funciones pueden estar dentro del mismo shell script, o en un archivo aparte. Cuando se escriben las funciones en un archivo aparte, es muy importante utilizar el comando "." (punto) para cargarlas en memoria. Si no se cargan en memoria de esta manera, las funciones no estarán disponibles.
Ejemplo:
#
# Cargando las funciones en memoria
# (Hay un espacio despues del .)
. /home/pepe/funciones/funciones-arch.sh
Uso
La sintaxis para utilizar funciones es muy sencilla y no agrega mayor dificultad. El modo de uso se remite a definir la función especificando el nombre y paréntesis que abren y cierran. Todos los comandos que involucran la función se encierran con llaves.
Ejemplo
(archivo: lib/arch.sh)
#
# Funciones para manipulación de archivos
#
borrar ()
{
arch=$1
if [ -z "$arch" ]
then
echo "No se recibió ningún archivo"
return 2
else
if [ -f "$arch" ]
then
if [ -w "$arch" ]
then
rm -i $arch
else
echo "No tengo permisos para borrar $arch"
fi
else
echo "$arch no es un archivo"
fi
fi
}
(archivo: principal.sh)
#!/bin/bash
#
# Programa ejemplo para el uso de funciones en shell script
#
#
# Cargo las funciones en memoria
# CUIDADO CON EL ESPACIO!!!!!!
. /lib/arch.sh
dir=./
for i in $dir/*
do
borrar $i
done
Notas sobre el ejemplo:
(archivo: lib/arch.sh)
Esta función toma el archivo a borrar como argumento (arch=$1), verifica que se le haya pasado un argumento realmente (if [ -z "$arch" ]), que un archivo pasado como argumento sea regular (if [ -f "$arch" ]) y que tenga permisos de escritura. En todos los casos de falsedad responde con un mensaje avisando el problema.
(archivo: principal.sh)
El programa hace un ciclo con los archivos de un directorio específico (for i in $dir/*) y se los pasa como argumento a la función borrar.
Valores de Retorno
Las funciones pueden devolver valores de error utilizando el comando "return <valor>". En caso de que no se especifique un valor de retorno de esta forma, el valor retornado será el que retorne el último comando ejecutado dentro de la función. Desafortunadamente no es posible asignar el valor retornado en una sola línea, siempre es necesario utilizar la variable especial "$?".
Ejemplo:
#!/bin/sh
func () {
return $1
}
func 0
echo "ret: ($?)"
func 1
echo "ret: ($?)"
func 2
echo "ret: ($?)"
func 3
echo "ret: ($?)"
Variables locales a la función
Existe la posibilidad de utilizar variables locales a la función, esto significa que la variable solamente va a existir durante la ejecución de la función.
Para crear una variable local a la función se utilizar el operador "local <nombre_de_variable>".
Ejemplo:
func () {
local x
x=$1
echo "Dentro de la función \$x vale ($x)"
}
echo "Antes de ejecutar la función \$x vale ($x)"
func HOLA!!
echo "Después de ejecutar la función \$x vale ($x)"
Ejercicios
Realizar el ejemplo en la PC (utilizando un archivo con las funciones y otro archivo con el programa principal).
Cambiar el ejemplo para que el directorio donde residen los archivos a borrar sea pasado como argumento al programa principal.
Armar otra función, que en indique cuales de todos los archivos del directorio en cuestión, son subdirectorios del mismo.
Operaciones Aritméticas
Existen varias formas de calcular valores dentro de un shell script. Tradicionalmente, estos cálculos se hicieron con programas externos, esto generaba un retardo inmenso en la ejecución del shell script.
Hoy los nuevos intérpretes traen la posibilidad de hacer cálculos internamente. Para esto se utiliza una sintaxis especial, y es muy importante que los valores de las variables que utilicen para hacer estos cálculos sean números únicamente.
Uso
La sintaxis para hacer operaciones aritméticas es la siguiente:
$[<expresión>]
Las operaciones que se pueden realizar son:
suma ($[1+1])
resta ($[2-1])
multiplicación ($[2*2])
división ($[2/2])
otras como suma de bits, sacar el módulo, evaluación de igualdad, etc.
Ejemplo
#!/bin/sh
#
# Operaciones aritméticas
#
x=2
tot=$[$x+1]
echo "tot: ($tot)"
Ejercicios
Realizar un calculador (con funciones simples, suma, resta, multiplicación y división) pidiendo los datos por teclado.
Ejercicios:
Ejemplo 1
1
cd
ls -1 >salida_script1.dat
Ejemplo 2
#! /bin/bash
echo hola a todos
ls -1 > borrama.txt
Ejemplo 3
echo $1 $2 $3
Ejemplo 4
#! /bin/bash
variable1=$1
variable2=$2
variable3=$3
echo Ud. Ingreso $variable1
read variable1
echo Ud. Ingreso $variable2
read variable2
echo Ud. Ingreso $variable3
read variable3
echo -n
Ejemplo 5
#! /bin/bash
variable1=$1
variable2=$2
variable3=$3
echo "Ingrese primer variable: "
read variable1
echo "Ingrese segunda variable: "
read variable2
echo "Ingrese tercer variable: "
read variable3
Ejemlplo 6
Usuario=$1
echo -n Ingrese nombre de usuario:
read usuario
If [ $usuario = "Luis" ]
then
echo Bienvenido $usuario
else echo Permiso denegado
Fi
Ejemplo 7
servicio=$1
echo -n Ingrese el servicio
read servicio
If ps - aux | grep -v grep | grep $servicio
then
echo El servicio $servicio esta OK !!!!!
else
echo El servicio NO esta activo !!!!!!!
fi
Ejemplo 8
Servicio=$1
echo -n Ingrese el servicio
read servicio
If ps -aux | grep -v grep | grep $servicio >/dev/null
then
echo El servicio $servico esta OK !!!!!
else
echo El servicio NO esta activo !!!!
fi
Ejemplo 9
#! /bin/bash
if ps -aux |grep -v grep | grep smb >info9.txt
then
echo El servicio esta OK >>info9.txt
mail -s "servicio OK" <info9.txt
else
echo El sservicio No esta activo >>info9.txt
mail -s "servicio CAIDO" <info9.txt
fi
Ejemplo 10
archivo=$1
echo "Ingrese valor a testear "
read archivo
if [ -f $archivo ]
then
echo " Esto es un archivo "
else
echo " Esto no es un archivo "
fi
Ejemplo 11
archivo=$1
echo Ïngrese valor a testear "
read archivo
if test -f $ archivo
then
echo " Esto es un archivo "
else
echo "Esto no es un archivo "
if
Ejemplo 12
# COMPARACIONES ##########################
numuno=$1
numdos=$2
echo " Ingrese primer valor "
read numuno
echo " Ingrese segundo valor "
read numdos
if test $numuno -eq $numdos #comparacion -eq
then
echo " El primer valor es igual al segundo "
else
if test numuno -gt $numdos # -gt mayor que (operador logico)
then
echo " El primer valor es mayor que el segundo "
else
echo " El segundo valor es mayor que el primero "
fi
fi
Ejemplo 13
#! /bin/bash
Servicio=$1
If ps -aux | grep -v grep | grep $servicio > /dev/null
then
echo Servicio $servicio ACTIVO
else
echo Servicio $servcio CAIDO. Intentando iniciar.........
/etc/rc.d/init.d/$servico start
if ps -aux | grep -v grep | grep $servicio > /root/bin
/info.txt
then
echo Servicio $servicio OK
else
echo Servicio $servicio Imposible de levantar
mail -s "servicio CAIDO" <root
/bin/info.txt
fi
fi
Ejemplo 14
#! /bin/bash
nombre=$1
echo Ingrese el nombre y la extención del archivo
read nombre
touch $nombre
chmod 755 $nombre
vi $nombre
#!/bin/bash
tar czvf /root/backup/prueba$ (date +&d%m%y). tar. gz /home
echo Listo el backup.
Ejemplo 15
#! /bin/bash
tar czvf /root/backup/prueba$ (date +&d%m%y). tar . gz /home
echo Listo el backup.
Ejemplo 16
#! /bin/bash
archiv=$1
echo Ingrese el nombre del Archivo
read archiv
Iif [ -z $archiv ]
then
echo No se ingreso ningún parámetro
else
if [ -f $archiv ]
then
echo Es un archivo
if [ -w $archiv ]
then
echo Se puede escribir
else
echo No se puede escribir
fi
else
echo No es un archivo
fi
fi
Ejemplo 17
#!/bin/bash
numuno=$1
numdos=$2
echo Ingrese Primer Numero
read numuno
echo Ingrese Segundo Numero
read numdos
total=$ [ $numuno + $numdos ]
echo La Suma de los dos Numeros es $total
total=$ [ $numuno - $numdos ]
echo La Resta de los dos Numeros es $total
total=$ [ $numuno / $numdos ]
total=$ [ La Division de los dos Numeros es $total
total=$ [ $numuno * $numdos ]
echo La Multiplicación de los dos Numeros es $total
Ejemplo 18
#!/bin/bash
nomb=$1
echo Ingrese su nombre
case $nomb in
elreimon)
echo Que tul $nomb ; ;
NoName)
echo Que tul sin permiso $nomb ; ;
*)
echo Ya fuiste ; ;
esac
Ejemplo 19
#! /bin/bash
mes=$1
echo Ingrese un Mes
read mes
case $mes in
ene?? | ENER? | fue* |nada)
echo Entro en l;a 1ra opcion ; ;
Dici* | DIC*| diciem* )
echo Ya fue el anio ; ;
*)
echo Ya fuiste ; ;
esac
Ejemplo 20
#! /bin/bash
numuno=$1
numdos=$2
operacion=$3
echo Ingrese Primer Numero
read numuno
echo Ingrese Segundo Numero
read numdos
echo "Ingrese la operación a realizar ( S R D M ) "
read operación
case $operación in
S | s | + )
total=$ [ $numuno + $numdos ]
echo La Suma de los dos Numeros es $total ;;
R | r | - )
total =$ [ $numuno - $numdos ]
echo la Resta de los dos Numeros es $total ; ;
D | d| /)
If [ $numdos !eq o ]
Then
Total=$ [ $numuno / $numdos ]
Echo la Division de los dos Numeros es $total
Else
echo No se puede dividir por 0
fi ; ;
M|m|\*)
total=$[ $numuno * $numdos ]
echo la Multiplicacion de los dos Numeros es total ; ;
*)
echo Ingrese una operación valida!!!!!!!!!
Esac
Ejemplo 21
#/bin/bash
cd /tmp
for i in `Is`
do
echo El aarchivo a copiar es $I
cp -i $i /root/prueba
done
cd -
Ejemplo 22
#!/bin/bash
for servicio in `cat ctrlserv.txt`
do
is ps -aux | grep -v grep | grep $servicio >/dev/null
then
echo $servicio ACTIVO
#mail -s "servicio OK"
else
#echo $servicio CAIDO. Intentando iniciar......
/etc/rc.d/init.d/$servicio start
if ps -aux | grep -v grep | grep $servicio > /root/bin
/info.txt
then
echo $servicio OK
else
#echo $servicio Imposible de levantar
mai; -s "servicio CAIDO $servicio " < /root/bin/info.txt
fi
fi
done
Ejemplo 23
# /bin/bash
while sleep 7
do
if who | grep prueba > /dev/null
then
echo Hola Prueba
else
echo Prueba No esta
exit
fi
done
Ejemplo 24
#/bin/bash
until who | grep prueba
do
sleep 7
echo Entro en verdadero
done
Ejemplo 25
#! /bin/funciones/copiar.sh
dir=./
for bucle in `ls $dir`
do echo $bucle
copiar $bucle
done
Backup
#!/bin/bash
tar czvf /root/prueba/backuppreimon.tar.gz /root/bin
Indice
Módulo III 1
Uso y Configuración intermedia 1
Editor “vi” 2
Introducción al "vi" 2
Modo Comando 2
Comandos simples 2
Comandos combinados 3
Modo Edición 3
Programación en Bash 4
Variables 4
Valor: 5
Entradas/Salidas (I/O) 5
Variables predefinidas 5
Programación avanzada en shell scripts 5
Argumentos 6
Notas sobre el ejemplo: 6
Argumentos 6
Expresiones 6
Evaluando el resultado de un comando 8
Condicionales y ciclos: 8
Cómo evitar que salgan falsos positivos en el grep 9
Funciones 10
Uso 10
Ejemplo 11
Valores de Retorno 12
Variables locales a la función 12
Ejercicios 12
Operaciones Aritméticas 13
Uso 13
Ejemplo 13
Ejercicios 13
Ejemplo 5 14
Ejemlplo 6 14
Ejemplo 7 14
Ejemplo 10 15
Ejemplo 13 15
Que lo disfruten!!!
Saludos
Sir Tingal0
UIN:92565677
Uso y Configuración intermedia
En este módulo se estudiará más en detalle el uso de Linux, así como también herramientas que nos permitan administrar Linux.
Editor “vi”
El "vi" es un editor muy poderoso, podrá ser un editor muy poco amigable con el usuario, pero es el único editor que siempre va a estar en cualquier distribución de Linux (así como en cualquier otro Unix). Entendemos que es vital que cualquier persona que esté aprendiendo a manejarse dentro de Linux, debe poder utilizar este editor.
Introducción al "vi"
El editor "vi" tiene dos modos, modo edición y modo comando. Podríamos imaginar al modo comando como el momento en el cual estamos navegando dentro de los menues de cualquier editor tradicional de caracteres. Cualquiera que haya utilizado un editor tradicional de caracteres sabe que mientras se navega por los menues no se puede seguir escribiendo el texto editado. El modo comando del "vi" tiene esa semejanza, mientras estoy en el modo comando, no se puede escribir sobre el texto, sino darle ordenes al editor para que ejecute una u otra función predeterminada.
Las ordenes que se le da al editor en el modo comando son muy específicas y muy puntuales. Como no existe semejante cosa como un menú de funciones en el "vi", se utilizan letras y combinaciones de ellas, para lograr la ejecución de las mismas.
Modo Comando
Cuando invocamos el editor con la línea "vi [nombre de archivo]", entramos en modo comando.
La siguiente es una tabla que detalla algunos de los comandos mas utilizados. Es muy importante que se respeten las mayúsculas y minúsculas ya que significan cosas distintas.
Comandos simples
Comando Descripción
"a" Entra al modo edición, una posición después de la ubicación del cursor (diminutivo de "append").
"A" Entra al modo edición, al final de la línea en la que estamos ubicados.
"i" Entra al modo edición, exactamente en la posición actual del cursor.
"I" Entra al modo edición, al principio de la línea.
"x" Borra el caracter que está debajo del cursor.
"X" Borra el caracter que está detrás del cursor.
"yy" Copia una línea entera en el buffer (un "copy").
"p" Pega lo que tenga en el buffer en el lugar donde estamos ubicados (un "paste").
"dd" Borra el contenido de una línea y lo copia al buffer (un "cut").
Flechas Movimiento dentro del archivo.
"h" Mueve el cursor hacia la izquierda.
"l" Mueve el cursor hacia la derecha.
"k" Mueve el cursor hacia arriba.
"j" Mueve el cursor hacia abajo.
"." Repite la ultima función.
"cw" Nos permite reeditar caracteres hasta que se encuentre un ":", una ",", un "." o un espacio.
"cW" Nos permite reeditar caracteres hasta que se encuentre un espacio (sin importar que caracteres haya hasta el espacio).
"r" Reemplaza el caracter debajo del cursor.
"R" Reemplaza todos los caracteres hasta el final de la línea o finalización del modo "reemplazo".
"ZZ" Grabar el archivo y salir del editor.
"u" Revertir el último comando ejecutado (o edición agregada).
"G" Ir al final del archivo.
"numero <comando>" El número representa cantidad de líneas, el comando puede ser cualquiera de los descriptos que se aplique. Por ejemplo para subir 10 líneas, podemos ejecutar "10k". Otro ejemplo sería, copiar 20 líneas, lo haríamos con "20yy".
"o" Agregar una línea debajo de la que estamos ubicados y cambiar a modo edición.
"O" Agregar una línea arriba de la que estamos ubicados y cambiar a modo edición.
Comandos combinados
Además de los comandos citados en la tabla anterior, existen muchos otros comandos o funciones que se pueden ejecutar desde el "vi" utilizando el comando simple ":". Cuando se teclea este símbolo, el editor nos lleva a la ultima línea de la pantalla donde podremos ejecutar diferentes funciones.
La siguiente es una tabla con las funciones mas utilizadas, todas estas funciones se pueden ejecutar, únicamente, despues de teclear los ":".
Es importante destacar que se pueden combinar estas funciones, por ejemplo, podríamos ejecutar ":wq" y además de grabar el archivo, se saldrá del editor.
Función Descripción
"w [nombre de archivo]" Grabar archivo (si le agregamos el símbolo de admiración "!", se fuerza la grabación).
"q" Salir del editor (si le agregamos el símbolo de admiración "!", se sale del editor sin grabar).
"n [nombre de archivo]" Editar el archivo pasado como argumento, manteniendo el anterior en memoria.
"n #" Volver al archivo anterior.
"r <nombre de archivo>" Insertar el archivo, pasado como argumento, dentro del archivo actual.
"! <comando>" Ejecutar "<comando>" (del shell) y mostrar su salida.
"!! <comando>" Ejecutar "<comando>" (del shell) y insertar la salida del mismo dentro del archivo en edición.
"x" Grabar y salir del editor (sinónimo de ":wq")
Modo Edición
Para ingresar al modo edición se pueden utilizar varios comandos, la mayoría de ellos están descriptos en la tabla de comandos simples (ej.: "a", "i", "A", "I").
Existe una única tecla para salir del modo edición y es la tecla "escape" ("Esc").
Una vez que se ingresó al modo edición, simplemente tenemos que escribir el texto deseado.
Programación en Bash
Shell Scripts (programación en shell)
Introducción
Linux, así como la mayoría de los UNIX, utilizan shell scripts para realizar una infinidad de tareas. Un shell script es un programa que se escribe con una sintaxis particular, para que sea interpretado por un shell (en este caso /bin/bash).
Un shell script es básicamente un programa que llama a otros programas, con la posibilidad de hacer algun tipo de procesamiento propio (como control de flujo, operaciones matemáticas simples, etc.)
Existen muchos shells disponibles para Linux pero habitualmente se utiliza el bash (bourne again shell) para la programación en shell ya que está disponible libremente y es fácil de usar. Por lo tanto todos los scripts que escribamos en este artículo usarán el bash (aunque la mayoría de veces también funcionarán con su hermano mayor, el bourne shell).
Para escribir nuestros programas en shell usaremos cualquier clase de editor de texto, p.ej. Vi, mcedit, joe... como con otros lenguajes de programación.
El programa debe empezar con la siguiente línea (debe ser la primera línea del fichero):
#!/bin/bash
Los caracteres #! indican al sistema que el primer argumento que sigue en la linea es el programa a utilizar para ejecutar este fichero. En este caso usamos el shell /bin/bash.
Cuando hallas escrito y guardado tu script debes hacerlo ejecutable para poder usarlo.
Para hacer el script ejecutable debemos escribir el siguiente comando:
chmod +755 nombre-del-script.
Después puedes ejecutar tu script escribiendo:
./nombre-del-script
Variables
Asignación:
La asignación de variables se realiza simplemente indicando su nombre, un signo =, y el valor, como en el siguiente ejemplo:
nombre="Luis"
Valor:
El valor de una variable se toma anteponiendo un signo $ al nombre, así si queremos imprimir el valor de la variable nombre que creamos antes:
echo $nombre
Entradas/Salidas (I/O)
La entrada salida puede manejarse con los comandos echo y read:
echo $variable
echo -n "Esto no imprime un carácter nueva línea al final"
read ciudad
read ciudad calle nro
Este último ejemplo lee 3 valores desde el teclado, tomando como separador el estándar definido para el shell (usualmente el espacio). Los valores van a las variables que se están leyendo ($ciudad, $calle y $nro).
Si se desea dirigir a pantalla múltiples líneas de texto, puede utilizarse un truquito con el comando cat:
#!/bin/bash
cat << IMPRIMIRHASTAAQUI
Esto es un ejemplo
de un texto realmente largo
que debemos sacar por pantalla
hasta llegar al punto indicado
en el comando cat de arriba
IMPRIMIRHASTAAQUI
?sigue el script?
Variables predefinidas
Variable Descripción
$# Número de argumentos
$* Todos los argumentos del shell
$- Opciones suministradas al shell
$? Valor de retorno del último comando ejecutado
$$ Identificación del PID (número de proceso)
Programación avanzada en shell scripts
Los shell scripts son una herramienta muy utilizada en Linux, por lo tanto, es importante que el asistente logre un buen nivel de conocimiento en esta herramienta.
En este nivel más avanzado se verá nueva sintaxis de shell script, que le permitirá al administrador escribir shell scripts más fáciles de leer y mucho más funcionales.
Argumentos
Los argumentos sirven para pasarle a un programa o una función valores desde la línea de comando.
Variable Significado
$* Todos los argumentos
$# Cant. de argumentos
$0 Nombre del script
$1 Primer argumento
$2 Segundo argumento
$n Argumento 'enésimo'
Ejemplo:
#!/bin/sh
#
# Programa que recibe argumentos y los imprime por pantalla
#
echo "\$*: $*"
echo "\$#: $#"
echo "\$0: $0"
echo "\$1: $1"
echo "\$2: $2"
Notas sobre el ejemplo:
En la líneas de impresión (echo), para imprimir el símbolo "$" (pesos) se tiene que anteponer el símbolo "\" (contra barra), sino el shell lo va a interpretar como una variable, y si esta existe imprimirá su contenido.
Argumentos
Los argumentos que se pasan en el momento de invocar el script se asignan a las variables automáticas $1, $2, $3, etc...
script perro gato loro
$1 vale perro, $2 vale gato, $3 vale loro.
En ocasiones se desea asignar a una variable el valor obtenido mediante la ejecución de otro comando. Esto se logra encerrando el comando entre ' como se ve en el siguiente ejemplo:
horaydia='date'
Otras variables automáticas son $0 que contiene el nombre del script, y $# que contiene la cantidad de argumentos ingresados durante la ejecución del script.
Expresiones
El comando test permite evaluar expresiones devolviendo verdadero o falso como resultado (usualmente se utiliza con el comando if):
test "$nombre" = "Luis"
El ejemplo de arriba chequea igualdad.
Si deseamos chequear desigualdad debemos usar el operador != como en C:
test "$nombre" != "Carlos"
Otros operadores son:
test $variable
Chequea si la variable contiene algún dato, en cuyo caso devuelve verdadero.
test -z $variable
Chequea si la variable no contiene datos (longitud cero), en cuyo caso devuelve verdadero.
test $variable1 -eq $variable2
Chequea igualdad entre variables numéricas enteras, si son iguales devuelve verdadero.
test $variable1 -ge $variable2
Chequea si el primer valor es mayor o igual que el segundo, en cuyo caso devuelve verdadero.
test $variable1 -gt $variable2
Chequea si el primer valor es mayor que el segundo, en cuyo caso devuelve verdadero.
test $variable1 -le $variable2
Chequea si el primer valor es menor o igual que el segundo, en cuyo caso devuelve verdadero.
test $variable1 -lt $variable2
Chequea si el primer valor es menor que el segundo, en cuyo caso devuelve verdadero.
test $variable1 -ne $variable2
Chequea que los dos valores no sean iguales, en cuyo caso devuelve verdadero.
test $archivo1 -nt $archivo2
Chequea las fechas de modificación de dos archivos, devolviendo verdadero si el archivo1 es más nuevo que el archivo2.
test -f $archivo
Chequea si el archivo existe, en caso afirmativo devuelve verdadero.
test -d $archivo
Chequea si el archivo en cuestión es un directorio y si existe, en cuyo caso devuelve verdadero.
test -r $archivo
Chequea si tenemos permiso de lectura sobre el archivo, devolviendo verdadero en caso afirmativo.
test -w $archivo
Chequea si tenemos permiso de escritura sobre el archivo, devolviendo verdadero en caso afirmativo.
test -x $archivo
Chequea si tenemos permiso de ejecución sobre el archivo, devolviendo verdadero en caso afirmativo.
test -b $archivo
Chequea si el archivo es un block device, devolviendo verdadero en caso afirmativo.
test -c $archivo
Chequea si el archivo es un character device, devolviendo verdadero en caso afirmativo.
Evaluando el resultado de un comando
Dado que los comandos que se ejecutan con éxito devuelven un código de ejecución equivalente a verdadero, mientras que los que fallan devuelven un código de ejecución equivalente a falso, podemos evaluar directamente el resultado de un comando como en el siguiente ejemplo:
grep "$nombre" /etc/passwd > /dev/null
Si el usuario existe el resultado será verdadero, de lo contrario será falso.
El '> /dev/null' es para evitar la salida del grep por pantalla.
Condicionales y ciclos:
if ... then ... else ... fi
Un ejemplo simple de if donde se chequea el shell en el que estamos trabajando con la variable de entorno $SHELL.
#!/bin/bash
if [ "$SHELL" = "/bin/bash" ]; then
echo "tu shell es el bash (bourne again shell)"
else
echo "tu shell no es bash sino $SHELL"
fi
Otro ejemplo donde el usuario ingresa por teclado su nombre y es comprarado con la variable nombre.
#!/bin/bash
echo -n Ingrese nombre de usuario:
read usuario
if test "$nombre" = "Luis"
then
echo "Hola Luis"
else
echo "Fuera de aquí!"
fi
&&
(permite un if...then rápido, en realidad es un AND lógico)
test "$nombre" = "Luis" && echo "Hola Luis!"
||
(similar al anterior pero para el caso falso, en realidad es un XOR lógico)
test "$nombre" = "Luis" || echo "Ud. no es Luis!"
case ... in ... esac
case $nombre in
Luis) echo "Hola Luis, como va todo?"
;;
Carlos) echo "Hola Carlos!"
;;
Pepe) echo "Despertate Pepe!!!"
;;
*) echo "no tengo idea de quién es Ud."
esac
while ... do ... done
nombre="Lorenzo"
while test "$nombre" = "Lorenzo"
do
echo -n "Ingrese su nombre, Lorenzo es inaceptable: "
read nombre
done
until ... do ... done
until test "$nombre" = "Lorenzo"
do
echo -n "Ingrese su nombre, Lorenzo es inaceptable: "
read nombre
done
for ... in ... do ... done
for nombrearchivo in *html
do
echo -n "El archivo: $nombrearchivo contiene "
wc -l $nombrearchivo
done
Ese programa recorre todos los archivos con extensión html en el directorio actual, y cuenta las líneas en cada uno de ellos.
Cómo evitar que salgan falsos positivos en el grep
ps aux | grep httpd | grep -v grep > /dev/null
El ps aux lista todos los procesos.
El primer grep filtra todas las líneas que contienen httpd, pero por desgracia baja la línea grep httpd que estamos ejecutando.
Por esto el segundo grep inverso, para mostrar las líneas que no contienen la palabra grep.
Finalmente enviamos todo a /dev/null para evitar que salga por pantalla.
Select
La sentencia select es una extensión específica del bash y es muy útil para usos interactivos. El usuario puede escoger una opción de una lista de difirentes valores:
select var in ... ; do
break
done
.... ahora podemos usar $var ....
Un ejemplo:
#!/bin/sh
echo "¿Cuál es tu sistema operativo favorito?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Otros"; do
break
done
echo "Has seleccionado $var"
Aquí tienes lo que haría el programa:
¿Cuál es tu sistema operativo favorito?
1) Linux
2) Gnu Hurd
3) Free BSD
4) Otros
#? 1
Has seleccionado Linux
Funciones
Las funciones son un recurso esencial para la buena programación, permiten escribir una sola vez un pedazo de código que se repita varias veces en el código, y así lograr minimizar el margen de error y también la cantidad de líneas codificadas en el programa.
Para utilizarlas simplemente se hace un llamado a la función. Las funciones pueden estar dentro del mismo shell script, o en un archivo aparte. Cuando se escriben las funciones en un archivo aparte, es muy importante utilizar el comando "." (punto) para cargarlas en memoria. Si no se cargan en memoria de esta manera, las funciones no estarán disponibles.
Ejemplo:
#
# Cargando las funciones en memoria
# (Hay un espacio despues del .)
. /home/pepe/funciones/funciones-arch.sh
Uso
La sintaxis para utilizar funciones es muy sencilla y no agrega mayor dificultad. El modo de uso se remite a definir la función especificando el nombre y paréntesis que abren y cierran. Todos los comandos que involucran la función se encierran con llaves.
Ejemplo
(archivo: lib/arch.sh)
#
# Funciones para manipulación de archivos
#
borrar ()
{
arch=$1
if [ -z "$arch" ]
then
echo "No se recibió ningún archivo"
return 2
else
if [ -f "$arch" ]
then
if [ -w "$arch" ]
then
rm -i $arch
else
echo "No tengo permisos para borrar $arch"
fi
else
echo "$arch no es un archivo"
fi
fi
}
(archivo: principal.sh)
#!/bin/bash
#
# Programa ejemplo para el uso de funciones en shell script
#
#
# Cargo las funciones en memoria
# CUIDADO CON EL ESPACIO!!!!!!
. /lib/arch.sh
dir=./
for i in $dir/*
do
borrar $i
done
Notas sobre el ejemplo:
(archivo: lib/arch.sh)
Esta función toma el archivo a borrar como argumento (arch=$1), verifica que se le haya pasado un argumento realmente (if [ -z "$arch" ]), que un archivo pasado como argumento sea regular (if [ -f "$arch" ]) y que tenga permisos de escritura. En todos los casos de falsedad responde con un mensaje avisando el problema.
(archivo: principal.sh)
El programa hace un ciclo con los archivos de un directorio específico (for i in $dir/*) y se los pasa como argumento a la función borrar.
Valores de Retorno
Las funciones pueden devolver valores de error utilizando el comando "return <valor>". En caso de que no se especifique un valor de retorno de esta forma, el valor retornado será el que retorne el último comando ejecutado dentro de la función. Desafortunadamente no es posible asignar el valor retornado en una sola línea, siempre es necesario utilizar la variable especial "$?".
Ejemplo:
#!/bin/sh
func () {
return $1
}
func 0
echo "ret: ($?)"
func 1
echo "ret: ($?)"
func 2
echo "ret: ($?)"
func 3
echo "ret: ($?)"
Variables locales a la función
Existe la posibilidad de utilizar variables locales a la función, esto significa que la variable solamente va a existir durante la ejecución de la función.
Para crear una variable local a la función se utilizar el operador "local <nombre_de_variable>".
Ejemplo:
func () {
local x
x=$1
echo "Dentro de la función \$x vale ($x)"
}
echo "Antes de ejecutar la función \$x vale ($x)"
func HOLA!!
echo "Después de ejecutar la función \$x vale ($x)"
Ejercicios
Realizar el ejemplo en la PC (utilizando un archivo con las funciones y otro archivo con el programa principal).
Cambiar el ejemplo para que el directorio donde residen los archivos a borrar sea pasado como argumento al programa principal.
Armar otra función, que en indique cuales de todos los archivos del directorio en cuestión, son subdirectorios del mismo.
Operaciones Aritméticas
Existen varias formas de calcular valores dentro de un shell script. Tradicionalmente, estos cálculos se hicieron con programas externos, esto generaba un retardo inmenso en la ejecución del shell script.
Hoy los nuevos intérpretes traen la posibilidad de hacer cálculos internamente. Para esto se utiliza una sintaxis especial, y es muy importante que los valores de las variables que utilicen para hacer estos cálculos sean números únicamente.
Uso
La sintaxis para hacer operaciones aritméticas es la siguiente:
$[<expresión>]
Las operaciones que se pueden realizar son:
suma ($[1+1])
resta ($[2-1])
multiplicación ($[2*2])
división ($[2/2])
otras como suma de bits, sacar el módulo, evaluación de igualdad, etc.
Ejemplo
#!/bin/sh
#
# Operaciones aritméticas
#
x=2
tot=$[$x+1]
echo "tot: ($tot)"
Ejercicios
Realizar un calculador (con funciones simples, suma, resta, multiplicación y división) pidiendo los datos por teclado.
Ejercicios:
Ejemplo 1
1
cd
ls -1 >salida_script1.dat
Ejemplo 2
#! /bin/bash
echo hola a todos
ls -1 > borrama.txt
Ejemplo 3
echo $1 $2 $3
Ejemplo 4
#! /bin/bash
variable1=$1
variable2=$2
variable3=$3
echo Ud. Ingreso $variable1
read variable1
echo Ud. Ingreso $variable2
read variable2
echo Ud. Ingreso $variable3
read variable3
echo -n
Ejemplo 5
#! /bin/bash
variable1=$1
variable2=$2
variable3=$3
echo "Ingrese primer variable: "
read variable1
echo "Ingrese segunda variable: "
read variable2
echo "Ingrese tercer variable: "
read variable3
Ejemlplo 6
Usuario=$1
echo -n Ingrese nombre de usuario:
read usuario
If [ $usuario = "Luis" ]
then
echo Bienvenido $usuario
else echo Permiso denegado
Fi
Ejemplo 7
servicio=$1
echo -n Ingrese el servicio
read servicio
If ps - aux | grep -v grep | grep $servicio
then
echo El servicio $servicio esta OK !!!!!
else
echo El servicio NO esta activo !!!!!!!
fi
Ejemplo 8
Servicio=$1
echo -n Ingrese el servicio
read servicio
If ps -aux | grep -v grep | grep $servicio >/dev/null
then
echo El servicio $servico esta OK !!!!!
else
echo El servicio NO esta activo !!!!
fi
Ejemplo 9
#! /bin/bash
if ps -aux |grep -v grep | grep smb >info9.txt
then
echo El servicio esta OK >>info9.txt
mail -s "servicio OK" <info9.txt
else
echo El sservicio No esta activo >>info9.txt
mail -s "servicio CAIDO" <info9.txt
fi
Ejemplo 10
archivo=$1
echo "Ingrese valor a testear "
read archivo
if [ -f $archivo ]
then
echo " Esto es un archivo "
else
echo " Esto no es un archivo "
fi
Ejemplo 11
archivo=$1
echo Ïngrese valor a testear "
read archivo
if test -f $ archivo
then
echo " Esto es un archivo "
else
echo "Esto no es un archivo "
if
Ejemplo 12
# COMPARACIONES ##########################
numuno=$1
numdos=$2
echo " Ingrese primer valor "
read numuno
echo " Ingrese segundo valor "
read numdos
if test $numuno -eq $numdos #comparacion -eq
then
echo " El primer valor es igual al segundo "
else
if test numuno -gt $numdos # -gt mayor que (operador logico)
then
echo " El primer valor es mayor que el segundo "
else
echo " El segundo valor es mayor que el primero "
fi
fi
Ejemplo 13
#! /bin/bash
Servicio=$1
If ps -aux | grep -v grep | grep $servicio > /dev/null
then
echo Servicio $servicio ACTIVO
else
echo Servicio $servcio CAIDO. Intentando iniciar.........
/etc/rc.d/init.d/$servico start
if ps -aux | grep -v grep | grep $servicio > /root/bin
/info.txt
then
echo Servicio $servicio OK
else
echo Servicio $servicio Imposible de levantar
mail -s "servicio CAIDO" <root
/bin/info.txt
fi
fi
Ejemplo 14
#! /bin/bash
nombre=$1
echo Ingrese el nombre y la extención del archivo
read nombre
touch $nombre
chmod 755 $nombre
vi $nombre
#!/bin/bash
tar czvf /root/backup/prueba$ (date +&d%m%y). tar. gz /home
echo Listo el backup.
Ejemplo 15
#! /bin/bash
tar czvf /root/backup/prueba$ (date +&d%m%y). tar . gz /home
echo Listo el backup.
Ejemplo 16
#! /bin/bash
archiv=$1
echo Ingrese el nombre del Archivo
read archiv
Iif [ -z $archiv ]
then
echo No se ingreso ningún parámetro
else
if [ -f $archiv ]
then
echo Es un archivo
if [ -w $archiv ]
then
echo Se puede escribir
else
echo No se puede escribir
fi
else
echo No es un archivo
fi
fi
Ejemplo 17
#!/bin/bash
numuno=$1
numdos=$2
echo Ingrese Primer Numero
read numuno
echo Ingrese Segundo Numero
read numdos
total=$ [ $numuno + $numdos ]
echo La Suma de los dos Numeros es $total
total=$ [ $numuno - $numdos ]
echo La Resta de los dos Numeros es $total
total=$ [ $numuno / $numdos ]
total=$ [ La Division de los dos Numeros es $total
total=$ [ $numuno * $numdos ]
echo La Multiplicación de los dos Numeros es $total
Ejemplo 18
#!/bin/bash
nomb=$1
echo Ingrese su nombre
case $nomb in
elreimon)
echo Que tul $nomb ; ;
NoName)
echo Que tul sin permiso $nomb ; ;
*)
echo Ya fuiste ; ;
esac
Ejemplo 19
#! /bin/bash
mes=$1
echo Ingrese un Mes
read mes
case $mes in
ene?? | ENER? | fue* |nada)
echo Entro en l;a 1ra opcion ; ;
Dici* | DIC*| diciem* )
echo Ya fue el anio ; ;
*)
echo Ya fuiste ; ;
esac
Ejemplo 20
#! /bin/bash
numuno=$1
numdos=$2
operacion=$3
echo Ingrese Primer Numero
read numuno
echo Ingrese Segundo Numero
read numdos
echo "Ingrese la operación a realizar ( S R D M ) "
read operación
case $operación in
S | s | + )
total=$ [ $numuno + $numdos ]
echo La Suma de los dos Numeros es $total ;;
R | r | - )
total =$ [ $numuno - $numdos ]
echo la Resta de los dos Numeros es $total ; ;
D | d| /)
If [ $numdos !eq o ]
Then
Total=$ [ $numuno / $numdos ]
Echo la Division de los dos Numeros es $total
Else
echo No se puede dividir por 0
fi ; ;
M|m|\*)
total=$[ $numuno * $numdos ]
echo la Multiplicacion de los dos Numeros es total ; ;
*)
echo Ingrese una operación valida!!!!!!!!!
Esac
Ejemplo 21
#/bin/bash
cd /tmp
for i in `Is`
do
echo El aarchivo a copiar es $I
cp -i $i /root/prueba
done
cd -
Ejemplo 22
#!/bin/bash
for servicio in `cat ctrlserv.txt`
do
is ps -aux | grep -v grep | grep $servicio >/dev/null
then
echo $servicio ACTIVO
#mail -s "servicio OK"
else
#echo $servicio CAIDO. Intentando iniciar......
/etc/rc.d/init.d/$servicio start
if ps -aux | grep -v grep | grep $servicio > /root/bin
/info.txt
then
echo $servicio OK
else
#echo $servicio Imposible de levantar
mai; -s "servicio CAIDO $servicio " < /root/bin/info.txt
fi
fi
done
Ejemplo 23
# /bin/bash
while sleep 7
do
if who | grep prueba > /dev/null
then
echo Hola Prueba
else
echo Prueba No esta
exit
fi
done
Ejemplo 24
#/bin/bash
until who | grep prueba
do
sleep 7
echo Entro en verdadero
done
Ejemplo 25
#! /bin/funciones/copiar.sh
dir=./
for bucle in `ls $dir`
do echo $bucle
copiar $bucle
done
Backup
#!/bin/bash
tar czvf /root/prueba/backuppreimon.tar.gz /root/bin
Indice
Módulo III 1
Uso y Configuración intermedia 1
Editor “vi” 2
Introducción al "vi" 2
Modo Comando 2
Comandos simples 2
Comandos combinados 3
Modo Edición 3
Programación en Bash 4
Variables 4
Valor: 5
Entradas/Salidas (I/O) 5
Variables predefinidas 5
Programación avanzada en shell scripts 5
Argumentos 6
Notas sobre el ejemplo: 6
Argumentos 6
Expresiones 6
Evaluando el resultado de un comando 8
Condicionales y ciclos: 8
Cómo evitar que salgan falsos positivos en el grep 9
Funciones 10
Uso 10
Ejemplo 11
Valores de Retorno 12
Variables locales a la función 12
Ejercicios 12
Operaciones Aritméticas 13
Uso 13
Ejemplo 13
Ejercicios 13
Ejemplo 5 14
Ejemlplo 6 14
Ejemplo 7 14
Ejemplo 10 15
Ejemplo 13 15
Que lo disfruten!!!
Saludos
Sir Tingal0
UIN:92565677
0