Programación del Shell

Anuncio
Programación del Shell
Argumentos: $cmd arg1 arg2 arg3 ($0 $1 $2 $3)
read var1 [var2] (Se lee texto tecleado desde la terminal)
$cat dame-tu-nombre
echo “Cual es tu nombre:\c”
read nombre
echo Hola, $nombre
Códigos de retorno
Todos los comandos en Unix generan códigos de retorno, el código de retorno 0 indica
"verdadero", si el código es diferente de 0 indica falso.
$? guarda el código de retorno del comando más reciente
# grep user7 /etc/passwd
user7:WDUwYCI,M0j8:604:3:1835:/j1/gp0/user7:
#echo$?
0
Comando test args, [ args ]
args forma una expresión lógica, se evalúan los argumentos y se fija el valor de $?. Se
pueden evaluar condiciones de archivos, variables y números
r
w
x
f
d
c
b
s
z var
n var
var1 = var2
var1!= var2
var1
archivo verdadero si el archivo existe y se
puede leer
verdadero si el archivo existe y se pude
escribir archivo
verdadero si el archivo existe y se puede
ejecutar archivo
verdadero si el archivo existe y es regular
archivo
verdadero si el archivo existe y es un
directorio archivo
verdadero si el archivo existe y es tipo
caracter archivo
verdadero si el archivo existe y es tipo
bloque archivo
verdadero si el archivo existe y su tamaño
es mayor que cero archivo
verdadero si la longitud de la variable var
es cero
verdadero si la longitud de la vaiable var es
diferente de cero
verdaderos si sus contenidos son iguales
verdadero si sus contenidos son diferentes
Verdadero si var1 no es un caracter nulo
(retorno)
n1 –eq n2
Combinación con operadores
!
-a
-o
\( expr \)
verdadero si los enteros n1 y n2 son
algebraicamente iguales
otras comparaciones con enteros: -ne –gt –
lt –le
Negación
Operador AND
Operador OR
Agrupación
Ejemplo:
ARCH=$1
if [ -s $ARCH -a -r $ARCH ]
then
echo $ARCH es ">0" y se puede leer
else
if [ ! -r $ARCH ]
then
echo $ARCH no se puede leer
fi
fi
Comando if
if
cmd1
cmd 2
then
cmd 3
cmd 4
fi
if
grep $1 /etc/passwd >/dev/null
then
echo $1 se encontró
exit 0
else
echo $1 no se encontró
exit 1
fi
if grep $1 /etc/passwd >/dev/null then
if grep $2 /etc/passwd>/dev/null
then
echo $1 y $2 estan aqui
else
echo solo $1 esta aqui
fi
else
if grep $2 /etc/passwd>/dev/null
then
echo solo $2 esta aqui
else
echo ninguno esta aqui
fi
fi
Comando while
while cmd1 do
cmdA
cmdB
done
Ejecuta cmd1, si el código de retorno es 0, ejecuta los siguientes comandos
while true
do
date | tee -a crece
ls -l crece
ps
echo
sleep 10
done
break [arg] -> La ejecución prosigue después de encontrar arg veces la palabra done
continue [ arg ] -> Provoca que la ejecución salte al principio del ciclo arg exterior
Construcción for
for var in lista
do
cmd1
cmd2
.
cmdN
done
Asigna el primer valor en lista a "var", ejecuta todos los comandos entre "do" y "done",
continúa asignando y ejecutando hasta que todos los valores en lista se hayan asignado a
"var"
for i in 1 2 3 4 5 6 7 8
do
cp examen ../user$1/examen
chmod +x ../user$1/examen
done
Otra forma sería ( for i in $* )
Construcción case
case word in
patron1)
cmd
.
.
;;
patron2)
cmd
.
;;
patronN)
cmd
;;
esac
Ejemplo:
hoy=`date +%m%d`
case $hoy in
1111) echo "hoy es el once de noviembre"
;;
0511)echo "hoy no es 1111"
;;
*)echo "hoy no es importante"
;;
esac
exit arg: Termina la ejecución de un procedimiento shell, asigna un valor al código de
retorno.
break [ arg ] La ejecución prosigue después de encontrar arg veces la palabra done
continue [ arg ] La ejecución salta al principio del ciclo arg exterior
expr se usa para realizar operaciones aritméticas en el shell $ expr 5+20, 26
$cat expr.test
j=1
while test $j -le 10
do
echo $j
j=`expr $j + 1`
done
Los programas que se realicen deben estar en un directorio llamado "ejercicios", bajo el
directorio hogar de su cuenta.
1) Cambiar el prompt de su cuenta desde el archivo .profile, se deberá desplegar el
nombre de la máquina y su directorio hogar.
2) Escribir un programa de shell que se llame "copiax". Cuando se ejecute debe
preguntar por un nombre de archivo, hará una copia de este archivo pero con la
terminación "X".
3) Escribir un programa que ponga el nombre del usuario en pantalla. El programa hará
tres preguntas. La primera debe preguntar el nombre y desplegarlo, la segunda y tercera
preguntas pedirán el apellido paterno y materno finalmente se desplegará todo el
nombre en una sola línea.
4) Realizar un programa en shell que utilice redirecciones ( e.g. >, >>, <, <<) para crear
un archivo que contenga la siguiente información:
Fecha de hoy
Directorio de trabajo
Lista de quiénes están en el sistema
5) Escribir un programa que simule el comando "cp". (utilizando "cat"), deberá pedir el
nombre del archivo original y el nombre del archivo donde copiará el contenido.
6) Hacer un programa que ordene las cuentas del archivo "etc/passwd", el programa
deberá preguntar si el ordenamiento se hará por nombre de usuario o número de usuario.
La salida se dará en un archivo que se llame cuentasord.
7) Escribir un programa llamado "rmarch" el cual preguntará al usuario un nombre de
archivo repetidamente. Si el usuario responde con un <retorno>, el programa termina
(usar el comando break). si el usuario responde con un nombre de archivo, y el archivo
existe, "rmarch" desplegará el número de caracteres en el archivo y preguntará al
usuario si el archivo debería borrarse. Si el aro no existe, el programa responderá con un
mensaje que lo indique y preguntará por el siguiente nombre de archivo. Usar el
comando continúe para lograr esto. Si el usuario responde con una "s" o "S", el
programa borrará el archivo. Si el usuario responde con cualquier otra cosa, el programa
no borrará el archivo y preguntará el nombre del siguiente archivo.
8) Escribir un programa en shell llamado "menu5>", que acepte un solo argumento, el
cual debe ser un número entre 1 y 5. Debe imprimir un mensaje diferente en respuesta a
cada número, se deberá imprimir un mensaje de error si el número no se encuentra en el
rango anterior.
Descargar