







Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Asignatura: Administración de Sistemas Operativos, Profesor: Jose Manuel Sánchez Mañes, Carrera: Ingeniería Informática, Universidad: UCJC
Tipo: Apuntes
1 / 13
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!








1
2
2. Programación Shell. Contenido.
Introducción.
Redirecciones.
Variables.
Expresiones.
Instrucciones.
Sentencias.
Funciones.
Características especiales.
4
2. Programación Shell. Ejemplos 1.
$ ls –al # todo $ cd /var/log ; grep –i error * $ find /tmp /var/tmp! –user root –type f -perm +2 –print
$ vi prueba.ksh $ chmod u+x prueba.ksh $ ./prueba.ksh $ prueba.ksh
$ vi prueba.ksh #!/bin/ksh
echo "Usuario: $USER" echo "Capacidad de la cuenta en KB:" du –ks $HOME # suma total del directorio del usuario
5
2. Programación Shell. Redirecciones.
stdin, stdout y stderr.
Redirección.
Redirección de Entrada.
Redirección de Salida.
Redirección en Append.
Reutilización de descriptores.
Combinación de redirecciones.
Pipes.
Operador <<.
stdin, stdout, stderr:
Según la definición del lenguaje “C”, un comando en ejecución hereda 3 ficheros abiertos del proceso que lo invoca, que representan las funciones de entrada y salida de cada programa: Entrada estándar(0,stdin), salida estándar(1,stdout) y salida de error (2,stderr). Una sesión de trabajo, se inicia con el proceso “login” que se asigna un terminal específico (/dev/ttynn o /dev/ptynn) como terminal de sesión y lo une con el dispositivo genérico “/dev/tty”. A continuación, abre este dispositivo genérico y lo define como los descriptores 0 (entrada), 1 y 2 (salida).
Redirección:
El proceso de redirección permite hacer una copia de uno de estos ficheros especiales hacia o desde otro fichero normal. También pueden asignarse los descriptores de ficheros del 3 al 9 para abrir otros tantos archivos, tanto de entrada como de salida. El fichero especial /dev/null se utiliza para descartar alguna redirección e ignorar sus datos.
Redirección de entrada:
La redirección de entrada sirve para abrir en lectura el archivo especificado asignándole el número de descriptor de fichero que se desee. Se usa la entrada estándar cuando el valor del descriptor es 0 o éste no se especifica. El formato genérico de la redirección de entrada es [N] Fichero Abre el fichero de descriptor N para escritura. Si no se especifica el número de descriptor se usa la salida estándar (N=1). Si el fichero existe, se borran los datos que contenga; en caso contrario, se crea.
Redirección en Append:
Existe un formato especial de redirección de salida que no borra el contenido del fichero de salida si existe, sino que lo abre en append y los datos que escribe se añaden al fichero. El formato es [N]>> Fichero. Su funcionamiento es como en el primer caso, pero se abre el fichero para añadir datos al final, sin borrar su contenido.
Reutilización de Descriptores:
El formato para reutilizar descriptores es [N]>&M_._ Duplica el descriptor de entrada M en N (N=0, por defecto). Reutiliza un descriptor de fichero ya abierto de salida como otro descriptor. De esta forma se unen las escrituras de los dos ficheros en un único descriptor de fichero.
Combinación de redirecciones:
Pueden combinarse más de una redirección sobre el mismo mandato o grupo de mandatos, interpretándose siempre de izquierda a derecha.
Pipes:
Pipe es una función que permite utilizar la salida normal de un programa como entrada de otro, por lo que suele usarse en el filtrado y depuración de la información, siendo una de las funciones más potentes de la programación con intérpretes Unix. Pueden combinarse más de un pipe en la misma línea de comandos, usando el siguiente formato: Comando1 | Comando2 ... Todos los dialectos Unix incluyen gran variedad de filtros de información ( head, tail, grep, cut, uniq, sort, wc, find, sed, awk). La orden tee es un filtro especial que recoge datos de la entrada estándar y lo redirige a la salida normal y a un fichero especificado, tanto en operaciones de escritura como de append.
Operador <<:
El operador “[N]<< string” indica que los datos relativos al fichero de descriptor N se encuentran a continuación del salto de línea y acaban en el momento que se encuentre la cadena “string”.
7
2. Programación Shell. Variables.
Definición.
Asignación.
Ámbito de las variables.
Variables locales.
Variables de entorno.
Parámetros de posición.
Variables especiales.
Configuración del entorno.
Asignación ` (comilla inversa).
Definición: Al contrario que en los lenguajes de programación, ksh no hace distinción en los tipos de datos de las variables; son esencialmente cadenas de caracteres, aunque, según el contexto, también pueden usarse con operadores de números enteros y condicionales. El nombre de una variable puede ser cualquier cadena de caracteres. Sin embargo hay que tener cuidado con los caracteres especiales ($, &, >, <, (, ), {, }, etc) porque pueden hacer muy difícil recoger el valor de la variable. Suele usarse la convención de definir las variables en mayúsculas para distinguirlas fácilmente de los mandatos y funciones, ya que en Unix las mayúsculas y minúsculas se consideran caracteres distintos. Asignación: Una variable ksh se define o actualiza mediante operaciones de asignación, es decir, no hay que predefinirla sino que se crea la primera vez que se le asigna un valor. Se hace referencia a su valor utilizando el símbolo del dólar delante de su nombre. Ámbito de las variables: Las variables del intérprete ksh pueden considerarse desde los siguientes puntos de vista: Las variables locales son definidas por el usuario y se utilizan únicamente dentro de un bloque de código, de una función determinada o de un shell-script. Las variables de entorno son las que afectan al comportamiento de los comandos y al de la propia shell. Los parámetros de posición son los recibidos en la ejecución de cualquier programa o función. Las variables especiales son aquellas que tienen una sintaxis especial y que hacen referencia a valores internos del actual shell-script. Variables locales: Las variables locales son definidas para operar en un ámbito reducido, ya sea en un programa, en una función o en un bloque de código. Fuera de dicho ámbito de operación, la variable no tiene un valor preciso. Una variable tiene un nombre único en su entorno de operación. El formato ${ Variable } se utiliza en cadenas de caracteres donde se puede prestar a confusión o en procesos de sustitución de valores. Variables de entorno: El usuario puede actualizar y añadir variables exportando sus valores al entorno del intérprete (instrucción export ), lo que afectará también a todos los procesos hijos generados por ella. El administrador puede definir variables de entorno estáticas para los usuarios del sistema (IFS, SHELL, PWD, OLDPWD, PPID, HOME, LOGNAME, PATH, LANG, EDITOR, TERM, PS1 ... PS4, FUNCNAME, LINENO, HOST). L a variable PATH, se encarga de guardar la lista de directorios con ficheros ejecutables. Si no se especifica el camino exacto de un programa, el sistema busca en los directorios especificados por PATH, siguiendo el orden de izquierda a derecha. El carácter separador de directorios es dos puntos. El administrador del sistema debe establecer los caminos por defecto para todos los usuarios del sistema y cada uno de éstos puede personalizar su propio entorno. Parámetros de posición: Los parámetros de posición son variables especiales de ksh que contienen los valores de los parámetros que recibe un programa o una función. El número indica la posición de dicho parámetro en la llamada al shell-script. El 1er parámetro se denota por la variable $1, el 9º por $9 y a partir del 10º hay que usar la notación ${ Número }. El mandato interno shift desplaza la lista de parámetros hacia la izquierda. El nombre del programa se denota por la variable $0. Variables especiales: Las variables especiales informan sobre el estado del proceso, son tratadas y modificadas directamente por la shell, por lo tanto, son de sólo lectura. $$ Identificador del proceso (PID). $* Cadena con el contenido completo de los parámetros recibidos por el programa. $@ Como en el caso anterior, pero trata cada parámetro como un palabra diferente. $# Número de parámetros. $? Código de retorno del último mandato. $! Último identificador de proceso ejecutado en segundo plano. $_ Valor del último argumento del comando ejecutado previamente. Configuración del entorno: La shell de cada usuario tiene un entorno de operación propio, en el que se incluyen una serie de variables de configuración. El administrador del sistema asignará unas variables para el entorno de ejecución comunes a cada grupo de usuarios, o a todos ellos, mientras que cada usuario puede personalizar algunas de estas características en su perfil de entrada, añadiendo o modificando las variables del entorno. Para crear el entorno global, el administrador crea un perfil de entrada común para todos los usuarios (/etc/profile), donde, entre otros cometido, se definen las variables del sistema. El proceso de conexión del usuario se completa con la ejecución del perfil de entrada personal del usuario ($HOME/.profile). **Asignación (comilla inversa):** Se puede igualar una variable a un comando delimitado por el operador especial (comilla inversa), que en el teclado español sale pulsando la tecla de acento grave seguido de un espacio. Con esta operación se asigna todo el resultado que el comando escriba en la salida estándar a esta variable. Es decir, asigna los valores de la salida estándar a una variable. También se puede utilizar este operador en cualquier lugar de un shell script donde se podría utilizar una cadena.
8
2. Programación Shell. Ejemplos 3.
$ VAR1="Esto es una prueba” $ VAR2= $ echo $VAR $ echo "VAR2=$VAR2“
$ ERR= $ echo ERR $ echo $ERR $ echo ${ERR} $ echo "Error ${ERR}: salir“
$ grep "^$1:" /etc/passwd $ grep ":$GID:" /etc/group | cut -f1 -d:
10
2. Programación Shell. Expresiones.
Expresiones numéricas de comparación.
Expresiones de comparación con cadenas.
Instrucción test.
Caracteres especiales.
Ejecución de varias órdenes.
Expresiones numéricas de comparación:
Los operadores de comparación numérica establecen comparaciones entre cadenas, convirtiendolas a números enteros. N1 -eq N2 = igual N1 -ne N2 = distinto N1 -lt N2 = menor que N1 -gt N2 = mayor que
Expresiones de comparación con cadenas:
Los siguientes operadores trabajan con cadenas de caracteres: Cad1 = Cad2 -> Igual Cad1 != Cad2 -> distinto [-n] Cad La cadena no es nula (su longitud no es 0). -z Cad La longitud de la cadena es 0.
Instrucción test:
La instrucción test, nos permite evaluar expresiones y devolver al sistema verdadero o falso para poder utilizarlo en if, while, etc. Tiene una forma abreviada, que consiste en rodear la expresión con corchetes en lugar de poner “test expresión”. test recibe una expresión condicional que evalúa y dependiendo de que sea cierta o falsa termina con código de retorno 0 (cuando la condición es falsa) u otro valor (cuando la expresión es verdadera). Admite cualquier expresión de las explicadas anteriormente. Se pueden unir expresiones con los operadores: -a Operador lógico AND. -o Operador lógico OR. Y agrupándolas por medio de paréntesis ( expr ).
Caracteres especiales:
Los caracteres que tienen un significado especial para la shell son: # *? [ ] { } ( ) < > " ´ ' & ; $ •Doble comillas (") previene que sean interpretados los caracteres especiales (excepto $ y secuencias de escape tipo ANSI-C). •Comillas simples (’) anula el que cualquier caracter especial sea interpretado. •Acento grave (`) permite que se reemplace el string por el resultado del comando especificado por éste. •El “;” se usa normalmente para separar comandos. •El carácter de escape (\Carácter) permite introducir caracteres especiales. Como último carácter de la línea, sirve para continuar la ejecución de una orden en la línea siguiente.
Ejecución de varias ordenes:
•Ejecución secuencial: “comando1; comando2” •Ejecución condicional: OR: “comando1 || comando2”. AND: “comando2 && comando2” •Agrupación de comandos: Agrupación con paréntesis: se crea una nueva shell. Agrupación con llaves: lo gestiona la misma shell (se conservan variables creadas, directorio, etc).
11
2. Programación Shell. Ejemplos 4.
$ let a= $ let b=$a+3* $ echo "a=$a, b=$b" $ let c=$b/($a+3) $ let a+=c-- $ echo "a=$a, c=$c" $ let CTE=$b/$c, RESTO=$b%$c $ echo "Cociente=$CTE, Resto=$RESTO“
$ if [ -f /dev/rd0 -a -f /etc/rd1 ] then
$ if [ -d "$midir" ] then
$ if [ -e /proc/lvm -a -x /sbin/vgchange -a -f /etc/lvmtab ] then
$ if [ $RESULT -gt 0 -a -x /sbin/raidstart ] then
13
2. Programación Shell. Práctica 2.
Crear un shell script que reciba el nombre de un usuario y muestre:
Última fecha: 2 de noviembre de 2006.