lundi 18 février 2013

PROGRAMAS DE COMANDOS linux 2013

PROGRAMAS DE COMANDOS....................................................................................................................60
11.1 INTRODUCCIÓN DE COMENTARIOS.............................................................................................................61
11.2 VARIABLES DEL SHELL ..............................................................................................................................61
11.3 COMANDO ECHO.......................................................................................................................................61
11.4 PARÁMETROS DE LOS FICHEROS DE COMANDOS ........................................................................................62
11.5 OTRAS POSIBILIDADES DE LOS FICHEROS DE COMANDOS ...........................................................................63
11. PROGRAMAS DE COMANDOS
El sistema operativo Linux, al igual que otros sistemas operativos, permite realizar programas de
comandos, esto es, programas constituidos por distintos comandos que podrían teclearse
interactivamente uno por uno en una terminal, pero que es muchas veces más cómodo agruparlos en
un fichero, y ejecutarlos con una sola instrucción posteriormente.
Los comandos de Linux pueden ser externos - que implican la creación de un nuevo proceso, cuyo
código está en /bin o /usr/bin- e internos - cuyo código está incluido en el del intérprete shell que
los ejecuta.
Una cierta primera forma de agrupar comandos la ofrece Linux por medio del carácter ;. Por
ejemplo, tecleando el comando,
date; ls; who
el ordenador ejecutará sucesivamente los comandos date, ls y who. También podría crearse con un
editor de textos un fichero llamado comandos que contuviera las líneas siguientes:
date
ls
who
Para ejecutar este fichero de comandos puede teclearse,
sh comandos
o bien convertir el fichero comandos en directamente ejecutable por medio del comando chmod en
la forma,
chmod a+x comandos
de modo que el programa de comandos comandos puede ejecutarse simplemente tecleando su
nombre,
comandos
Los comandos sh comandos y comandos no son enteramente equivalentes. Así, el primero de ellos
exige que el fichero comandos esté en el directorio de trabajo, mientras que el segundo sólo exige
que el fichero comandos esté en uno de los directorios de búsqueda de comandos especificados en
la variable PATH.
Cuando se ejecuta un fichero de comandos Linux abre lo que se llama un nuevo shell, es decir un
nuevo entorno para la ejecución de los comandos. Para que las variables del caparazón original
conserven su valor en el nuevo caparazón es necesario prepararlas con la sentencia export antes de
abrir el nuevo shell. Por ejemplo, como consecuencia de lo que se acaba de decir, si en el interior de
un fichero de comandos se cambia de directorio con el comando cd, al acabar la ejecución de dicho
fichero volveremos automáticamente al directorio inicial.
Capítulo 11: PROGRAMAS DE COMANDOS página 61
11.1 Introducción de comentarios
Para introducir líneas de comentarios en un programa de comandos basta comenzar dichas líneas
con el carácter #. Hay que tomar la precaución de que este carácter no sea el primer carácter del
fichero de comandos, porque entonces el ordenador interpreta que el programa está escrito en Cshell
(una variante especial de UNIX desarrollada en la Universidad de Berkeley) y el resultado es
imprevisible. Puede ser buena práctica comenzar todos los ficheros de comandos con una línea en
blanco.
11.2 Variables del shell
UNIX permite definir variables en un fichero de comandos en la forma,
USER=/mnt/mecan/juanto
TERM=hp2392
...
Es una práctica habitual el utilizar nombres con letras mayúsculas para las variables del caparazón.
Para recuperar el valor de una variable hay que precederla con el carácter . Por ejemplo, utilizando
en otra parte del programa TERM, en dicho lugar se sustituiría TERM por su valor, esto es, hp2392.
El shell del Linux tiene definidas para cada usuario unas variables estándar. Para averiguar cuáles
son basta teclear el comando siguiente,
set
Para definir otras variables propias de cada usuario puede utilizarse el fichero .profile, que es un
fichero de comandos propio de cada usuario que se ejecuta automáticamente al hacer el login.
Para definir variables que contengan espacios en blanco deben encerrarse entre caracteres (') o ("),
como por ejemplo,
FECHA="31 de Diciembre de 1986"
más adelante se verá la diferencia entre el carácter (') y el carácter (").
11.3 Comando echo
El comando echo imprime un determinado texto en la terminal. Un ejemplo de utilización de dicho
comando puede ser el siguiente:
echo Me gusta el sistema operativo UNIX
El comando echo es de gran utilidad en los ficheros de comandos. Cuando el texto que se desea
escribir en la terminal contiene alguno de los caracteres especiales de UNIX ( * ? [ ] > >> < & ; \ ' )
hay que tomar precauciones especiales desconectando su significado. Una forma de hacerlo es
precediendo dicho carácter con la barra invertida (\). Así, para escribir mediante el comando echo
tres asteriscos, utilizaríamos
echo \*\*\*
ESIISS: Aprenda Linux como si estuviera en Primero página 62
si no utilizáramos la barra invertida, el asterisco se interpretaría como un carácter de sustitución y se
imprimiría el nombre de todos los ficheros del directorio.
Otra forma de anular el significado de los caracteres especiales es encerrando el texto a escribir
mediante comillas (") o entre apóstrofos normales ('). Los apóstrofos (') anulan el significado de
todos los caracteres comprendidos entre ellos. Así pues, el triple asterisco lo podríamos escribir con
el comando,
echo '***'
Las comillas (") son menos restrictivas, y anulan el significado de todos los caracteres excepto los
tres siguientes: ( ` \). Esto es muy importante porque si VAR es el nombre de una variable, y VAR
aparece en un comando echo entre apóstrofos se escribe VAR, mientras que si aparece entre
comillas se escribe el valor de la variable, al cumplir el carácter su cometido.
El carácter (\) tiene otros significados, además del ya visto de anular el significado especial de otros
caracteres. Así, sirve como indicador de que un comando continúa en la línea siguiente. Cuando se
utiliza en la definición interactiva de un comando, en la línea siguiente aparece el prompt
secundario (>), que indica que se debe seguir tecleando el comando. Cuando en un comando echo
aparecen los caracteres (\c) y (\n) quiere decir, respectivamente, que no se cambie de línea y que se
salte de línea, al escribir por la pantalla.
El carácter apóstrofo inverso o acento grave (`) tiene también un significado especial. Cuando en un
comando echo aparece el nombre de otro comando encerrado entre apóstrofos inversos (por
ejemplo, `date`, `who`, `ls`, ...), el nombre de dicho comando se sustituye por el resultado que
genera al ejecutarse interactivamente. Un ejemplo podría ser el siguiente:
echo "Los usuarios del sistema son \n\n `who`"
El lector puede hacer la prueba y observar el resultado correspondiente.
11.4 Parámetros de los ficheros de comandos
A los ficheros de comandos pueden pasárseles como parámetros un conjunto de una o más
variables. Dentro del fichero de comandos estas variables o parámetros se conocen con los nombres
0, 1, 2, ..., 9. La variable 0 representa el propio nombre del fichero de comandos, y 1, 2, ..., 9 son los
nombres de los parámetros propiamente dichos
Vamos a comenzar viendo un ejemplo muy sencillo de programa de comandos al que se le pasa sólo
una variable o parámetro. El comando de borrar de Linux rm no confirma la operación de borrado
si no se le pone la opción (-i). Esto es peligroso porque uno fácilmente puede olvidarse de teclear
dicha opción y borrar lo que no quería borrar. Vamos a crear un fichero de comandos llamado del
que incluya dicha opción. Dicho fichero podría estar formado por,
echo "Quiere borrar el fichero 1?"
rm -i 1
Después de darle a este fichero el correspondiente permiso de ejecución con el comando chmod,
podríamos borrar con confirmación el fichero file tecleando,
del file
Capítulo 11: PROGRAMAS DE COMANDOS página 63
Dentro del fichero de comandos, 0 valdría del y 1 valdría file.
Un programa de comandos más complicado y que utiliza dos parámetros podría ser el contenido en
el fichero cambio, que intercambia el nombre de dos ficheros:
mv 1 ficheropufo
mv 2 1
mv ficheropufo 2
Este fichero se ejecutaría en la forma,
cambio file1 file2
En este ejemplo 0 es cambio, 1 es file1 y 2 es file2. En realidad a un fichero de comandos se le
pueden pasar todos los argumentos que se deseen, aunque sólo hay nombre específico para los
nueve primeros (más el propio nombre del comando). El número de argumentos que se le pasa está
contenido en la variable #. La variable * contiene el conjunto de todos los parámetros. Un nuevo
ejemplo puede aclarar algo más este punto.
Si el programa del que hemos hecho previamente lo hubiéramos utilizado en la forma:
del *.f
teóricamente debería de borrar, con confirmación, todos los ficheros Fortran del directorio. En la
práctica no es así, porque (*.f) no representa un único argumento sino muchos argumentos (todos
los ficheros Fortran del directorio). Como resultado sólo se borra el primer fichero Fortran. Para
borrar todos e indicarnos además cuántos ficheros hay, el fichero del podría estar compuesto por los
siguientes comandos:
echo "Hay # programas Fortran \n"
rm -i *
El comando shift hace posible utilizar y distinguir parámetros que están más a la derecha del
noveno lugar en la llamada al programa de comandos. En efecto, cuando se llama al comando shift,
2 se convierte en 1, 3 en 2, etc, y lo que hubiera sido 10 en 9, con lo cual ya se puede referenciar. El
comando shift deja inalterado 0 y puede utilizarse tantas veces como se desee.
11.5 Otras posibilidades de los ficheros de comandos
Los ficheros de comandos tienen muchas más posibilidades que las que se han apuntado en esta
Introducción: pueden leer variables, preguntar por la existencia de un fichero y por si es ejecutable o
no, y admiten construcciones lógicas del tipo IF, DO, DO WHILE, etc. Para utilizar estas
posibilidades acudir al manual correspondiente.

Aucun commentaire:

Enregistrer un commentaire