miércoles, 3 de noviembre de 2010

Shell Script

Muchas ocasiones nos toca hacer un pequeño script en pantalla para ejecutar alguna operación que puede ser automatizada , el editor "vi"

No voy a entrar mucho a detalle en esto pero daré algunas tips que pueden ayudarnos

1. en el editor vi , en ocasiones es necesario realizar búsquedas se hacen con la /
2. Para ejecutar algún comando de sistema operativo son salir se realiza con !
3. para ejecutar el mismo comando sin repetir la instrucción !!
4. Para hacer referencia al nombre del script utilizamos %
5. si queremos correr el script sin salirmos hacemos lo siguiente !%
6. Para grabar utilizamo la w
7. para grabar y salir usarmos x
8. para moverte al principio del archivo es con 1G
9. Para moverte al final del archivo es G
10. Para moverte al principio de la linea es 0
11. Para moverte al final de la linea es $
12. Para hacer un UNDO es con la letra u
13. Para remplazar caracteres utilizamos la r o R
14. Con dd, borras toda la linea , con D borras el resto de la linea a partir del cursor.

Con esos basicos pasos podemos hacer uso eficiente te nuestro editor.

Uso de variables, el sistema tiene variables de ambiente que no debemos cambiar , pero podemos, estas las podemos consultar

# env

para asignar un valor a una variable lo hacemos de la sig manera

# hola="hola Mundo"
# echo $hola

estas variables solo se pueden usar en el script que se realiza , para que puedan ser utilizadas por diferentes aplicaciones tendremos que exportarlas

# export hola

Podemos agrupar la ejecucion de comandos utilizando paréntesis

# (
> ls
> df
> who
> )



Control de ejecución de comandos , para esto utilizaremos

# ls; df; who;

esto ejecutara un comando despues de otro .

una ejecución de comandos la podemos dividir con \

# ls ; \
> df; \
> who

existe también el re direccionamiento de resultados .

# ls &

manda el comando a back ground

Para redireccionar el resultado de un comando utilizamo |

# ps axu | grep sendmail

este comando redirecciona el resultado del ps al grep para ser filtrados

# ps axu > resultado

redirecciona el resultado del ps a un archivo llamado resultado

# ps axu >> resultado

redirecciona el resultado y lo concatena con el resultado ya existente en el archivo

# ps axu >/dev/null 2>&1

redirecciona el resultado a la nada (el resultado y el error ) &1 significa que utilizara el mismo archivo .


el argumento 2> redirecciona los errores así que podemos dividirlo

# ps aux > resultado 2> errores



tenemos también las condicionantes para ejecución de comandos que utilizaremos && y ||

tenemos el siguiente ejemplo

# mv file.txt file2.txt && echo " Si se armo"

el resultado es , si el comando fue ejecutado correctamente y con status 0 , enviara el mensaje "Si se armo" en caso contrario enviara el error y no correrá el segundo comando

# mv file.txt file2.txt || echo " ya lo habias echo "

este enviara el mensaje si al ejecutar el primer comando se ejecuta correctamente pero su estatus es diferente de 0 o con error .

haa pero surge la pregunta como saber si es un 0 o 1 , cuando se ejecuta un comando el sistema guarda en la variable $? el estatus de la ejecución del comando anterior

ejemplo

# ls a
# echo $?


Sentencia condicional if

la estructura es

if comando
then
comando
comando
comando
elif comando
then
comando
else
comando

fi


un ejemplo sencillo de esto

if ls usuarios.txt > /dev/null 2>&1
then
echo " Ya existe el archivo"
elif who > usuario.txt
echo "Archivo creado
else
echo "No se pudo crear"
if


para auxiliarnos en la evaluación de expresiones utilizaremos el comando test

el comando test regresa un 1 si la evaluación es verdadera y un 0 si es falsa , este cuenta con operadores para hacer multiples evaluaciones veamos alguna de ellas

1. exp1 -a exp2 # ambas epreciones verdaderas
2. !exp # negar la expresion
3. exp1 -o exp2 # es las expresion o logica
4. -n string # si la cadena es diferente de 0
5. -z string # si la cadena es 0
6. cadena1 = cadena2 # compara 2 cadenas iguales
7. cadena1 != cadena2 # compara 2 cadenas diferentes
8. val1 -eq val2 # valores iguales
9. val1 -ge val2 # mayor o igual que
10 val1 -gt val2 # el valor es mayor que
11 val1 -le val2 # menor o igual a
12. val1 -lt val2 # menor que
13. val1 -ne val2 # no son iguales
14. archivo -ef archivo1 #
15. archivo -nt archivo1 # arvhivo es mas nuevo que
16. archivo -ot archivo1 # archivo es mas viejo que
17. -e archivo # el archivo existe
18. -d archivo # existe y es directorio
19. -f archivo # existe y es un archivo regular
20 -xwr archivo # cada una de las letras por separado indica que existe y es ejecutable , escribible, o lecura


Sentencia case para evaluar multiples

case $valor in

valor) comando ;;
valor1) comando ;;
*) valor_default ;;
esac

se utiliza como if anidados ..

No hay comentarios:

Publicar un comentario