Está en la página 1de 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################################################# #########################..
< %
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################################################### #####################+;
< .
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#
< +
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 HS 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
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 /
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#
eit
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
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 :
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 ;
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
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 <aux-
pstree
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 SKP#
,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
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)HH,&T, )TI9 para diagnostico y depuracion de
-ire?alls
,jemplos! iptra-
tcpdump
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 %%
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#pd-
lyn
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 %.
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 %+
4party Taller Shell, comandos y programacin
exit
FINAL
...
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
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
%/
4party Taller Shell, comandos y programacin
,l mapa de -icheros y directorios en linux < ccediendo a dispositi$os y particiones
%3
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 %:
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 %;
4party Taller Shell, comandos y programacin
linux~$ ls /lib/mo
(tabulacin)
linux~$ ls /lib/modules/
(tabulacin)
linux~$ ls /lib/modules/2.6.8-2-386
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 test.c texto.txt ejemplo.pdf test.o
linux~$ ls *.c
programa.c test.c
linux~$ ls *.?
programa.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 PTF se ejecutar5 sin
pro4lemas#
linux~# uptime
20:49:05 up 2:35, 2 users, load average: 0.00, 0.00, 0.00
linux~#
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
4party Taller Shell, comandos y programacin
dom jun 3 20:49:37 CEST 2007
linux~#
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
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 CMD
3593 pts/0 00:00:00 bash
3767 pts/0 00:00:00 xmms
3849 pts/0 00:00:00 ps
linux~# kill -9 3767
linux~# ps
PID TTY TIME CMD
3593 pts/0 00:00:00 bash
3849 pts/0 00:00:00 ps
linux~#
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 .%
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 ..
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 .+
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
4party Taller Shell, comandos y programacin
echo -n "Este script te dice: "
echo ${SALUDO}
: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 "Echemos un ojo a las variables "
echo "Un nmero: ${una_variable}"
echo "Un nombre ${MI_NOMBRE}"
echo "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 ./
4party Taller Shell, comandos y programacin
# Otras variables especiales
# $# : Nmero de argumentos
echo "Me has pasado $# argumentos"
# $@ : grupo de parmetros del script
echo IDa: ${!} y $@
# 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
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 .:
4party Taller Shell, comandos y programacin
# != : desigualdad
# Pruebas
VALOR1=23
VALOR2=45
# 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 .;
4party Taller Shell, comandos y programacin
test ${otrobool} || echo "Ahora es falso"
# Mediante && podemos encadenar comandos
#who && ps -axf && echo "OK"
## comparaciones : -eq, -ne, -lt, -le, -gt, or -ge
valor=6
test $valor -le 6 && echo "Se cumple"
# Asignaciones
nuevo=${valor}
test ${nuevo} -eq ${valor} && echo "Son los mismo"
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
4party Taller Shell, comandos y programacin
operaciones
fi
D tam4i>n tenemos el i-<elsei-###<else
if condicin
then
operaciones
elif condicin
then
operaciones
else
operaciones
fi
,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
4party Taller Shell, comandos y programacin
fi
## Estructura if-elseif
# Vamos a usar "read" para pedirle datos al usuario
echo -n "Mete un valor: "
read VALOR1
echo -n "Mete otro valor: "
read 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 si no se cumple la condicin
# test condicin || operacion
# Ejecutar operacin si se cumple
# test condicin && 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 +%
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 +.
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 ++
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
4party Taller Shell, comandos y programacin
echo "Participantes en la 4party: "
for i in ${NOMBRES}
do
echo ${i}
done
## 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 +/
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
4party Taller Shell, comandos y programacin
echo "Valor del contador: ${cont}"
done
echo "Valor final del contador: ${cont}"
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 +:
4party Taller Shell, comandos y programacin
con las $aria4les especiales `%, `., ###
Au2 $emos $arios ejemplos de -unciones
#!/bin/bash
## funciones
# 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 +;
4party Taller Shell, comandos y programacin
mostradas anteriormente!
#!/bin/bash
# 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
4party Taller Shell, comandos y programacin
echo "ufff qu sueo..."
done
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 \033[0m"
echo -e "\033[40m\033[4;33m Amarillo \033[0m"
,l mapa de -icheros y directorios en linux < Colores 48
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%

También podría gustarte