Algunas variables globales en shell
$# : Número de parámetros de la línea de
comandos
${n} : Parámetro n-ésimo, $0 es el nombre del
script. Usted puede omitir los paréntesis si se trata de un único
dígito.
$? : Estado de término de último comando, Ojo si el
comando es exitoso se retorna 0, en otro caso distinto de de 0. Las
expresiones
consultan normalmente si el comando es exitoso o no. Debería
pensarse
como estatus de error al término del programa. El valor cero
implica no
error.
$* : lista de argumentos de comando empezando por $1
$! : pid del último proceso ejecutado.
$$ : pid del proceso actual.
Uso
de comillas: Comilla simple ' se usa para denotar una
secuencia de caracteres literales. No hay sustitución de variables
dentro de ellas. Ejemplo echo 'PID=$$' se mostrará tal cual. La Comila
doble " se usa cuando deseamos sustituir variables o caracteres
especiales. Ejemplo echo "PID=$$" muestra por ejemplo PID=1643. También
existe la comilla simple invertida `. Ésta será sustituida por el
resultado arrojado por su contenido entendido como un comando. Ejemplo
echo `date` mostrará la salida del comando date. En las versiones
actuales de shell como bash se prefiere usar $(comando) en lugar de
`comando`.
Este programa nos informa cuando un usuario específico se ha
logeado en la máquina. Tiene un argumento, la cuenta por la que
se espera. notar su primera línea iniciada con #!
Este programa entrega la lista de usuario actualmente logeados,
ordenada por sus login. Este usa el archivo script sortout.sh.
Considerar el uso del utilitario AWK para tareas de extracción de datos.
Ex 9: Un profesor de enseñanza básica pide a usted hacer algún
(nos) programa (s) shell que le permita revisar las pruebas de su
curso. La prueba (prueba.txt) contiene un problema por línea del tipo
45*(10-8). Cada respuesta de los alumnos fue entregada en un archivo
(nombre_alumno.txt) donde hay una respuesta por línea. A usted se le
pide un programa shell (nota.sh) para ejecutarlo como:
% nota.sh prueba.txt nombre_alumno.txt
El cual retorna la nota obtenida por el alumno como el cuociente (Nro_preguntas_correctas/total_preguntas).
Ejemplo: Si la prueba fuera de dos preguntas, podríamos tener:
Contenido de prueba.txt
Contenido para un Alumno Paula_Gonzalez.txt
45*(10-8)
90
4*6+20/2
34
Considere el uso del programa bc, el cual termina al ingresar quit, ejemplo de su uso es:
agustin@agustin2005 $ bc -q
45*(10-8)
90
quit
Solución 1, 2
Ex10: Windows no diferencia entre mayúsculas y minúsculas en
nombres de archivos. Así al crear páginas web es común que éstas
funcionen bien en servidores windows pero no en servidores corriendo
sistemas operativos derivados de Unix.
Desarrolle toLower.sh, un script shell que pasa a minúscula todos los nombres de archivos bajo un directorio dado.
La ejecución del script es:
$toLower.sh <Directorio>
Por ejemplo, lo podemos correr como en $ toLower.sh .
Ayuda: Para pasar un string a mayúscula en shell usted puede declararlo usando:
declare -u nombre_de_su_variable=”Aquí lo que usted pasará a mayúscula”
declare -l nombre_de_su_variable=”Aquí lo que usted pasará a minúscula” Solución
Ex 11: En sistemas Linux podemos borrar todos los archivos *.o y
*.class bajo un directorio (ej. /home/agustin/tareas/) con la
instrucción:
$ rm -f `find /home/agustin/tareas/ -name *.class *.o`
Sin embargo cuando los archivos a borrar contienen espacios en su nombre como en “Tarea 2009.o” el comando previo falla.
Cree el script shell borrar.sh que consiga el propósito buscado incluso
con archivos con espacios en su nombre. borrar.sh acepta como argumento
el directorio bajo el cual se borrarán los archivos señalados.
Un ejemplo de ejecución es:
$ borrar.sh /home/agustin/tareas/
Solución 1, 2, 3
Por qué no
debemos fijar permisos de super usuario a en script (setuid).
Wikipedia indica: "Due to potential security issues,[3] many operating
systems ignore the setuid attribute when applied to executable shell
scripts."