Ok ahora veamos como hacer un ciclo o bucle en shell, al igual que en programación tenemos la sentencia WHILE , veamos acerca de ella.
el while tiene una condicionante que funciona parecido al if, en ella podemos utilizar evaluaciones echas con el test, veamos la sintaxis
while [ condición ]
do
comandos
done
el comando se repetirá hasta que la condición sea verdadera .
veamos un ejemplo sencillo
echo " indtroduzca numero"
read x
while test $x != 20
do
echo " introduzca el numero correcto"
echo " intente de nuevo"
read x
done
esto lo hará hasta que sea el numero que se ingrese sea 20
también podemos redirecciona información
veamos un pequeño ejemplo
ls -la | while read w x y z
do
echo $w , $x , $y , $z.
done
las letras se convertirán en cada columna y se cortaran en cada espacio vació.
ls | while read x
do
if [ -d "$x" ]
then
echo $x es directorio
break
elif [ -e $x ]
then
echo $x es archivo
continue
fi
done
este script identifica si la listado es archivo o directorio . si es directorio rompe el ciclo
como evaluar expresiones matemáticas en el shell utilizamos expr
veamos un ejemplo
# expr 2 \* 3
este comando puede ejecutar múltiples operaciones matemáticas , es recomendable que vean el manual completo
ahora veremos la sentencia for .
la sentencia for sirve para hace ciclos al igual que el while . veamos como es la sintaxis
# for x in argumentos do comandos done
veamos un ejemplo pequeño, re nombremos todos los archivos de un directorio .
# for x in *.conf; do y=${x/.conf/.old}; mv $x $y; done
veamos otro ejempo de como hacer un contador con el for
# for ((i=0;$i<100;i= `expr $i + 2`)) do echo $i; done;
como notaron , utilice un tipo de comillas para denotar la expresión, esto permite utilizar comandos en las lineas de ejecución . veamos otro ejemplo
jueves, 4 de noviembre de 2010
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 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 ..
Suscribirse a:
Entradas (Atom)