Universidad Nacional de la Matanza Ingeniería en Informática Cátedra de Sistemas Operativos Año 2008 Departamento de Ingeniería e Investigaciones Tecnológicas Cátedra de Sistemas Operativos Jefe de Cátedra: Jefe de trabajos prácticos: Autor: Fabio Rivalta Fernando Boettner Ramiro de Lizarralde Año: Revisión: 2008 2015 Guía sobre Shell Scripts Página 1 de 7 Universidad Nacional de la Matanza Cátedra de Sistemas Operativos Ingeniería en Informática Año 2008 Script Archivo de texto con una secuencia de comandos, que es ejecutada paso a paso por un programa que sepa interpretar esos comandos. Se llama comúnmente “intérprete de comandos”. Ejemplos: Shell (sh), Bourne Shell (bsh), Bourne Again Shell (bash), Korn Shell (ksh), C Shell (csh), Command.com (intérprete de DOS), AWK, PHP, PEARL (aunque estos últimos tres no son intérpretes propiamente dicho, pero sí son lenguajes dinámicos y/o interpretados que pueden funcionar como un shell script). Ejecución del script $sh [parámetros del sh] nombre_script [parámetros del script] $nombre_script [parámetros del script] Previamente, se le deben dar los permisos necesarios, a través del comando chmod. Magic number Especifica con qué intérprete se debe ejecutar el script. Debe estar sí o sí en los dos primeros caracteres del archivo del script. #! /bin/sh #! /bin/ksh #! /bin/awk Parámetros del Script Parámetros, del 1 al 9 $1 $2 … $9 Si hay más de 9 {$nn} shift [n] Variables Las variables son dinámicas, así que no tienen tipo de dato definido ni necesitan declaración. Se crean con la primer referencia a la misma. Por lo tanto es conveniente inicializarlas con un valor del tipo de datos con que se la quiere utilizar. var=valor echo $var Variables especiales $0 nombre del archivo ejecutable $* línea completa de la llamada $@ lista de todos los parámetros ($* menos $0) $# cantidad de parámetros $? Valor de retorno del último comando ejecutado $$ Process ID (PID) Página 2 de 7 Universidad Nacional de la Matanza Cátedra de Sistemas Operativos Ingeniería en Informática Año 2008 Estructuras de control y Comandos de Shell if condiciones; then comandos; [elif condiciones; then comandos;] [else comandos;] fi for var in word; do comandos; done while condiciones; do comandos; done until condiciones; do comandos; done case var in pattern1) comandos;; pattern2) comandos;; esac test expresión [[ expresión ]] exit read var echo string set opciones unset opciones trap (manejo de señales) wait (manejo de procesos) sleep n getopts. Manejo básico de parámetros del script, no soporta parámetros largos en formato GNU (--help) Expresiones ( expresión ) ! expresión Página 3 de 7 Universidad Nacional de la Matanza Ingeniería en Informática Cátedra de Sistemas Operativos Año 2008 expresión1 && expresión2 expresión1 || expresión2 Funciones Definición: [function] nombre_función () { comandos [return n] } Llamada: nombre_función [lista de parámetros] Parámetros de la función Se referencian (dentro del scope de la función) con $n de la misma forma que los parámetros del script. Entrecomillado Comillas simples verticales ' : texto fuerte. En este string el Shell no realiza reemplazos de variables. Ejemplo: x=234 y='790$x' echo $y 790$x Comillas dobles " : texto débil. En este string el Shell realiza reemplazos de variables. Ejemplo: x=234 y="790$x" echo $y 790234 Comillas francesas ` : ejecución de comandos. En este string el Shell primero realiza reemplazos de variables y luego ejecuta el comando, guardando la salida en la variable. Ejemplo: FechaActual=`date` dir=`ls –la` for i in `ls –1` Caracter de escape: \ Nota: No hay operador de concatenación de strings, simplemente se escriben las cadenas en forma consecutiva. Página 4 de 7 Universidad Nacional de la Matanza Ingeniería en Informática Cátedra de Sistemas Operativos Año 2008 Redireccionamiento | (pipe) Redirecciona la salida de un comando a la entrada de otro Ejemplo: getent passwd | grep docentes | cut –d: -f1 | sort > arch Redirecciona salida estándar (stdout) a un archivo, truncándolo si ya existe Ejemplo: ls –l > dir.txt >> arch Redirecciona salida estándar (stdout) a un archivo, agregando al final del archivo Ejemplo: date > dir.txt ls –l >> dir.txt 2> arch Redirecciona la salida de errores (stderr) Ejemplo: find /proc -name sys 2> /dev/null 2>&1 Redirecciona la salida de errores (stderr) al mismo archivo que la salida estándar Ejemplo: find /proc -name sys > busca.txt 2>&1 < arch Redirecciona el contenido del archivo a la entrada (stdin), tal como si se hubiera escrito por teclado Ejemplo: echo google.com > buscar.txt echo gmail.com >> buscar.txt echo yafuiste.com.ar >> buscar.txt nslookup < buscar.txt Nota: archivo puede ser cualquier tipo de archivo, por ejemplo /dev/null, un fifo, una terminal, etc. Página 5 de 7 Universidad Nacional de la Matanza Ingeniería en Informática Cátedra de Sistemas Operativos Año 2008 Comandos externos al Shell Lista de algunos comandos que no pertenecen a Shell, pero se utilizan intensivamente en la programación de Shell scripts. ls Lista contenido de un directorio grep Busca expresiones en un archivo echo Devuelve a stdout el string pasado por parámetro cat Concatena archivos y los muestra en la salida a stdout cut Corta cadenas wc Cuenta líneas o caracteres find Busca archivos uniq Elimina duplicados sort Ordena una lista head Retorna las líneas al comienzo de un archivo tail Retorna las líneas al final de un archivo date Devuelve/setea la fecha y hora more Paginación de salida less Paginación de salida pwd Devuelve el directorio actual nslookup Realiza una consulta a un DNS netstat Muestra el estado de las conexiones de red ping Envía paquetes ICMP a un host ifconfig Muestra la configuración de las interfaces de red ps Lista los procesos en ejecución top Lista los procesos en ejecución tar Empaqueta archivos gzip Comprime archivos gunzip Descomprime archivos awk Filtro complejo (ver apunte de la cátedra) sed Manipulación de texto ssh Terminal para ingresar remotamente a un equipo ftp Transfiere archivos entre equipos remotos scp/sftp Transfiere archivos entre equipos remotos en forma segura passwd Cambia el password del usuario su Cambia la sesión actual a otro usuario sudo Ejecuta un comando como si lo hiciera el usuario root man Muestra ayuda sobre comandos, archivos de configuración, funciones de programación C, etc. crontab Agenda la ejecución de tareas Página 6 de 7 Universidad Nacional de la Matanza Cátedra de Sistemas Operativos Ingeniería en Informática Año 2008 getopt Manejo avanzado de parámetros del script, soporta parámetros largos GNU (--help) file Analiza el tipo de archivo nohup Lanza un proceso en forma de demonio, para que no se cierre al finalizar el shell kill Envío de señales a procesos. La señal por default es SIGTERM para finalizar el proceso. Soporta Jobs, se usa con %n indicando el nro de job, en vez del PID del proceso. Página 7 de 7