Sei sulla pagina 1di 41

4party

Taller Shell, comandos y programacin

Comandos linux unix y programacin shell


Documento de la charla de Iigo Tejedor & Pello ltadill

http!""4party#cuatro$ientos#org

ndice de contenido
%#I&T'(D)CCI*&######################################################################################################## + ,l mapa de -icheros y directorios en linux######################### ################################4 .#,l shell##################################################################################################################### #/ 0uscar ayuda############################################################################ ##############################/ +#1u2a de comandos##################################################################################### ##############3 Comandos 45sicos y manejo de -icheros####################################### ########################3 Comandos de administracin! usuarios, procesos, 6ernel############################ #########7 Comunicaciones############################################################################################ ########%8 Comunicacin entre procesos################################################ ##############################%. 'edireccin de entrada"salida######################################################### #####################%. Compresin de -icheros y directorios##################################################### ##############%+ ccediendo a dispositi$os y particiones############################################################# ##%4 4#)sando el shell###################################################################### ################################%3 9as -lechas################################################################################# ###########################%3 ,l historial de comandos###################################################################################### #%3 'elleno de comandos y -icheros################################################################## #########%: Comodines################################################################################# ###########################%; ,jecucin de comandos##################################################################### ###################%; Comandos en segundo plano########################################### ################################%7 /#Programacin de scripts de shell################################################# #########################.. < %

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

Introduccin ################################################################################# ########################.. =aria4les################################################################################################################ .+ arrays################################################################################## ##############################.4 (tros usos############################################################################ #############################.4 (peraciones######################################################################################### #################./ ritm>ticas###################################################################################### ##################./ 9gicas############################################################################### ###############################.3 Condicionales############################################################################################### #########.: case################################################################################################ ###################+8 Iteraciones############################################################################## ##############################+% -or################################################################################################### ###################+% ?hile################################################################################################## ################+. until##################################################################################### ##############################++ select###################################################################################################### ###########+4 @unciones######################################################################################### #####################+4 9i4rer2as################################################################################# ###############################+/ Seales############################################################################################################## ####+3 Colores######################################################################################## ##########################+3 3#0i4liogra-2a, re-erencias y enlaces################################################### #####################+;

<

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

1.INTRODUCCIN
,ste gu2a no es para leer de -orma seguida, este gu2a pretende ser una re-erencia de comandos )nix"9inux y de programacin de scripts de shell Aue se pueda consultar en cualAuier momento# &o pretende ser una gu2a exhausti$a, sino una re-erencia Aue sir$a como recordatorio de los comandos m5s utiliBados# CD Au> es 9inuxE 9os sistemas operati$os del tipo 9inux esta -ormado por procesos y -icheros# D no hay nada m5s# 9os dispositi$os como el disco, el cdrom, la pantalla, esta representado como un -ichero en el sistema linux, dentro de "de$# 9os soc6ets de comunicacin son -icheros# 9os directorios son -icheros# 9os -icheros son -icheros#

<

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

El mapa de ficheros y directorios en linu Fay directorios Aue pueden cam4iar segun la distri4ucion Aue sea# 9as de linux se parecen 4astante, pero en general tienen lo mismo# " G<!"in ! los 4inarios H S 4asicos como! ls, cd, p?d, cp, rm G<!"oot ! archi$os de arranAue, imagen de 6ernel# G<!cdrom ! punto de montaje del cdrom G<!etc ! con-iguracion# Todas las con-iguraciones Ired,scripts de inicio,-ire?all,usuariosJ G<<<<<!mail! ! con-iguracion de sendmail G<<<<<!rc.d! ! -icheros con scripts de inicio de sistema G<<<<<!sysconfi#! ! con-iguracion de sistema Ired,rutas,inter-acesJ G<!de$ ! todos los dispositi$os de sistema Ipantalla,raton,impresora,disco duroJ representados por un -ichero G<!home ! directorios particulares de los usuarios G<!li" ! li4rerias de sistema, modulos de 6ernel G%!lost&found ! directorio en el Aue se guarda contenido perdido tras un cheAueo de disco G<!mnt ! punto de montaje IopcionalJ para particiones locales, remotas In-sJ,## G<!proc ! sistema de -icheros Aue re-leja el estado y con-iguracion del sistema G<!s"in ! 4inarios 4asicos Aue in-luyen en con-iguraciones I-ire?all, rutas,J de 6ernel G<!usr ! 4inarios de ser$idores, programas, manuales, documentos, etc Ieste ocupa el Aue masJ G<!opt ! 4inarios opcionales o programas Aue no se instalan desde el principio# G<!root ! directorio home de superusuario# G<!tmp ! directorio temporal, utiliBado para guardar sesiones, soc6ets, etc## G<!$ar ! directorio en el Aue se guarda in-ormacion $aria4le! logs, 00DD Ipostgres, mysAlJ G<<<<<!lo#! ! todos los logs de sistema y ser$idores G<<<<<!li"!p#s'l! ! postgres G<<<<<!li"!mys'l! ! mysAl G<<<<<"spool!m'ueue! ! cola de correo del ser$idor Ientregas sendmailJ G<<<<<!spool!mail! ! 4uBones de correo

,l mapa de -icheros y directorios en linux < ,l mapa de -icheros y directorios en linux 4

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

(.El shell
l entrar en un 9inux en modo consola estamos usando un shell o interprete de comandos# )n shell no es m5s Aue un programa Aue le -acilita al usuario interactuar con el sistema operati$o! administrar el sistema, programar, crear todo tipo de contenidos de texto, etc### para hacer todo eso el usuario de4e utiliBar una serie de comandos Aue le permiten manipular -icheros, procesos, etc### ,n los sistemas Kindo?s el shell es un entorno $isual intuiti$o y -5cil de utiliBar, aunAue tam4i>n tiene otro shell disponi4le, una herencia del sistema HS<D(S Aue no ha e$olucionado mucho# ,n 9inux disponemos de multitud de entornos $isuales para elegir, pero la gran di-erencia respecto a Kindo?s es Aue en 9inux el entorno gr5-ico no es m5s Aue un programa m5sL es algo opcional Aue podemos lanBar desde un shell o int>rprete de comandos# 9a otra di-erencia importante es Aue el shell de linux es una herramienta muy poderosa# ,xisten distintos interpretes de comandos en el mundo )nix! csh, 4ash, tsh, 6sh,## pero sal$o peAueas di-erencias todos son parecidos# ,n este documento partimos so4retodo de 4ash., ya Aue esta muy extendido a tra$>s de 9inux#

)uscar ayuda
Todos los comandos tienen ayuda so4re sus opciones y m5s de una -orma de llegar a esa ayuda! man comando ! a tra$>s de man accedemos a la p5gina de manual de cualAuier programa# ,l manual de comandos nos da T(D la in-ormacin de un comando e incluso al -inal nos sugiere otros comandos similares o relacionados# ,s la -orma cl5sica de acceder a la ayuda extendida aunAue para los usos m5s -recuentes de comandos siempre se puede usar opciones m5s simples Aue pueden $ariar de un comando a otro!

comando <h comando Mhelp comando <E in-o comand

,l mapa de -icheros y directorios en linux < 0uscar ayuda

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

*.+u,a de comandos
Comandos "-sicos y mane.o de ficheros
cd Descripcin! Nchage dir# comando para cam4iarnos de directorio# ,jemplos! cd, cd "ruta"de"directorio, cd ##"##"directorio" p/d Descripcin! nos dice en Au> directorio nos encontramos actualmente ,jemplos! p?d ls Descripcin! Nlist# listar contenido de directorios# ,jemplos! ls, ls <l, ls <-l, ls <<color cp Descripcin! Ncopy# copiar -icheros"directorios# ,jemplos!cp <r-p directorio "tmp, cp archi$o archi$oOnue$o rm Descripcin! Nremo$e# 4orrar -icheros"directorios# ,jemplos! rm <- -ichero, rm <r- directorio, rm <i -ichero m0dir Descripcin! Nma6e dir# crear directorios# ,jemplos! m6dir directorio rmdir Descripcin! Nremo$e dir# 4orrar directorios, de4en estar $acios# ,jemplos! rmdir directorio m$ Descripcin! Nmo$e# renom4rar o mo$er -icheros"directorios# ,jemplos! m$ directorio directorio, m$ -ichero nue$oOnom4re, m$ -ichero aOdirectorio nano Descripcin! editor de -ichero muy simple# =i o emacs son para la +%++:# ,jemplo! nano <? clear Descripcin! limpia la pantalla# Ctrl<9 tiene el mismo e-ecto# e it Descripcin! termina la sesin del shell# Ctrl<D tiene el mismo e-ecto#

,l mapa de -icheros y directorios en linux < Comandos 45sicos y manejo de -icheros 3

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

date Descripcin! gestin de -echa de sistema, se puede $er y esta4lecer# ,jemplos! date, date %887%7.+ history Descripcin! muestra el historial de comandos introducidos por el usuario# ,jemplos! history P more more Descripcin! muestra el contenido de un -ichero con pausas cada ./ lineas# ,jemplos! more -ichero l hacer more! "cadena ! podemos hacer 4QsAueda de cadena - ! adelante 4! $ol$er arri4a $! iniciar $i en la linea Aue estamos &ota! estas opciones tam4i>n sir$en para el comando man #rep Descripcin! -iltra los contenidos de un -ichero# ,jemplos!cat -ichero P grep cadena, grep <il RcadenaS directorio" cat Descripcin! muestra todo el contenido de un -ichero sin pausa alguna# ,jemplos! cat -ichero chmod Descripcin! cam4ia los permisos de lectura"escritura"ejecucion de -icheros"directorios# ,jemplos! chmod Gr -ichero, chmod G? directorio, chmod Gr? directorio <', chmod <r -ichero chmod Gx -ichero ! da permiso de ejecucion cho/n Descripcin! Nchange o?ner# cam4ia los permisos de usuario!grupo de -icheros"directorios# ,jemplos! cho?n root!root -ichero, cho?n pello!usuarios directorio <' tar Descripcin! NTape 'chi$er# archi$ador de -icheros# ,jemplos! tar c$- -ichero#tar directorio , tar x$- -ichero#tar, tar Bc$- -ichero#tgB directorio, tar Bx$- -ichero#tgB #un1ip Descripcin! descompresor compati4le con TIP# ,jemplos! gunBip -ichero ,l mapa de -icheros y directorios en linux < Comandos 45sicos y manejo de -icheros :

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

rpm Descripcin! gestor de paAuetes de redhat y -edora# Para instalar o actualiBar so-t?are de sistema# ,jemplos! rpm <i paAuete#rpm, rpm <Aa programa, rpm <<-orce paAuete#rpm, rpm <A <<in-o programa dp0# Descripcin! gestor de paAuetes de De4ian# Para instalar o actualiBar so-t?are en el sistema# ,jemplos! dp6g <i paAuete#de4 alias Descripcin! para crear alias de comandos# Util para comandos largos# mount Descripcin! montar unidades de disco duro, dis6ette, cdrom# ,jemplos! mount "de$"hda. "mnt"lnx, mount "de$"hd4% "mnt <t $-at umount Descripcin! desmontar unidades# ,jemplos! umount "de$"hda., umount "mnt"lnx /ho Descripcin! muestra los usuarios de sistema Aue han iniciado una sesion# ,jemplos! ?ho, ?, ?ho am i sort Descripcin! ordena el contenido de un -ichero# ,jemplos! cat "etc"numeros P sort, ls P sort ln Descripcin! Nlin6# para crear enlaces, accesos directos# ,jemplos! ln <s "directorio enlace tail Descripcin! muestra el -inal I%8 lineasJ de un -ichero# ,jemplos!tail <- "$ar"log"maillog, tail <%88 "$ar"log"maillog P more head Descripcin! muestra la ca4ecera I%8 lineasJ de un -ichero# ,jemplos! head -ichero, head <%88 "$ar"log"maillog P more file Descripcin! nos dice de Aue tipo es un -ichero# ,jemplos! -ile -ichero, -ile V cmp Descripcin! compara dos -icheros y nos dice si son distintos ,jemplos! cmp -ichero% -ichero. ,l mapa de -icheros y directorios en linux < Comandos 45sicos y manejo de -icheros ;

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

file Descripcin! nos dice de Aue tipo es un -ichero# ,jemplos! -ile -ichero, -ile V diff Descripcin! muestra las di-erencias entre dos -icheros# Huy usado para parchear so-t?are# ,jemplos! di-- -ichero% -ichero. /c Descripcin! ?ord count, calcula nQmero de pala4ras y otros datos similares de un -ichero# ,jemplos! ?c -ichero, ?c <l -ichero

Comandos de administraci2n3 usuarios4 procesos4 0ernel


sysctl Descripcin! Con-igurar los par5metros del 6ernel en tiempo de ejuecucin# ,jemplos! sysctl <a ulimit Descripcin! muestra los limites del sistema Imaximo de -icheros a4iertos, etc##J ,jemplos! ulimit adduser Descripcin! aadir usuario de sistema# ,jemplos! adduser pepe, adduser <s "4in"-alse pepe userdel Descripcin! N eliminar usuario de sistema ,jemplos! userdel pepe usermod Descripcin! N modi-icar usuario de sistema ,jemplos! usermod <s "4in"4ash pepe df Descripcin! N dis6 -ree# espacio en disco disponi4le# Huy util# ,jemplos! d-, d- <h uname Descripcin! Nunix name# In-ormacion so4re el tipo de unix en el Aue estamos, 6ernel, etc# ,jemplos! uname, uname <a netstat ,l mapa de -icheros y directorios en linux < Comandos de administracin! usuarios, procesos, 6ernel 7

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

Descripcin! la in-ormacion so4re las conexiones de red acti$as# ,jemplos! netstat, netstat <ln, netstat <l, netstat <a ps Descripcin! Nproccess toda la in-ormacion so4re procesos en ejecucion# ,jemplos! ps, ps <ax-, ps < , ps <auxpstree Descripcin! Nproccess tree, muestra los procesos en -orma de 5r4ol ,jemplos! pstree 0ill Descripcin! en$2a seales a procesos# 9a m5s comQn es la de matar el proceso# ,jemplo! 6ill <7 +4 Ila seal <7 es WI99 y mata el proceso numero +4J free Descripcin! muestra el estado de la memoria ' H y el SK P# ,jemplos! -ree $mstat Descripcin! muestra el estado de la memoria $irtual ,jemplos! $mstat, $mstat <s du Descripcin! Ndis6 use# uso de disco# Huestra el espacio Aue esta ocupado en disco# ,jemplos! du V, du <sF "V, du <sF "etc lsof Descripcin! muestra los -icherosIli4rerias, conexionesJ Aue utiliBa cada proceso ,jemplos! lso-, lso- <i, lso- P grep -ichero lsmod Descripcin! Huestra los modulos de 6ernel Aue estan cargados# ,jemplos! lsmod insmod Descripcin! instala modulos de 6ernel ,jemplo! insmod e%888, insmod us4Ocore modpro"e Descripcin! Trata de instalar un modulo, si lo encuentra lo instala pero de -orma temporal# ,jemplos! modpro4e ipOta4les, modpro4e eepro%88 rmmod Descripcin! ,limina modulos del 6ernel Aue estan cargados ,jemplos! rmmod Xnom4re de moduloY fdis0 ,l mapa de -icheros y directorios en linux < Comandos de administracin! usuarios, procesos, 6ernel %8

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

Descripcin! sir$e para gestionar las particiones de una unidad de disco ,jemplos! -dis6 "de$"hda , -dis6 <l "de$"sda

Comunicaciones
telnet Descripcin! ,sta4lece conexiones a puertos TCP ,jemplo! telnet localhost ./ mes# Descripcin! ,sta4lece si se aceptan mensajes a tra$>s de ?rite o tal6# ,jemplo! mesg <y /rite Descripcin! en$2a mensajes a otros usuarios# ,jemplo! ?rite jrmorris pts"8 /all Descripcin! en$2a un mensaje a todos los usuarios conectados al sistema ,jemplo! ?all Ra cascarla el sistemaS ifconfi# Descripcin! Ninter-ace con-ig# con-iguracion de inter-aces de red, modems, etc# ,jemplos! i-con-ig, i-con-ig eth8 ip netmas6 .//#.//#.//#8 route Descripcin! gestiona las rutas a otras redes# ,jemplos! route, route <n iptraf Descripcin! muestra en una aplicacion de consola T(D( el tra-ico de red IP, )DP, ICHP# Permite utiliBar -iltros, y es S)H H,&T, )TI9 para diagnostico y depuracion de -ire?alls ,jemplos! iptratcpdump Descripcin! $uelca el contenido del tra-ico de red# ,jemplos! tcpdump, tcpdump <u pin# Descripcin! heramienta de red para compro4ar entre otras cosas si llegamos a un host remoto# ,jemplos! ping ???#rediris#es ,l mapa de -icheros y directorios en linux < Comunicaciones %%

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

traceroute Descripcin! herramienta de red Aue nos muestra el camino Aue se necesita para llegar a otra maAuina# ,jemplos! traceroute ???#rediris#es mtr Descripcin! HattZs Trace 'oute, un traceroute de consola algo m5s $isual, muy util para o4ser$ar donde hay p>rdidas de paAuetes# mail Descripcin! en$io y lectura de correo electronico# ,jemplos! mail pepe[cuatro$ientos#org X -ichero, mail <$ pepe[cuatro$ientos#org X -ichero /#et Descripcin! programa para descargar -icheros por http o -tp# ,jemplos! ?get http!""???#rediris#es"documento#pdlyn Descripcin! na$egador ?e4 con opciones de -tp, https# ,jemplos! lynx ???#cuatro$ientos#org, lynx <<source http!""???#cuatro$ientos#org"script#sh P sh ftp Descripcin! cliente @TP# ,jemplos! -tp -tp#cuatro$ientos#org /hois Descripcin! ?hois de dominios# ,jemplos! ?hois cuatro$ientos#org sniffit Descripcin! Sni--er o husmeador de todo el tra-ico de red# &o suele $enir instalado por de-ecto# ,jemplos! sni--it <i

Comunicaci2n entre procesos


Tu4erias o pipes! P sir$en para comunicar procesos, usualmente para pasar el resultado de un proceso a otro proceso! por ejemplo ps ax- P grep 4ash! lista todos los procesos y -iltra los Aue se llamen 4ash # 9a tu4er2a en de-initi$a lo Aue hace es unir la salida de un comando con la entrada de otro#

,l mapa de -icheros y directorios en linux < Comunicacin entre procesos

%.

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

Redirecci2n de entrada!salida
proceso > fichero ! con este s2m4olo podemos redirigir la salida est5ndar de un comando a un -ichero# T>ngase en cuenta una cosa# Si decimos -ichero siempre lo $amos a decir de manera gen>rica, puede ser un -ichero de texto o la pantalla de terminal, ah2 ca4e T(D(# linux~$ ps -axf > procesos.txt linux~$ more procesos.txt PID TTY STAT TIME COMMAND 1 ? S 0:00 init [2] 2 ? SN 0:00 [ksoftirqd/0] 3 ? S< 0:01 [events/0] 4 ? S< 0:00 \_ [khelper] ... &ota! para e$itar accidentes con la redireccin >, puede esta4lecerse una opcin en el shell Aue se llama noclo44er# procesa |> fichero ! con esto redirigimos el resultado a un -ichero, so4rescri4i>ndolo incluso con la opcin de shell noclo44er acti$ada# procesa >> fichero ! con esto redirigimos el resultado a un -ichero, pero sin so4rescri4irlo, lo Aue hacemos es escri4ir al -inal de este Iappend en inglesJ# procesa < fichero ! con esto redirigimos el contenido del -ichero a un programa# Se usa para utiliBar el contenido de un -ichero como input de un comando# linux~$ procesa < fichero.txt proceso << END ! este redireccin se utiliBa para iniciar el paso de par5metros a un programa, y se termina cuando escri4imos \,&D\ o cualAuier otra pala4ra Aue hayamos especi-icado al inicio del comando# )n ejemplo cl5sico ser2a una sesin @TP automatiBada a la Aue le direccionamos todos los comandos de golpe# l aparecer de nue$o la pala4ra @I& 9 se terminan de aceptar datos y se ejecuta el comando# linux~$ ftp -inv << FINAL open ftp.rediris.es user usuario password cd /debian ls ,l mapa de -icheros y directorios en linux < 'edireccin de entrada"salida %+

www.detodoprogramas.com

4party exit FINAL ...

Taller Shell, comandos y programacin

proceso <> fichero ! esta redireccin permite Aue un proceso utilice un -ichero tanto para leer como para escri4ir! linux~$ proceso <> fichero

Compresi2n de ficheros y directorios


,xisten $arias opciones de compresin de -icheros en 9inux! gBip, 4B., rar, Bip, y todos ellos se pueden com4inar con el empaAuetar o archi$ador T '# tar rchi$ador, agrupa -icheros en uno, adem5s se le puede decir Aue comprima tar c-p resultado#tar "etc "$ar ! guarda el contenido de "etc y "$ar dentro del -ichero resultado#tar tar x-p resultado#tar ! saca todo el contenido de resultado#tar tar Bc-p usr#tgB "usr ! archi$a y comprime con gBip el directorio "usr tar jc-p usr#tgB "usr ! archi$a y comprime con 4Bip. el directorio "usr tar Bx-p usr#tgB ! D,Scomprime el -ichero anterior #1ip!#un1ip4 1ip!un1ip4 rar!unrar Compresor"Descompresor# 9os -icheros comprimidos con gBip o con Bip no se descomprimen igual# )n -ichero comprimido con el ?inBip ha4r2a Aue a4rirlo con el unBip en linux# gBip -ichero ! comprime -ichero, le aade la extensin gB gunBip -ichero#gB ! descomprime -icheros gB# Bip <r7 todo#Bip directorio" ! comprime el directorio en el -ichero todo#Bip unBip ! descomprime para -icheros Bip "1(!"un1ip( Compresor caero, comprime 4astante m5s Aue gBip, aunAue tarda y chupa mas cpu 4B. -ichero ! comprime -ichero, le aade la extensin 4B. 4unBip. -ichero#4B.! descomprime ,l mapa de -icheros y directorios en linux < Compresin de -icheros y directorios %4

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

tar jc-p usr#tar#4B. "usr! archi$a y comprime con 4B.

5ccediendo a dispositi$os y particiones


Para acceder a dis6ettes, cdroms, d$ds, pendri$es, cualAuier dispositi$o )S0, etc### es necesario RmontarloS de -orma manual, sal$o Aue todo est> con-igurado de una -orma cmoda con automount# ,n linux hay un Qnico sistema de -icheros, y si se mete un CD o un )S0 en el sistema hay Aue montarlo so4re algQn directorio del sistema# ,xisten algunos directorios prede-inidos para esto, aunAue en principio lo podemos montar donde nos de la gana# Para montar un dis6ette por ejemplo! linux~# mount /dev/fd0 /floppy

Para montar un cdrom o d$d


linux~# mount /dev/cdrom /mnt linux~# mount /dev/dvd /montaje/dvd (el contenido del dvd queda dentro de /montaje/dvd) Para montar un )S0 4asta con usar el dispositi$o "de$"sda o "de$"sda%# 9inux suele emular los dispositi$os )S0 como discos SCSI# Dependiendo de cmo est>n -ormateados hay Aue montarlos de una -orma u otra# Siempre se puede compro4ar cmo esta el particionado usando -dis6# linux~# mount /dev/usb /mnt Para acceder a otras particiones o discos del sistema se siguen los mismos pasos, puede Aue dependiendo del tipo de particin sea necesario especi-icarlo# linux~# mount /dev/hda3 /mnt -t vfat linux~# mount /dev/hda1 /montaje/ -t ntfs -o ro Cuando dejamos de usar el dispositi$o y en el caso de Aue se pueda sacar hay Aue desmontarlo# ,l comando es similar! umount y 4asta con especi-icar o el dispositi$o o el directorio donde se ha montado# linux~# umount /dev/hda3 ,l mapa de -icheros y directorios en linux < ccediendo a dispositi$os y particiones %/

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

,l mapa de -icheros y directorios en linux < ccediendo a dispositi$os y particiones %3

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

6.Usando el shell
&ada m5s logearnos en un sistema linux nos en-rentaremos o $isto de otro modo nos 4ene-iciaremos del shell y de toda su potencia! linux~$ ,se el 5rido aspecto Aue puede tener el shell! un prompt a la espera de Aue metamos comandos# antes de salir ese prompt, el 4ash comprue4a si dentro del directorio del usuario existe algQn -ichero de inicialiBacin como #4ashrc o #pro-ile, y en caso de existir los ejecuta! a tra$>s de esos -icheros se esta4lecen algunas $aria4les, alias de comandos, aspecto del prompt, etc### Para empeBar podemos echar un ojo a las $aria4les de entorno del sistema! linux~$ set BASH=/bin/bash BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="1" [4]="release" [5]="i386-pc-linux-gnu") BASH_VERSION='2.05b.0(1)-release' COLUMNS=80 DIRSTACK=() EUID=1000 GROUPS=() HISTFILE=/home/usuario/.bash_history HISTFILESIZE=500 ... ,n el shell ya podemos empeBar a meter comandos para hacer la tarea Aue sea# Huchas $eces escri4ir comandos de texto puede resultar una tarea tediosa y repetiti$a, por eso el 4ash dispone de multitud de -acilidades para Aue no tengamos Aue escri4ir tanto#

7as flechas
tra$>s de las teclas cursoras podemos $ol$er a los comandos Aue hemos introducido anteriormente, algo Aue los usuarios de HSD(S recordar5n como el D(SW,D# ,n cualAuier momento podemos mo$ernos al inicio o al -inal del comando podemos usar las teclas Inicio o -in, o en su de-ecto Ctrl< o Ctrl<,#

,l mapa de -icheros y directorios en linux < 9as -lechas

%:

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

El historial de comandos
tra$>s del comando history podemos echar un ojo a los Qltimos comandos Aue hemos ejecutado y podemos repetir cualAuiera de ellos gracias al comando especial ] linux~$ ls Desktop php script linux~$ linux~$ 2 ls 3 mkdir scripts 4 mkdir php 5 mkdir Desktop 6 ls 7 history linux~$ !6 Desktop php script linux~$ Si simplemente recordamos Aue ha4iamos ejecutado un comando Aue empeBa4a por hi podemos ejecutarlo haciendo! linux~$ !hi

Relleno de comandos y ficheros


,scri4ir comandos y nom4res de -icheros enteros puede ser un rollo# ,n el shell podemos usar el ta4ulador en cualAuier momento para Aue nos rellene los comandos y nos complete las rutas de -icheros con lo Aue nos ahorarremos un montn de tra4ajo# Por ejemplo! linux~$ mo (tabulamos y nos muestra todas las posibilidades) moc more mozilla-1.7.8 moc-qt3 mount mozilla-firefox mogrify mountpoint mozilla-suite montage mozilla mozilla-thunderbird linux~$ mou (tabulamos) linux~$ mount la hora de completar los nom4res de -icheros y rutas de directorios la ta4ulacin resulta enormemente pr5ctica! ,l mapa de -icheros y directorios en linux < 'elleno de comandos y -icheros %;

www.detodoprogramas.com

4party linux~$ ls /lib/mo (tabulacin) linux~$ ls /lib/modules/ (tabulacin) linux~$ ls /lib/modules/2.6.8-2-386

Taller Shell, comandos y programacin

1racias a la ta4ulacin nos ahorramos la tediosa tarea de escri4ir largos textos#

Comodines
,l shell reconoce una serie de caracteres comod2n para poder re-erirse a un conjunto de -icheros o directorios V ! se corresponde con cualAuier contenidos E ! se corresponde con un Qnico car5cter ^_ ! se corresponde con un conjunto de caracteres linux~$ ls programa.c linux~$ ls programa.c linux~$ ls programa.c test.c texto.txt ejemplo.pdf test.o *.c test.c *.? test.c test.o

E.ecuci2n de comandos
Para ejecutar un comando en el shell 4asta con ponerlo, y si el comando se encuentra dentro de los directorios indicados en la $aria4le P TF se ejecutar5 sin pro4lemas# linux~# uptime 20:49:05 up 2:35, linux~# 2 users, load average: 0.00, 0.00, 0.00

Podemos encadenar m5s de un comando en la linea separandolos con L linux~# uptime;uname -a;date 20:49:37 up 2:35, 2 users, load average: 0.00, 0.00, 0.00 Linux 4vientos 2.6.8-2-386 #1 Tue Aug 16 12:46:35 UTC 2005 i686 GNU/Linux ,l mapa de -icheros y directorios en linux < ,jecucin de comandos %7

www.detodoprogramas.com

4party dom jun linux~# 3 20:49:37 CEST 2007

Taller Shell, comandos y programacin

Si todo $a 4ien, el comando har5 lo Aue tenga Aue hacer e impl2citamente de$ol$er5 un $alor 4ooleano T'),# Sa4iendo eso podemos encadenar comandos de manera condicional usando && y PP linux~# ls fichero && more fichero Cuando usamos && estamos haciendo Aue el segundo comando se ejecute solamente si el primero se ha ejecutado con >xito# ,s un and lgico, podemos encadenar m5s de dos comandos# linux~# ls fichero && cat fichero && echo sin problemas OK Si usamos PP el siguiente comando se ejecutar5 solamente si el primero no se ha ejecutado correctamente o ha de$uelto algQn error# linux~# ls fichero || echo El fichero no existe Podemos com4inar los dos! linux~# ls fichero && cat fichero || echo No hay fichero Comandos en se#undo plano 9os sistemas linux son mutitarea! podemos ejecutar m5s de un comando a al $eB# Podemos dejar un comando Aue se ejecute en segundo plano y mientras podemos ejecutar m5s# Para dejar un comando en segundo plano simplemente metemos un & al -inal del mismo# Por ejemplo podemos comprimir un directorio y dejar la operacin en segundo plano! linux~# tar zcfp etc.tar.gz /etc & [2] 4376 linux~# ,n cualAuer momento podemos lle$ar el comando a primer plano mediante el comando fg# simismo lo podemos pausar con Ctrl-Z y reanudarlo en segundo plano con bg# linux~# fg tar zcfp usr.tar.gz /usr ,l mapa de -icheros y directorios en linux < ,jecucin de comandos .8

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

(Ctrl-Z) [2]+ Stopped tar zcfp usr.tar.gz /usr linux~# bg [2]+ tar zcfp usr.tar.gz /usr & linux~# Si Aueremos terminar alguno de los procesos Aue tenemos en marcha de4emos mandarle una seal# Para eso se usa el comando 6ill, Aue a pesar de su nom4re no es Aue sir$a solo para matar procesos, en realidad sir$e para en$iar seales a los procesos# 9a seal m5s -recuente es WI99 o 7! linux~# ps PID TTY TIME 3593 pts/0 00:00:00 3767 pts/0 00:00:00 3849 pts/0 00:00:00 linux~# kill -9 3767 linux~# ps PID TTY TIME 3593 pts/0 00:00:00 3849 pts/0 00:00:00 linux~#

CMD bash xmms ps CMD bash ps

Para conocer las seales disponi4les podemos echar un ojo en el manual de 6ill con el comando man kill# Comandos 4uilt<in del shell ,l shell dispone de un conjunto de comandos Aue $ienen de serie# Son comandos muy sencillos Aue pueden ayudar en la programacin de scripts# =amos a listarlos, pueden usarse dentro de un script o desde el propio prompt!

! ! negacin # ! comentarios : ! comando nulo . ! el punto sir$e para ejecutar -icheros# Con los scripts del mismo directorio se hace! #"script#sh alias! sir$e para crear alias de comandos largos! alias dirNZls <l P moreZ bind ! gestiona la li4rer2a readline bg ! pasa procesos a 4ac6ground o segundo plano break ! -uerBa la salida de -ors, ?hiles, selects o untils .%

,l mapa de -icheros y directorios en linux < ,jecucin de comandos

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

builtin! permite modi-icar el comportamiento de comandos cd ! el cam4io de directorio command ! ejecutar determinado comando con sus argumentos continue! salta a la siguiente iteracin en -ors, ?hiles, selects o untils declare! declaracin de $aria4les dirs ! muestra la pila de directorios disown! Auita los procesos dependientes del shell para Aue no dependan de este do, done ! parte de las iteraciones echo ! mostrar datos por salida enable! ha4ilitar o desha4ilitar los comandos 4uiltin# exec ! ejecuta un comando en lugar del proceso actual exit! termina el script o el shell export! con$ierte las $aria4les en glo4ales fc ! editar comandos del historial fg! pasar comandos a primer plano getopts! para tomar los argumentos opcionales del script, al estilo de c help ! muestra la ayuda history! el historial de comandos if: para crear estructuras condicionales jobs! muestra los procesos Aue tenemos en marcha kill! en$2o de seales a procesos. let! ejecucin de operaciones aritm>ticas local! declaracin de $aria4les locales logout! salida del shell popd! saca un directorio de la pila de directorios printf! sacar datos -ormateados como en c pwd! muestra el directorio actual pushd! mete un directorio en la pila read! lee desde la entrada est5ndar readonly! pre$iene Aue $aria4les de shell sean so4rescritas return! para terminar -unciones select! estructura de seleccin set! muestra $aria4les del shell, y puede esta4lecer muchas opciones shopt! esta4lece o Auita opciones de shell shift! desplaBa posiciones en el shell source! similar al # suspend! suspende el shell actual, suele hacerse en el su test! para construir condicionales time! mide el tiempo de ejecucin de un comandos times! muestra tiempos acumulados de procesos ..

,l mapa de -icheros y directorios en linux < ,jecucin de comandos

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

trap! para atrapar seales true! constante 4ooleana type!distingue si un comando es 4uiltin, -uncin,alias, pala4ra cla$e,## ulimit! muestra los limites de recursos del sistema umask! muestra"esta4lece permisos Aue sse de4en aplicar a nue$os -icheros unalias! Auita los alias unset! desesta4lece -unciones o $aria4les until! para crear iteraciones wait! detiene la ejecucin a la espera Aue termine otro proceso while! para crear iteraciones#

,l mapa de -icheros y directorios en linux < ,jecucin de comandos

.+

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

8.9ro#ramaci2n de scripts de shell


Introducci2n
)n script de shell no es m5s Aue un -ichero de texto Aue contiene una serie de comandos del sistema linux adem5s de los comandos Aue -orman parte del shell I4uilt<inJ con los Aue podemos crear estructuras Aue -acilitan la programacin de scripts complejos# Para poder ejecutar los -icheros de4en ser ejecuta4les por tanto si no es ejecuta4le hay Aue -orBar Aue lo sea! linux~$ chmod u+x scriptshell.sh o con nQmeros! linux~$ chmod 755 scriptshell.sh partir de ah2 ya podemos ejecutar el script in$ocando directamente el -ichero# ,n los sistemas linux y en el shell 4ash. de4emos hacerlo especi-icando el directorio actual! linux~$ ./scriptshell.sh Si no ponemos #" el script no se ejecutar5 y el sistema dir5 Aue no lo encuentra# (tra -orma de ejecutar el script es usar el comando source# tra$>s de este comando podemos ejecutar un script aunAue no tenga permisos de ejecucin# linux~$ source scriptshell.sh Si no ponemos #" el script no se ejecutar5 y el sistema dir5 Aue no lo encuentra# Fola mundo ,ste es el aspecto Aue tendr2a el script m5s 45sico posi4le!
#!/bin/bash # Esto es un comentario echo "Hola mundo"

,ste ser2a similar pero usando una $aria4le!


#!/bin/bash # En la primera linea establezco con qu shell se debe ejecutar # Se define una variable SALUDO="Hola mundo"

,l mapa de -icheros y directorios en linux < Introduccin

.4

www.detodoprogramas.com

4party
echo -n "Este script te dice: " echo ${SALUDO}

Taller Shell, comandos y programacin

:aria"les
,n el shell se pueden de-inir $aria4les y por tanto dentro de los scripts tam4i>n# Au2 no hay declaracin de tipos pero s2 Aue podemos de-inir $aria4les Aue contienen nQmeros, cadenas, 4ooleanos e incluso arrays# Para declarar una $aria4le 4asta con hacer! VARIABLE=valor 9a podemos exportar para Aue se con$ierta en una $aria4le glo4al# export VARIABLE partir de Aue se crea la $aria4le ya podemos acceder a ella a tra$>s de su nom4re con el s2m4olo del dlar por delante# echo $VARIABLE ,ste es un ejemplo de uso de $aria4les!
#!/bin/sh # Muestra el uso de variables # No existen los tipos # definicin de variables una_variable=666 MI_NOMBRE="Richard" NOMBRES="Iigo Asier Sten Roberto Pello" BOOLEANO=true echo echo echo echo "Echemos un ojo a las variables " "Un nmero: ${una_variable}" "Un nombre ${MI_NOMBRE}" "Un grupo de nombres: ${NOMBRES}"

# Al script se le pueden pasar argumentos. Para recogerlos # hay que usar : ${nmero} donde: # ${0} : nombre del script # ${1} : primer argumento # ${2} : segundo argumento # ...etc. echo "Has invocado el script pasndome ${0} eta ${1} "

,l mapa de -icheros y directorios en linux < =aria4les

./

www.detodoprogramas.com

4party
# Otras variables especiales # $# : Nmero de argumentos echo "Me has pasado $# argumentos" # $@ : grupo de parmetros del script echo IDa: ${!} y $@

Taller Shell, comandos y programacin

# Variables de entorno echo "Mi directorio actual: ${PWD} y mi usuario ${UID}"

arrays Como ya se ha dicho, existe la posi4ilidad de declarar y usar arrays# Son algo limitados pero pueden resultar pr5cticos# ,ste es un ejemplo de uso de arrays
#!/bin/bash # Muestra el uso de arrays # Podemos crear arrays de una dimensin asociaciones[0]="Gruslin" asociaciones[1]="Hackresi" asociaciones[2]="NavarradotNET" asociaciones[3]="Riberlug" # Otra forma de definirlos partidos=("UPN" "PSN" "CDN" "IUN" "Nafarroa BAI" "RCN" ) numeros=(15 23 45 42 23 1337 23 666 69) echo ${asociaciones[0]} es una asociacin, ${partidos[1]} un partido #echo "Tamao: $#asociaciones" #echo "Tamao: ${$#{partidos}}"

Otros usos Huchas $eces puede Aue nos interese tomar solamente parte del $alor de una $aria4le, o asignarle un $alor por de-ecto# ,ste es un ejemplo de algunas cosas Aue podemos hacer con las $aria4les!
#!/bin/bash # Muestra el uso de variables

,l mapa de -icheros y directorios en linux < =aria4les

.3

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

# Sacar parte del valor de una variable (substring) NOMBRE="Navarrux Live edition" echo ${NOMBRE} una parte ${NOMBRE:8} y otra ${NOMBRE:8:4} # Valores por defecto. # ${variable:-valorpordefecto} SINVALOR= echo "Variable SINVALOR: ${SINVALOR:-31337} eta ${VACIO:-'Miguel Indurain'}" echo "La variable SINVALOR no tiene valor algun ${SINVALOR} " # Esto es igual pero el valor queda establecido # ${variable:=valorpordefecto} echo "Variable SINVALOR: ${SINVALOR:=31337} eta ${VACIO:='Miguel Indurain'}" echo "La variable SINVALOR no tiene valor algun ${SINVALOR} " # Y lo contrario: si la variable S tiene valor, se le pone otro # ${variable:+valorpordefecto} PROGRAMA='sniffit' echo "valor de PROGRAMA: ${PROGRAMA:+'tcpdump'} y ahora ${PROGRAMA}" # Si la variable est sin definir o vaca se muestra un error. En caso # contrario se le asigna un valor por defecto # ${variable:?valorpordefecto} echo "Valor de: ${EJEMPLO:?'Roberto'} y luego {EJEMPLO}" # Otros # ${!prefijo*} : nos devuelve una lista de las variables que comienzan # con determinado prefijo. # Podemos probar con el for: for i in ${!P*};do echo $i ;done

Operaciones
Da Aue tenemos $aria4les, Aue menos Aue poder operar con ellas de alguna -orma, l igual Aue en cualAuier otro lenguaje de programacin disponemos de operadores aritm>ticos y lgicos, aunAue su uso no es tan simple# 5ritm;ticas ,ste es un ejemplo del uso de operaciones aritm>ticas
#!/bin/bash # -, +, *, /, %, **, variable++, variable--, --variable, ++variable # == : igualdad

,l mapa de -icheros y directorios en linux < (peraciones

.:

www.detodoprogramas.com

4party
# != : desigualdad # Pruebas VALOR1=23 VALOR2=45

Taller Shell, comandos y programacin

# Para las operaciones puede usarse expr o [] RESULTADO=`expr ${VALOR1} + ${VALOR2}` echo "Resultado: ${RESULTADO}" RESULTADO=`expr ${VALOR1} + ${VALOR2} + 3` echo "Resultado: ${RESULTADO}"

VALOR1=5 VALOR2=4 echo "${VALOR1} y ${VALOR2}" RESULTADO=$[${VALOR1} + ${VALOR2} + 2] echo "Ahora: ${VALOR1} + ${VALOR2} + 2 = ${RESULTADO}"

RESULTADO=$[${VALOR1} + $[${VALOR2} * 3]] echo "Ahora: ${VALOR1} + ${VALOR2} * 3 = ${RESULTADO}"

72#icas ,ste es un ejemplo de uso de operaciones lgicas


#!/bin/bash ## operaciones lgicas # # # && : and || : or ! : not

booleano=true # Si la variable booleano es true veremos por pantalla "OK" $booleano && echo "OK" || echo "no es true" otrobool=!${booleano}

,l mapa de -icheros y directorios en linux < (peraciones

.;

www.detodoprogramas.com

4party
test ${otrobool} || echo "Ahora es falso"

Taller Shell, comandos y programacin

# Mediante && podemos encadenar comandos #who && ps -axf && echo "OK"

## comparaciones : -eq, -ne, -lt, -le, -gt, or -ge valor=6 test $valor -le 6 # Asignaciones nuevo=${valor} test ${nuevo} -eq ${valor} && echo "Son los mismo" && echo "Se cumple"

echo "Ahora ${nuevo} es lo mismo que ${valor}"

Condicionales
,n el shell podemos crear las ha4ituales estructuras condicionales i- o i-<else# ,sta ser2a la -orma de i-! if condicin; then operaciones fi o tam4i>n! if condicin then operaciones fi ,sta ser2a la -orma de el i-<else if condicin then operaciones else ,l mapa de -icheros y directorios en linux < Condicionales .7

www.detodoprogramas.com

4party operaciones fi D tam4i>n tenemos el i-<elsei-###<else if condicin then operaciones elif condicin then operaciones else operaciones fi

Taller Shell, comandos y programacin

,ste es un ejemplo de uso de condicionales i- y test


#!/bin/bash # Condicionales VARIABLE=45 if [ ${VARIABLE} -gt 0 ]; then echo "${VARIABLE} es mayor que 0" fi # Podemos meter el then en la siguiente linea if [ -e /etc/shadow ] then echo "OK, parece que tienes un sistema con shadow pass" fi

## Estructura if-else OTRA=-23 if [ ${OTRA} -lt 0 ] then echo "${OTRA} es menor que 0" else echo "${OTRA} es mayor que 0";

,l mapa de -icheros y directorios en linux < Condicionales

+8

www.detodoprogramas.com

4party
fi ## Estructura if-elseif

Taller Shell, comandos y programacin

# Vamos a usar "read" para pedirle datos al usuario echo read echo read -n "Mete un valor: " VALOR1 -n "Mete otro valor: " VALOR2

echo "Has introducido los valores ${VALOR1} y ${VALOR2} " if [ ${VALOR1} -gt ${VALOR2} ] then echo "${VALOR1} es mayor que ${VALOR2}" elif [ ${VALOR1} -lt ${VALOR2} ] then echo "${VALOR1} es menor que ${VALOR2}" else echo "${VALOR1} y ${VALOR2} son iguales" fi

## Estructura test # Ejecutar operacion # test condicin || # Ejecutar operacin # test condicin &&

si no se cumple la condicin operacion si se cumple operacion

# Este test crea un fichero si no existe. test -f './fichero.txt' || touch fichero.txt

Compro"aciones 'ue podemos hacer3 ,n las condicionales podemos hacer una serie de compro4aciones con -icheros, las mostramos en orden al-a4>tico!

-a fichero ! $erdadero si el -ichero existe -e fichero ! lo mismo -b fichero ! $erdadero si el -ichero existe y tiene algQn 4loAue especial -c fichero ! $erdadero si el -ichero existe y es del tipo car5cter Isuelen ser dispositi$osJ -d fichero ! $erdadero si el -ichero existe y es un directorio# +%

,l mapa de -icheros y directorios en linux < Condicionales

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

-f fichero ! $erdadero si el -ichero existe y es un -ichero comQn# -g fichero ! $erdadero si el -ichero existe y tiene el 4it set1ruopID esta4lecido -h fichero ! $erdadero si el -ichero existe y es un enlace s2m4olico -k fichero ! $erdadero si el -ichero existe y tiene el stic6y 4it esta4lecido -p fichero ! $erdadero si el -ichero existe y es una tu4er2a con nom4re# -r fichero ! $erdadero si el -ichero existe y tiene permisos de lectura# -s fichero ! $erdadero si el -ichero existe y es mayor Aue 8# -u fichero ! $erdadero si el -ichero existe y tiene el 4it set)ID esta4lecido# -w fichero ! $erdadero si el -ichero existe y tiene permisos de escritura# -x fichero ! $erdadero si el -ichero existe y tiene permisos de ejecucin # -O fichero ! $erdadero si el -ichero existe y el ,)ID es de nuetro usuario# -G fichero ! $erdadero si el -ichero existe y el ,1ID es de nuestro grupo# -L fichero ! $erdadero si el -ichero existe y es un enalce sim4lico# -S fichero ! $erdadero si el -ichero existe y es un soc6et# -N fichero ! $erdadero si el -ichero existe y ha cam4iado tras la Qltima lectura# -t descriptor ! $erdadero si en un descriptor de -ichero a4ierto y un terminal

partir de ah2 podemos hacer las compro4aciones tan complejas como haga -alta!
#!/bin/sh # script para comprobar si un fichero existe. Espera un parmetro if [ -e $1 ] && [ -f $1 ] then echo "OK, el fichero existe " else echo "NO existe" fi # Para comprobar la negacin usaramos el smbolo: ! if [ ! -e $1 ] then echo No existe fi

(tros test Aue podemos hacer comparando -icheros!

,l mapa de -icheros y directorios en linux < Condicionales

+.

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

fichero1 -nt fichero2 ! $erdadero si -ichero% es m5s reciente Aue -ichero. o si el -ichero% existe y el otro no# fichero1 -ot fichero2! $erdadero si -ichero% es m5s $iejo Aue -ichero. o si el -ichero% existe y el otro no# fichero1 -ef fichero2! $erdadero si los dos comparten el mismo nQmero de inodo y dispositi$o#

case ,l case o el s?itch<case tan t2pico del lenguaje C tam4i>n est5 disponi4le aAu2# ,sta ser2a su -orma! case variable in valor1) operaciones_si_variable=valor1 ;; valor2) operaciones_si_variable=varlo2 ;; *) operaciones_en_cualquier_otro_caso esac ,ste es un ejemplo de uso de la estructura case
#!/bin/bash

NOMBRE="" echo -n "Dame un nombre: " read NOMBRE case ${NOMBRE} in iigo) echo "${NOMBRE} dice: me dedico a Navarrux" ;; sten) echo "${NOMBRE} dice: tengo un blog friki"

,l mapa de -icheros y directorios en linux < Condicionales

++

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

;; asier) echo "${NOMBRE}> dice: .NET me gusta" ;; pello) echo "${NOMBRE}> dice: el shell mola" ;; *) echo "A ${NOMBRE} no lo conozco" esac

Iteraciones
Tam4i>n tenemos las cl5sicas iteraciones -or y ?hile adem5s de otras, siempre Aue necesitemos realiBar tareas repetiti$as, recorrer arrays o resultados de comandos, etc### for Se puede hacer un -or de distintas maneras# ,l m5s simple tiene esta -orma! for var in lista do operaciones done unAue se pueden crear los t2picos -or Aue se inicialiBan con un $alor y se hacen ejecutar x $eces# Hejor $erlo en cdigo! ,ste es un ejemplo de uso de la iteracin -or!
#!/bin/bash

## un for simple echo "FOR simple: " for i in a b c d e f g h i do echo "letra: $i" done

## for para recorrer array NOMBRES="Iigo Sten Asier Pello Roberto" echo "FOR simple para recorrer un array: "

,l mapa de -icheros y directorios en linux < Iteraciones

+4

www.detodoprogramas.com

4party
echo "Participantes en la 4party: " for i in ${NOMBRES} do echo ${i} done

Taller Shell, comandos y programacin

## for con el resultado de un comando echo "FOR con el resultado de un comando" for i in `cat direcciones.txt` do echo ${i} done ## for con un grupo de ficheros echo "FOR con ficheros" for i in *.sh do ls -lh ${i} done

## for clsico con un ndice echo "FOR clsico " for (( cont=0 ; ${cont} < 10 ; cont=`expr $cont + 1` )) do echo "Ahora valgo> ${cont}" done

/hile Huchas $eces nos interesa una iteracin sin un nQmero de $ueltas -ijo, Aue simplemente dependa de una condicin# ,so lo podemos conseguir con el ?hile, cuya -orma resumida es esta! while condicin do operaciones done ,l mapa de -icheros y directorios en linux < Iteraciones +/

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

,ste es un ejemplo de uso de la iteracin ?hile!


#!/bin/bash

## Estructura while echo "WHILE en marcha" cont=0 # Un bucle que terminar cuando $cont sea mayor que 100 while (test ${cont} -lt 100) do cont=`expr $cont + 10` echo "Valor del contador: ${cont}" done echo "Valor final del contador: ${cont}" ## Un while infinito # while true; do comando; done

until )ntil es similar a ?hile, sal$o Aue su ejecucin se detiene de -orma in$ersa# Cuando la condicin resulta -alsa, termina el 4ucle# ,sta es su -orma! until condicin do operaciones done ,ste es un ejemplo de uso de la iteracin until!
#!/bin/bash ## El bucle until # Un bucle until se ejecuta hasta que el test resulte falso echo "Estructura until" cont=15 until (test ${cont} -lt 0) do cont=`expr $cont - 1`

,l mapa de -icheros y directorios en linux < Iteraciones

+3

www.detodoprogramas.com

4party
echo "Valor del contador: ${cont}" done echo "Valor final del contador: ${cont}"

Taller Shell, comandos y programacin

select Hediante select podemos crear menQs de seleccin de manera muy cmoda# Podemos de-inir un array con todas las opciones y select las mostrar5 por nosotros# ,sta es su -orma general! select variable in lista do operaciones done ,ste es un ejemplo de uso de la iteracin select
#!/bin/bash ## Estructura select # El select es similar al choice de msdos # sirve para crear menus de seleccion echo "Select de distros" DISTROS="Debian Ubuntu Navarrux Gentoo Mandriva" echo "Selecciona la mejor opcin por favor: ${resultado}" select resultado in ${DISTROS} do # Si la longitud de cadena de resultado es > 0 ya est seleccionado (test ${#resultado} -ne 0 ) && break echo "Selecciona la mejor opcin por favor: ${resultado}" done echo "Sistema seleccionado: [${resultado}] longitud de cadena: ${#resultado}"

<unciones
Para estructurar mejor el cdigo, di$idir las partes complicadas e incluso reutiliBar -uncionalidades podemos crear# 9as -unciones de shell pueden reci4ir par5metros ,l mapa de -icheros y directorios en linux < @unciones +:

www.detodoprogramas.com

4party con las $aria4les especiales `%, `., ### Au2 $emos $arios ejemplos de -unciones
#!/bin/bash ## funciones

Taller Shell, comandos y programacin

# Antes que nada hay que definir las funciones, si no dara error # las funciones toman los parmetros con $numero, como el script # variable RESULTADO=0 # Una funcin que muestra valores por pantalla muestrapantalla () { echo "Valores: $0> $1 y $2 y $3" } # Puede usarse return pero solo para devolver nmeros sumame () { echo "Estamos en la funcin: ${FUNCNAME}" echo "Parametros: $1 y $2" RESULTADO=`expr ${1} + ${2}` return 0 } # Es posible la funcin recursiva boom () { echo "No ejecutes esto... " boom } # La llamada de se puede hacer as, sin parntesis muestrapantalla 3 4 "epa" # Llamamos a la funcin y si devuelve 0 es correcto. sumame 45 67 && echo "OK" || echo "Ocurri un error" echo "Resultado: ${RESULTADO} $!"

7i"rer,as
la hora de programar scripts de shell no es Aue existan herramientas para declarar li4rer2as, pero se pueden simular de cierta manera metiendo cdigo de -unciones en -icheros de scripts separados# ,ste ser2a un ejemplo de uso de li4rer2as, usando un -ichero con las -unciones ,l mapa de -icheros y directorios en linux < 9i4rer2as +;

www.detodoprogramas.com

4party mostradas anteriormente!


#!/bin/bash

Taller Shell, comandos y programacin

# No es que existan las libreras pero se puede simular # algo similar # Esta es la forma de importar funciones source libreria.sh

muestrapantalla 69 123 "epa" sumame 1337 3389 && echo "OK" || echo "Ocurri un error" echo "Resultado: ${RESULTADO} $!"

=e>ales
9as seales son un m>todo de los sistemas linux para intercomunicar procesos# 9as seales m5s -recuentes usadas por los usuarios son las de cancelar y matar procesos# Pero hay m5s y los procesos linux son capaces de capturar las seales para modi-icar su comportamiento# Desde un script de shell tam4i>n se pueden capturar las seales# ,ste ser2a un simple ejemplo de la captura de seales!
#!/bin/bash # seales funcion () { echo "Se ha recibido una seal: ${FUNCNAME} ${0}" #exit } # Lo primero es establecer que seales se atraparn. Lo hacemos con trap # Con esto evitaremos que se haga caso a Ctrl-C CTRL-Z # trap ":" INT QUIT TSTP # Esto es similar pero al recibir la seal dirigimos la ejecucin a la funcin trap "funcion" INT QUIT TSTP # Un bucle sin fin para probar while true do sleep 2

,l mapa de -icheros y directorios en linux < Seales

+7

www.detodoprogramas.com

4party
echo "ufff qu sueo..." done

Taller Shell, comandos y programacin

Colores
)sando la opcin <e del comando echo podemos cam4iar los colores de la terminal# Se puede hacer de -orma controlada, esta4leciendo un color y resta4leciendo el color anterior para cam4iar colores puntualmente# Para los colores se usan los cdigos &SI# ,ste ser2a un ejemplo del uso de los cdigos &SI!
#!/bin/bash ## Los colores ANSI # para darle color a los scripts debemos usar los cdigo ANSI # junto "con echo -e". Para meter el carcter especial escape # usamos \033 # Ejem: \033[0m : volver al color por defecto # \033[40m: color de fondo negro # \033[40m\033[32m: fondo negro primer plano verde # Esta es la muestra de colores, ejectalo para ver cmo queda echo -e "\033[40m\033[37m Blanco \033[0m" echo -e "\033[40m\033[1;37m Gris claro \033[0m" echo -e "\033[40m\033[30m Negro \033[0m (esto es negro)" echo -e "\033[40m\033[1;30m Gris \033[0m" echo -e "\033[40m\033[31m Rojo \033[0m" echo -e "\033[40m\033[1;31m Rojo claro \033[0m" echo -e "\033[40m\033[32m Verde \033[0m" echo -e "\033[40m\033[1;32m Verde claro \033[0m" echo -e "\033[40m\033[33m Marrn \033[0m" echo -e "\033[40m\033[1;33m Amarillo \033[0m" echo -e "\033[40m\033[34m Azul \033[0m" echo -e "\033[40m\033[1;34m Azul claro \033[0m" echo -e "\033[40m\033[35m Purpura \033[0m" echo -e "\033[40m\033[1;35m Rosa \033[0m" echo -e "\033[40m\033[36m Cyan \033[0m" echo -e "\033[40m\033[1;36m Cyan claro \033[0m" # Se pueden poner fondos de otro color: echo -e "\033[42m\033[31m Navarrux v1.0 echo -e "\033[40m\033[4;33m Amarillo

\033[0m" \033[0m"

,l mapa de -icheros y directorios en linux < Colores

48

www.detodoprogramas.com

4party

Taller Shell, comandos y programacin

?.)i"lio#raf,a4 referencias y enlaces


)i"lio#raf,a 9earning The 0ash Shell M (Z'eilly 0ash auic6 'e-erence < (Z'eilly 9inux Shell Scripting Kith 0ash < Sams )nix Shell Programming +'d < Sams Referencias man 4ash! manual de sistema de 4ash, Enlaces http!""es#tldp#org" http!""???#na$arrux#org http!""aula8#cuatro$ientos#org http!""???#cuatro$ientos#org bSaludos a Iigo Tejedor]

Distri4uido 4ajo licencia Copyle-t# http!""creati$ecommons#org"licenses"4y".#8"es"legalcode#es

,l mapa de -icheros y directorios en linux < Colores

4%

www.detodoprogramas.com

Potrebbero piacerti anche