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