ESIISS: <strong>Apr<strong>en</strong>da</strong> <strong>Linux</strong> <strong>como</strong> si estuviera <strong>en</strong> <strong>Primero</strong> página 62si no utilizáramos la barra invertida, el asterisco se interpretaría <strong>como</strong> un carácter <strong>de</strong> sustitución y seimprimiría el nombre <strong>de</strong> todos los ficheros <strong>de</strong>l directorio.Otra forma <strong>de</strong> anular el significado <strong>de</strong> los caracteres especiales es <strong>en</strong>cerrando el texto a escribirmediante comillas (") o <strong>en</strong>tre apóstrofos normales ('). Los apóstrofos (') anulan el significado <strong>de</strong>todos los caracteres compr<strong>en</strong>didos <strong>en</strong>tre ellos. Así pues, el triple asterisco lo podríamos escribir conel comando,echo '***'Las comillas (") son m<strong>en</strong>os restrictivas, y anulan el significado <strong>de</strong> todos los caracteres excepto lostres sigui<strong>en</strong>tes: ( ` \). Esto es muy importante porque si VAR es el nombre <strong>de</strong> una variable, y VARaparece <strong>en</strong> un comando echo <strong>en</strong>tre apóstrofos se escribe VAR, mi<strong>en</strong>tras que si aparece <strong>en</strong>trecomillas se escribe el valor <strong>de</strong> la variable, al cumplir el carácter su cometido.El carácter (\) ti<strong>en</strong>e otros significados, a<strong>de</strong>más <strong>de</strong>l ya visto <strong>de</strong> anular el significado especial <strong>de</strong> otroscaracteres. Así, sirve <strong>como</strong> indicador <strong>de</strong> que un comando continúa <strong>en</strong> la línea sigui<strong>en</strong>te. Cuando seutiliza <strong>en</strong> la <strong>de</strong>finición interactiva <strong>de</strong> un comando, <strong>en</strong> la línea sigui<strong>en</strong>te aparece el promptsecundario (>), que indica que se <strong>de</strong>be seguir tecleando el comando. Cuando <strong>en</strong> un comando echoaparec<strong>en</strong> los caracteres (\c) y (\n) quiere <strong>de</strong>cir, respectivam<strong>en</strong>te, que no se cambie <strong>de</strong> línea y que sesalte <strong>de</strong> línea, al escribir por la pantalla.El carácter apóstrofo inverso o ac<strong>en</strong>to grave (`) ti<strong>en</strong>e también un significado especial. Cuando <strong>en</strong> uncomando echo aparece el nombre <strong>de</strong> otro comando <strong>en</strong>cerrado <strong>en</strong>tre apóstrofos inversos (porejemplo, `date`, `who`, `ls`, ...), el nombre <strong>de</strong> dicho comando se sustituye por el resultado queg<strong>en</strong>era al ejecutarse interactivam<strong>en</strong>te. Un ejemplo podría ser el sigui<strong>en</strong>te:echo "Los usuarios <strong>de</strong>l sistema son \n\n `who`"El lector pue<strong>de</strong> hacer la prueba y observar el resultado correspondi<strong>en</strong>te.11.4 Parámetros <strong>de</strong> los ficheros <strong>de</strong> comandosA los ficheros <strong>de</strong> comandos pued<strong>en</strong> pasárseles <strong>como</strong> parámetros un conjunto <strong>de</strong> una o másvariables. D<strong>en</strong>tro <strong>de</strong>l fichero <strong>de</strong> comandos estas variables o parámetros se conoc<strong>en</strong> con los nombres0, 1, 2, ..., 9. La variable 0 repres<strong>en</strong>ta el propio nombre <strong>de</strong>l fichero <strong>de</strong> comandos, y 1, 2, ..., 9 son losnombres <strong>de</strong> los parámetros propiam<strong>en</strong>te dichosVamos a com<strong>en</strong>zar vi<strong>en</strong>do un ejemplo muy s<strong>en</strong>cillo <strong>de</strong> programa <strong>de</strong> comandos al que se le pasa sólouna variable o parámetro. El comando <strong>de</strong> borrar <strong>de</strong> <strong>Linux</strong> rm no confirma la operación <strong>de</strong> borradosi no se le pone la opción (-i). Esto es peligroso porque uno fácilm<strong>en</strong>te pue<strong>de</strong> olvidarse <strong>de</strong> tecleardicha opción y borrar lo que no quería borrar. Vamos a crear un fichero <strong>de</strong> comandos llamado <strong>de</strong>lque incluya dicha opción. Dicho fichero podría estar formado por,echo "Quiere borrar el fichero 1?"rm -i 1Después <strong>de</strong> darle a este fichero el correspondi<strong>en</strong>te permiso <strong>de</strong> ejecución con el comando chmod,podríamos borrar con confirmación el fichero file tecleando,<strong>de</strong>l file
Capítulo 11: PROGRAMAS DE COMANDOS página 63D<strong>en</strong>tro <strong>de</strong>l fichero <strong>de</strong> comandos, 0 valdría <strong>de</strong>l y 1 valdría file.Un programa <strong>de</strong> comandos más complicado y que utiliza dos parámetros podría ser el cont<strong>en</strong>ido <strong>en</strong>el fichero cambio, que intercambia el nombre <strong>de</strong> dos ficheros:mv 1 ficheropufomv 2 1mv ficheropufo 2Este fichero se ejecutaría <strong>en</strong> la forma,cambio file1 file2En este ejemplo 0 es cambio, 1 es file1 y 2 es file2. En realidad a un fichero <strong>de</strong> comandos se lepued<strong>en</strong> pasar todos los argum<strong>en</strong>tos que se <strong>de</strong>se<strong>en</strong>, aunque sólo hay nombre específico para losnueve primeros (más el propio nombre <strong>de</strong>l comando). El número <strong>de</strong> argum<strong>en</strong>tos que se le pasa estácont<strong>en</strong>ido <strong>en</strong> la variable #. La variable * conti<strong>en</strong>e el conjunto <strong>de</strong> todos los parámetros. Un nuevoejemplo pue<strong>de</strong> aclarar algo más este punto.Si el programa <strong>de</strong>l que hemos hecho previam<strong>en</strong>te lo hubiéramos utilizado <strong>en</strong> la forma:<strong>de</strong>l *.fteóricam<strong>en</strong>te <strong>de</strong>bería <strong>de</strong> borrar, con confirmación, todos los ficheros Fortran <strong>de</strong>l directorio. En lapráctica no es así, porque (*.f) no repres<strong>en</strong>ta un único argum<strong>en</strong>to sino muchos argum<strong>en</strong>tos (todoslos ficheros Fortran <strong>de</strong>l directorio). Como resultado sólo se borra el primer fichero Fortran. Paraborrar todos e indicarnos a<strong>de</strong>más cuántos ficheros hay, el fichero <strong>de</strong>l podría estar compuesto por lossigui<strong>en</strong>tes 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 <strong>de</strong>recha <strong>de</strong>lnov<strong>en</strong>o lugar <strong>en</strong> la llamada al programa <strong>de</strong> comandos. En efecto, cuando se llama al comando shift,2 se convierte <strong>en</strong> 1, 3 <strong>en</strong> 2, etc, y lo que hubiera sido 10 <strong>en</strong> 9, con lo cual ya se pue<strong>de</strong> refer<strong>en</strong>ciar. Elcomando shift <strong>de</strong>ja inalterado 0 y pue<strong>de</strong> utilizarse tantas veces <strong>como</strong> se <strong>de</strong>see.11.5 Otras posibilida<strong>de</strong>s <strong>de</strong> los ficheros <strong>de</strong> comandosLos ficheros <strong>de</strong> comandos ti<strong>en</strong><strong>en</strong> muchas más posibilida<strong>de</strong>s que las que se han apuntado <strong>en</strong> estaIntroducción: pued<strong>en</strong> leer variables, preguntar por la exist<strong>en</strong>cia <strong>de</strong> un fichero y por si es ejecutable ono, y admit<strong>en</strong> construcciones lógicas <strong>de</strong>l tipo IF, DO, DO WHILE, etc. Para utilizar estasposibilida<strong>de</strong>s acudir al manual correspondi<strong>en</strong>te.