Você está na página 1de 15

UNIVERCIDA PUPULAR DE NICARAGUA

UPONIC
FACULTA DE INFORMATICA

SISTEMA OPERATIVO LINUX


GUIA DE AUTOPREPARACION

AUTOR: ARLEN TAMARA RUIZ MORAN


DOCENTE: ING JUAN ANTONIO RIVAS SILVA
FECHA: 01/09/2016

Explique brevemente cmo se organiza el sistema de ficheros en Ubuntu Qu diferencia hay con
respecto a lo que usted conoce de organizacin de ficheros en Windows?
Estos ficheros estn organizados en lo que se conoce como un Sistema de ficheros. Aunque
GNU/Linux es capaz de trabajar con distintos tipos (incluyendo FAT y NTFS) sus sistemas de ficheros
nativos son ext2, ext3 o ext4 (Ubuntu se instala sobre ext3).
Si desde Nautilus pulsamos en el panel lateral el acceso al sistema de archivos veremos el rbol
completo de directorios. En la barra de ttulo de la ventana veremos el smbolo / indicando que
estamos en la raz del rbol. En GNU/Linux esta es la nica raz, no existen letras de unidad para
diferentes dispositivos como s ocurre en otros sistemas, todo (CD-ROM, disquete, memoria USB,
etc.) cuelga de aqu.

Esta estructura se encuentra fuertemente jerarquizada para permitir una mayor familiaridad con el
sistema para los usuarios, pero sobre todo, para que los programadores puedan ubicar los ficheros de
las aplicaciones sin preocuparse de la distribucin en la que funcionar finalmente su programa.
Trabajando

con

el

Sistema

de

Archivos

en

Linux

Diferencias entre un sistema de archivos en Linux y Windows


A pesar de que se parezcan de muchas maneras, el sistema de archivos en Linux ha tenido algunas
diferencias considerables, aqu algunas:

En Windows los sistemas de archivos son representados por letras. Por ejemplo C: es el disco
duro, X: puede representar una unidad de red, E: puede representar la lectora de DVD y F: un disco
porttil USB. En Linux todos los discos estn incluidos dentro de la jerarqua del sistema de archivos.
De hecho una particin como /usr (donde se guardan los comandos ms usados de Linux) puede
estar en un disco y el /home (donde se guardan los archivos de usuario) en otro disco.

Se usa la barra diagonal (/) en vez de la barra invertida (\) para separar nombres de directorios
en Linux. De esta manera, C:\home\juan de Windows, sera un /home/juan en un sistema Linux.

Los nombres de archivo en Windows tienen sufijos o extensiones, tales como .txt, .exe, .doc.
Estos no son usados y no tienen significado en Linux. Sin embargo, pueden ser usados para
identificar cierto tipo de archivos.

Cada archivo y carpeta en un sistema de archivos en Linux tiene permisos de usuario y grupo
asociados al mismo. La seguridad varia un poco en este sentido con Windows. Debido a que
Windows comenz como un sistema mono usuario. Los permisos de archivo no fue construido en
estos sistemas. Desarrollos posteriores agregar funcionalidades como atributos de archivo o
carpetas para manejar esta carencia.

Mencione los tres tipos de permiso y roles de Ubuntu


Permisos
Ejecucin: si es para un archivo ser ejecutable y si es para un directorio significa que podemos pasar
por l. Se representa por una X.
Lectura: si es para un archivo significa que podemos leerlo y si es para un directorio es que podemos
leerlo tambin y se representa por una R
Escritura: si es para un archivo ser que podemos escribir en l y si es para un directorio significa que
podes crear ficheros dentro del representado por una W.
Roles
Usuarios: el propietario del archivo
Grupo: grupo al que pertenece el archivo
Otros: los dems usuarios
Qu comando se utiliza para cambiar permisos a archivos en Ubuntu? Qu sintaxis se utiliza?
El comando que se utiliza para cambiar los permisos en Ubuntu se llama chmod .donde u:
corresponde al dueo del archivo, g: corresponde al grupo, o o a: corresponde al resto de los
usuarios, a para todos (all) y o para otros (others)

Sintaxis:
Chmod {a,u,g,o,} {+,-} {r,w,x} nombre del archivo.
El comando chmod tambin acepta otros valores para cambiar los permisos. Es probable que hayas
visto algo como:
Sudo chmod 751[nombre del archivo]
Qu papel juegan los repositorios en Ubuntu?
Los repositorios cumplen un rol muy importante ayudan a mantener ms eficientemente nuestra
instalacin que estn disponibles para ser instalado a travs de internet. Esto hace que es muy fcil
instalar nuevos programas muy seguros, ya que cada programa que instalas esta testeado a fondo y
creado especficamente para Ubuntu.
Qu es un paquete, y que extensin tienen?
En dependientes de la distribucin en la que se estn usando; son usados comnmente para la
compresin de aplicaciones en diferentes formatos para distintos medios de instalacin. Estos son un
conjunto de ficheros que contienen instrucciones para la reconstruccin de la aplicacin dentro del
sistema nuevo, dentro de estos, podemos encontrar, Paquetes Binarios y Paquetes de cdigo Fuente.
Los Paquetes Binario, contienen, como se menciona, la informacin necesaria para reconstruir una
aplicacin en un sistema nuevo, sin necesidad de encontrarse en la misma computadora; los ms
comunes son:

DEB: Contienen ejecutables, archivos de configuracin, pginas de informacin, derechos


de copyright y otras documentaciones, los paquetes Debian se colocan en archivos .deb.
El nombre del paquete debe contener:
<NumeroDeVersin>-<VersinDeDebian>-<ArquitecturaDeDebian>.deb

Investigacin como guardar un archivo scrip


os Scripts de Bash deben tener siempre como primera linea del guin el texto, para que elSistema
Operativo ejecute
la
accin
usando
el
programa
Bash.
#!/bin/bash
Una vez escrito el Script y guardado en el disco en alguno de los directorios "bin" con el nombre
y permiso de ejecucin apropiados, se invoca, escribiendo en la consola el nombre del guin. Si el
guin tiene una interfaz grfica se invoca como otro programa cualquiera, uno o dos clic sobre el guin
o su icono. Este puede escribirse en cualquiera de los editores de texto de Linux, por ejemplo Kwrite y
ser
ya
un
guin
funcional
cuando
se
salve
a
alguno
de
los
"bin".
Nota: Es buena prctica cuando se escribe un guin salvarlo apenas se hayan escrito las primeras
lnea para ir comprobando su funcionamiento e ir corrigiendo los problemas.
VARIABLES
Es impensable elaborar Scripts de Bash sin el uso de las variables. Una variable es una estructura de
texto (una letra, un nmero o sucesiones de ellos) que representa alguno de los elementos que varan
en valor y/o significado en el entorno de la Shell, sirviendo como elemento bsico de entrada/salida de
valores a y desde los comandos en su ejecucin consecutiva. Para invocar una variable se utiliza el

carcter
Exixten

especial $ precediendo
dos

al
tipos

nombre

de
de

la

propio

Bash

variable.
variables:

1. Variables intrnsecas de Bash.


Estas

son

elaboradas

por

defecto

por

el

son:

$0 -> Nombre del guin

$1....$n -> Variables que almacenan los n argumentos (opciones) proporcionados al comando.

$# -> Variable que contiene el total de los argumentos proporcionados.

$* -> Conjunto de los argumentos.

$? -> Valor de ejecucin del comando anterior, si es cero es que el comando anterior se ejecut
sin errores, de lo contrario hubo algn error.
$$ -> Identifica el proceso del guin.
$! -> Identifica el ltimo proceso arrancado en el trasfondo (background).
2. Variables creadas por el programador.
Las variables pueden ser creadas en cualquier momento, pero siempre antes de su utilizacin de
manera
muy
simple,
se
escribe:
nombre_variable=valor_variable
En cualquier momento posterior a la creacin si se coloca $nombre_variable dentro del entorno de la
Shell
el
sistema
colocar
all
valor_variable.
SALUDO=Bienvenido
En cualquier momento posterior si se pone $SALUDO, Bash colocar ah Bienvenido.
Una variable tambin puede ser la salida de un comando si ponemos al principio y final del mismo un
acento
invertido.
SALIDA=`comando`
Le indicar al sistema que donde se escriba $SALIDA debe poner la salida de ese comando. Es
prctica comn utilizar maysculas para las variables a fin de identificarlas fcilmente dentro del guin.
Cuando se ejecutan Scripts que pueden ser "hijos" de otro guin en ocasiones es necesario exportar
las
variables,
esto
se
hace
escribiendo:
export
nombre_variable
3. Caracteres especiales.
Existe un grupo de caracteres especiales (tambin llamados meta caracteres) que tienen significado
propio
para
Bash.
Algunos
son:

\ -> Le indica a Bash que ignore el carcter especial que viene despus.
" " -> Cuando se encierra entre comillas dobles un texto o una variables si esta es una frase
(cadena de palabras) Bash lo interpretar como una cadena nica.
$ -> Identifica que lo que le sigue es una variable.
' ' -> Las comillas simples se usan para desactivar todos los caracteres especiales encerrados
dentro de ellas, as tenemos que si escribe '$VARIABLE' Bash interpreta literalmente lo escrito y no
como variable.
# -> Cuando se coloca este carcter dentro de una linea del guin, Bash ignora el resto de la
linea. Muy til para hacer comentarios y anotaciones o para inhabilitar una linea de comandos al hacer
pruebas.

; -> Este carcter se usa para separar la ejecucin de distintos comandos en una misma linea
de comandos.
`` -> Se utiliza como se explic en el punto anterior, para convertir la salida de un comando en
una variable. El comando en cuestin se ejecuta en una sub shell.
Tambin estn |, (), !, >, <, cuyo significado se ver ms adelante. El espacio es otro carcter especial
y se interpreta por bash como el separador del nombre del programa y las opciones dentro de la linea
de comandos, por esta razn es importante encerrar entre comillas dobles el texto o las propias
variables
cuando
son
una
frase
de
varias
palabras.
Otro carcter que debe evitarse en lo posible su uso es el guin (-) ya que para la mayora de los
programas se usa para indicarle al propio programa que lo que sigue es una de sus opciones, de
manera tal por ejemplo, si usted crea un archivo con nombre -archivo (en caso que pueda) despus
ser difcil borrarlo ya que rm (programa que borra) tratar el archivo como una de sus opciones (al
"ver" el Script) y dar de error algo as, "Opcin -archivo no se reconoce".
4. Palabras especiales.
Hay un grupo de palabras que tienen significado especial para bash y que siempre que se pueda
deben evitarse cuando se escriben lineas de comandos para no crearle "confusiones" algunas son:
exit, break, continue, true, false, return etc... cuyo significado es ms o menos as:

exit -> Se sale del guin

break -> Se manda explcitamente a salir de un ciclo

continue -> Se manda explcitamente a retornar en un ciclo

return -> Como exit pero solo se sale del comando u operacin sin cerrar el guin

true -> Indica que una condicin es verdadera

false -> Indica que una condicin es falsa


5. Argumentos propios de Bash.
Bash como programa tiene algunos argumentos tiles y propios que se usan con frecuencia en la
elaboracin de Scripts en los condicionales vinculados a la determinacin de elementos sobre los
archivos, variables, cadenas de palabras o cadenas de pruebas, los mas comunes son:
1.
Argumentos
de
Archivos
----->
Cierto
si....
(salida
0)
-d
-------------------------------->
Archivo
existe
y
es
un
directorio
-c
--------------------------------->
Archivo
existe
y
es
de
caracteres
-e
--------------------------------->
Archivo
existe
-h
--------------------------------->
Archivo
existe
y
es
un
vnculo
simblico
-s
--------------------------------->
Archivo
existe
y
no
est
vaco
-f
--------------------------------->
Archivo
existe
y
es
normal
-r
--------------------------------->
Tienes
permiso
de
lectura
del
archivo
-w
-------------------------------->
Tienes
permiso
de
escritura
en
el
archivo
-x
-------------------------------->
Tienes
permiso
de
ejecucin
del
archivo
-O
------------------------------->
Eres
propietario
del
archivo
-G
------------------------------->
Perteneces
al
grupo
que
tiene
acceso
al
archivo
-n
-------------------------------->
Variable
existe
y
no
es
nula
Archivo1
nt
Archivo2
--------->
Archivo1
es
mas
nuevo
que
Archivo2
Archivo1
-ot
Archivo2
-------->
Archivo1
es
mas
viejo
que
Archivo2
2.
-z
-n
cadena1
cadena1
cadena1

Agumentos
de
cadenas
----->
Cierto
si
------------------------------>
La
cadena
est
vaca
------------------------------>
La
cadena
no
est
vaca
=
cadena2
---------->
Si
las
cadenas
son
iguales
!=
cadena2
--------->
Si
las
cadenas
son
diferentes
<>
Si
la
cadena
1
va
antes
en
el
orden
lexicogrfico

cadena1

>cadena2

----------->

Si

la

cadena

va

despues

en

el

orden

lexicogrfico

6. Entrada / Salida.
En algunas ocasiones ser necesario leer ciertas variables desde el teclado o imprimirlas a la pantalla,
para imprimir a la pantalla se pueden invocar dos programas en la linea de comandos:

echo

printf (que es un echo mejorado)


para
leer
desde

el

teclado

se

usa:

read
Si hacemos un read sin asignar variable, el dato de almacena en $REPLY una variable del sistema.
Tanto
el
comando echo como read tienen
sus
propias
opciones.
Ejemplos:
1. Si creamos en una linea del Script una variable como un comando y queremos imprimir la variable a
la
pantalla
podemos
hacer
algo
as:
VARIABLE=`comando`
echo
"$VARIABLE"
La palabra $VARIABLE est puesta entre comillas dobles para que se imprima todo el texto ignorando
los
espacios
entre
palabras.
2.
Si
escribimos
en
una
linea
del
guin
read
PREGUNTA
habremos creado una variable de nombre PREGUNTA as es que si luego ponemos
echo
"$PREGUNTA"
Se imprimir a la pantalla lo que se escribi en el teclado al presionar la tecla Enter.
Con los elementos tratados hasta aqu ya podemos escribir nuestros primeros Scripts
Script
#!/bin/bash
echo
Cuando
se

1
corre

este

Script
2 ->
#!/bin/bash
VARIABLE=Hola
echo
Ntese
la
variable
Script
3 ->
#!/bin/bash
VARIABLE=Hola
SALUDO=mundo
echo
En

los

Script
4 ->
#!/bin/bash
VAR=auto
echo
"Me
echo
'Me
echo
"Me

guin

Lo

entre

Hola
imprimir

se

mismo

comillas

Cuando

la

pantalla

usando

dobles

se

para

usan

que

una

imprima

mas

Hola

de

mundo
mundo
variable

mundo
"$VARIABLE"
todo
el
texto.
una

variable

"$VARIABLE""$SALUDO"

tres
Si

casos
se

compr
compr
compr

se

usan
un
un
un

imprimir
caracteres
$VAR"
$VAR'
\$VAR"

a
especiales

Imprimir
Imprimir
Imprimir

la
la
Me
Me
Me

pantalla

Hola

mundo

cosa

puede

cambiar

compr
compr
compr

un
un
un

auto
$VAR
$VAR

Note como las comillas simples y el carcter \ hacen que Bash ignore la funcin del carcter especial
$. Siempre las comillas simples harn que se ignore todos los meta caracteres encerrados entre ellas
y
\
solo
el
que
sigue
despus.
7. Condicionales.
Los condicionales son claves para "explicarle" a la mquina como debe proceder en una tarea
cualquiera, esto se hace casi como si se estuviera explicando una tarea a ejecutar a otra persona.

if then fi
El condicional por excelencia tiene seis palabras claves que son if, elif, else, then y fi. Donde las
palabras tienen un significado comunicativo (en Ingls) casi literal, tal y cual se tratara con otra
persona
y
que
Bash
por
defecto
las
entienda
con
ese
significado.

if -> si condicional (de si esto o lo otro)

elif -> tambin si (contraccin de else if)

else -> De cualquier otra manera

then -> Entonces

fi -> if invertido, indica que se acab la condicional abierta con if


Solo son imprescindibles en la estructura del Script if, then y fi. Supongamos ahora que es usted el
jefe de una oficina y tiene una secretaria y que por alguna razn le han pedido que enve una copia de
cualquier documento que lo identifique; normalmente le dira a la secretaria algo as:
"Maria, por favor, busca en el archivo alguna identificacin" (condicin a evaluar)
if "si es una copia del pasaporte" (primer resultado de la condicin); then (entonces)
"
envala
por
fax
a...."
(equivalente
al
comando
a
ejecutar)
elif "si es de la licencia de conduccin" (segundo resultado de la condicin); then
"envala
por
correo"
(otro
comando
a
ejecutar)
elif " si es del carnet de identidad" (tercer resultado de la condicin); then
"envala
con
un
mensajero
"
(otro
comando
diferente)
else
"de
cualquier
otra
manera"
"pasa
un
fax
diciendo
que
la
enviar
maana"
(otro
comando)
fi
Observe que la accin a ejecutar (equivalente al comando) se hace si la condicin se evala como
verdadera de lo contrario se ignora y se pasa a la prxima, si ninguna es verdadera se ejecuta
finalmente la accin despus del else. La sintaxis de bash se debe tener en cuenta a la hora de
escribir el Script o de lo contrario Bash no entender lo que usted quiso decirle, Pongamos ejemplos
de
guiones
reales
Script
#!/bin/bash
VAR1=Pablo
VAR2=Pedro
if
[
echo
else
echo
fi

"$VAR1"

=
Son
Son

"$VAR2"

];

then
iguales
diferentes

Los corchetes son parte de la sintaxis de Bash y en realidad son un atajo (shortcut) al programa test
que es el que ejecuta la accin de comparacin. Observe siempre los espacios vacos entre los
elementos que conforman la linea de comandos (excepto entre el ltimo corchete y el ;), recuerde que
ese espacio vaco por defecto Bash lo interpreta como final de un elemento y comienzo de otro. Si
corre este guin siempre se imprimir a pantalla Son diferentes, ya que la condicin es falsa. Pero si

cambia el valor de VAR2=Pablo entonces se imprime Son iguales. Guin 6 Un guin que verifica si
existe un directorio y si no existe lo crea e imprime mensajes a pantalla comunicando la accin
ejecutada.
#!/bin/bash
DIR=~/fotos
(crea
como
variable
el
directorio
/home/fotos)
if
[
!
-d
"$DIR"
];
then
(verifica
si
no
existe
el
directorio)
mkdir
"$DIR"
(si
la
condicin
es
cierta,
no
existe
el
directorio,
lo
crea)
if [ $? -eq 0 ]; then (verifica si la accin se ejecut sin errores, de serlo imprime lo que sigue)
echo
"$DIR"
ha
sido
creado..."
else
(de
lo
contrario
imprime)
echo
"Se
produce
un
error
al
crear
"$DIR"
fi (Se cierra la condicin abierta en la realizacin del directorio segundo if)
else
(
de
lo
contrario,
relativo
al
primer
if)
echo
"Se
usar
"$DIR"
existente"
fi
En

este

guin

pueden

verse

varias

cosas

nuevas:

1. El carcter ! niega la accin, si se hubiera escrito if [ -d "$DIR" ] lo que se estaba evaluando era la
condicin existe el directorio"$DIR"? pero al colocar ! se evala lo contrario.
2.
El
carcter
~
significa
el
/home
del
usuario.
3. La expresin -eq se utiliza cuando quieren compararse valores numricos, y significa =
4.
Se
usa
una
de
las
variables
del
sistema
"$?"
explicada
ms
arriba.
5. Pueden utilizarse unos condicionales dentro de otros siempre que se cierren apropiadamente.
#!/bin/bash
echo
read
if
echo
elif
echo
elif
echo
else
echo
fi

"Diga
[

si

"$VAR"
[

"$VAR"

"$VAR"
puede

"No
"Lo

que

=
"Escribiste
=
"Escribiste
=

si

];

no

];

""

];

dejarlo
escribi

en
no

se

no:"
VAR
then
-si-"
then
-no-"
then
blanco"
acepta"

Observe que se est evaluando varias opciones de la misma condicin por lo que lo apropiado es
incorporar los respectivos elif dentro de la misma condicional. Un elemento nuevo que se incorpora
aqu es la condicin " " que quiere decir "la variable est vaca", en este caso, cuando no se escribi
nada.

case-in esac
Cuando una variable puede puede adquirir varios valores o significados diferentes, ya hemos visto
cmo puede usarse la palabra elif para hacer diferentes ejecuciones de comandos dentro de una
misma condicional if-then-fi de acuerdo al valor de la variable. Una forma de realizar la misma accin
sin escribir tantas lineas de condicionales elif y con ello disminuir el tamao del guin es la utilizacin
de la sentencia case-in-esac. Esta sentencia permite vincular patrones de texto con conjuntos de
comandos; cuando la variable de la sentencia coincide con alguno de los patrones, se ejecuta el
conjunto de comandos asociados. La sintaxis de la sentencia case-in esac es como sigue
case
posibilidad
posibilidad

1)
2)

"uno
"uno

"nombre_variable"
o
ms
o
ms

comandos"
comandos"

in
;;
;;

posibilidad
esac

n)

Script
#!/bin/bash
echo
read
case
s)
no)
*)
echo
esac

"uno

ms

comandos"

;;
8

"Diga
echo
echo
"Lo

si

"$VAR"
"Escribiste
"Escribiste
escribi

que

-si-"
-no-"
no

se

acepta"

no:"
VAR
in
;;
;;
;;

Este Script es el mismo que el Script 7 pero utilizando la sentencia case-in-esac Observe que el
carcter (*) utilizado en la ltima opcin significa "patrn no contemplado" en este caso.
8. Funciones
Como mecanismo de estructuracin en la codificacin de Scripts, existe la posibilidad de crear
funciones. Su definicin exige la definicin de un nombre y un cuerpo. El nombre que debe ser
representativo , es seguido de apertura y cierre de parntesis, mientras que el cuerpo se delimita con
llaves.
La
sintaxis
es
la
siguiente.
nombre_funcin
()
{
uno
o
ms
comandos
}
Una vez definida la funcin se utiliza como si de un comando se tratase, invocndolo con el nombre
de la funcin. Hay que hacer una invocacin de la funcin ya definida para que se ejecute el cdigo en
su interior y se convierta en operativa. Las funciones son muy tiles cuando segmentos del cdigo del
Script son repetitivos, de tal forma solo se escriben una vez y se invocan todas las veces que haga
falta,
practicando
el
divino
arte
de
la
recursin.
Creando
ayuda
{
echo
}

una
(se

()
"Las

opciones

funcin
la

define

son

no,

funcin
luego

apriete

simple:
ayuda)
Enter"

Despus de creada y activada la funcin, cada vez que necesitemos la "ayuda" dentro del guin solo
colocamos la palabra ayuda como si se tratase de un comando mas y Bash ejecutar el cdigo
incluido dentro de la funcin, es decir imprimir el texto "Las opciones son s o no, luego apriete
Enter". Las funciones pueden ser definidas en cualquier orden, pueden ser tantas como haga falta y
pueden contener un paquete relativamente complejo de comandos. Un programador que ha pensado
la estructura del Script antes de empezarlo puede y de hecho se hace, crear todas las funciones que
necesitar
al
empezar
el
guin.
Pruebe
lo
siguiente
Script
#!/bin/bash
salir
{
exit
}
hola()
{
echo
}

9
()

#(Se

crea

la

funcin

salir)
#(comando)

#(Se

crea

la
Hola

funcin

Hola)
#(comando)

hola
salir
echo

(Se

(
"Esto

Se
no

invoca
invoca
se

la
la

funcin
funcin
imprime

Hola)
salir)
nunca"

Ver que el ltimo echo no se imprime ya que primero se invoca la funcin hola y luego la funcin salir
que cierra el guin (exit). Trate ahora poniendo un comentario (#) a la linea que invoca la funcin salir
(linea 11) y note la diferencia, vera como se imprime el ltimo echo. Observe tambin como se han
comentado aquellas cosas que no son parte integrante del guin pero que se pueden escribir para
hacer
aclaraciones
o
anotaciones
de
inters.
9. Ciclos, lazos o bucles

While-do done
La sentencia while-do done se utiliza para ejecutar un grupo de comandos en forma repetida mientras
una
condicin
sea
verdadera.
Su
sintaxis
es:
while
lista
de
comandos
1
do
lista
de
comandos
2
Mientras la condicin de control (lista de comandos1) sea verdadera, se ejecutaran los comandos
comprendidos entre do y done en forma repetida, si la condicin da falsa (o encuentra una interrupcin
explcita dentro del cdigo) el programa sale del bucle (se para) y continua la ejecucin por debajo del
while. Un ejemplo de la utilidad de este lazo es la posibilidad de poder escoger varias opciones de un
men sin tener que correr el guin para cada opcin, es decir se escoge y evalua una opcin y el
programa no se cierra, vuelve al men principal y se puede escoger otra opcin, tantas veces como
sea necesario. Veamos un ejemplo de como elaborar un men de opciones.
#!/bin/bash
while
[
"$OPCION"
!=
do
echo
"[1]
Listar
echo
"[2]
Ver
directorio
de
echo
"[3]
Crear
echo
"[4]
Crear
echo
"[5]
read
-p
"Ingrese
una
opcin:
case
$OPCION
1)
2)
3)
read
-p
"Nombre
del
directorio:
"
mkdir
4)
if
id
|
grep
then
read
-p
"Nombre
del
usuario:
"
useradd
else
echo
"Se
necesitan
permisos
fi;;
5);;
*)
echo
"Opcin
ingresada
invalida,
intente
esac
done
exit
Descripcin

del

"

]
archivos"
trabajo"
directorio"
usuario"
Salir"
OPCION
in
ls;;
pwd;;
DIRECTORIO
$DIRECTORIO;;
uid=0

NOMBREUSUARIO
$NOMBREUSUARIO
de

root"
de

nuevo";;
0
Script:

1. En la primera linea condicionamos el lazo a que la opcin escogida sea diferente de 5.


2. Luego se hace una lista de echos de las opciones desde 1 hasta 5 con su descripcin para que
sean
imprimidas
a
la
pantalla
y
as
poder
escoger
alguna.
3. Le sigue el comando read para que lea del teclado la opcin escogida (variable OPCION), a read se
le ha agregado -p que hace que imprima un mensaje, en este caso imprime Ingrese una opcin.
4. Para ahorrar lineas del guin se elabora un case con los comandos que deben ejecutarse en cada
caso ls para listar los archivos [1], pwd (present work directory) para ver directorio de trabajo [2], otro
read para escribir el nombre del directorio que quiere crear [3] y hacer la variable DIRECTORIO
seguido por mkdir que crea el directorio, luego se crea una condicional if-fi para chequear si el usuario
tiene permisos de root, necesario para la opcin [4] de crear un usuario rechazndolo de lo contrario,
despues viene la opcin [5] vaca que ejecuta el comando exit 0, finalmente se incluye "cualquier otra
cosa"
con
el
carcter
*
Este guin resulta interesante porque se usan las dos formas de compactar el guin vistas hasta
ahora, la sentencia case-in esac y la while-do done. Adems empiezan a aparecer incluidos en los
comandos algunos de los programas muy usados de Linux al escribir guiones.

until-do done
La sentencia until-do done es lo contrario de while-do done es decir el lazo se cierra o para, cuando la
condicin sea falsa. Si le parece que ambas son muy parecidas est en lo cierto. En ambos casos se
pueden elaborar bucles o ciclos infinitos si la condicin de control es siempre verdadera o falsa segn
el caso, veamos Lazos infinitos Bucles infinitos son aquellos donde la ejecucin continua dentro del
bucle
indefinidamente,
veamos
cmo
hacer
un
bucle
infinito
mediante while:
while
true
do
comando
1
comando
2
comando
n
done
La condicin siempre es verdadera y se ejecutara el bucle indefinidamente, mediante untilsera as:
until
false
do
comando
1
comando
2
comando
n
done
Existe la posibilidad de salir de un bucle, independientemente del estado de la condicin, el
comando break produce el abandono del bucle inmediatamente. Veamos el guin anterior sobre la
creacin
de
un
men
utilizando
un
lazo
infinito
y
el
comando break
while
true
do
echo
"[1]
Listar
archivos"
echo
"[2]
Ver
directorio
de
trabajo"
echo
"[3]
Crear
directorio"
echo
"[4]
Crear
usuario"
echo
"[5]
Salir"
read
-p
"Ingrese
una
opcin:
"
OPCION
case
$OPCION
in
1)
ls;;
2)
pwd;;
3)
read
-p
"Nombre
del
directorio:
"
DIRECTORIO
mkdir
$DIRECTORIO;;
4)
if
id
|
grep
uid=0

then
read
useradd
else
echo
fi;;
5)
echo
break;;
*)
echo
esac
doGuin
exit

-p

"Nombre

del

"Se

usuario:

necesitan

NOMBREUSUARIO
$NOMBREUSUARIO

permisos

"Abandonando
"Opcin

"

de

root"

el

ingresada

invalida,

programa..."

intente

de

nuevo";;
11ne
0

for-in-done
Es otro tipo de ciclo o lazo disponible, la diferencia con los anteriores es que no se basa en una
condicin, sino que ejecuta el bucle una cantidad determinada de veces, su sintaxis es la siguiente:
for
variable
in
arg
1
arg
2
......arg
n
do
comando
1
comando
2
comando
n
done
Ejemplos
for
do
echo
done

LETRA

in

de

f
$LETRA

En este guin el comando echo se ejecutara tantas veces como argumentos se hayan puesto despus
del in, por lo tanto imprimir seis lineas cada una con una letra de la a a la f.
for
if
cd
rm
cd
fi
done

ARCHIVO
-d

in
$ARCHIVO

];

*
then
$ARCHIVO
*.tmp
..

Este es un guin entra en todos los subdirectorios del directorio actual de trabajo y borrar todos los
archivos .tmp (temporales). En este caso el carcter * se usa en la primera linea con el significado
"tantas veces como sea necesario" y en la penltima linea como "cualquier cosa".
10. Redireccionamiento.
Es frecuente la necesidad de redirigir resultados de la ejecucin de un comando a diferentes lugares,
que pueden ser los descriptores de ficheros stdin, stdout y stderr, a la entrada de otro comando o a un
archivo en el disco duro, esto se llama redireccin y es muy til en la escritura de guiones.
1.

Los

descriptores

de

archivos

En Bash al igual que en cualquier otro programa de consola de Linux tenemos tres flujos o
descriptores
de
archivos
abiertos
por
defecto:

La entrada estndar (STDIN)

La salida estndar (STDOUT)

El error estndar (STDERR)


El primero puede ser utilizado para leer de l, y los otros dos para enviar datos hacia ellos.
Normalmente STDIN viene del teclado de la terminal en uso, y tanto STDOUT como STDERRvan
hacia la pantalla. STDOUT muestra los datos normales o esperados durante la ejecucin,
ySTDERR se utiliza para enviar datos de depuracin o errores. Cualquier programa iniciado desde el
shell, a menos que se le indique explcitamente, hereda estos tres descriptores de archivo
permitiendole
interactuar
con
el
usuario.

Enviar STDOUT a un archivo


En ocasiones necesitamos enviar la salida estndar a un archivo y no a la pantalla, ya sea porque es
muy grande para "manejar a ojo" o porque nos interesa guardarla a disco duro. Para enviar la salida
estndar a un archivo usamos > con lo que se sobreescribe el archivo si ya existe, o >> que solo
agrega
los
datos
de
salida
al
final
del
archivo
ya
existente.
#!/bin/bash
ls
-R
/home/mis_fotos
>
/tmp/indice
Crear un archivo llamado /tmp/indice donde estar el listado de los archivos bajo /home/mis_fotos.

Tomar STDIN de un archivo


Si queremos que un proceso tome su entrada estndar de un archivo existente usamos <>

Enviar STDERR a un archivo


Si queremos enviar la salida de errores a un archivo se procede igual que lo que se mencionaba con
respecto a la salida
estndar pero
se
usa
&> o &>> segun el
caso.

Enviar STDERR a STDOUT


Para
esto
se
escribe
al

En

Enviar STDOUT a STDERR


este
caso
se
escribe

final

al

de

final

la

de

linea

la

linea

de

de

comandos

comandos

2>&1.

1>&2

2.Entubado
Las tuberas se utilizan para enviar la salida de un comando o proceso a la entrada de otro, esto es
con frecuencia necesario para completar una accin iniciada con un comando que debe ser
completada con otro. Es simple el modo de operar, solo se coloca el carcter | en la linea de
comandos entre un programa y otro. Este carcter (|) se conoce como tubo (pipe)
#!/bin/bash
file
-b
"$1"
|
grep
-i
"vorbis"
>/dev/null
2>&1
if
[
$?
-eq
0
];
then
oggdec
"$1"
echo
"Hecho"
else
echo
"Archivo
no
soportado"
exit
fi
Este guin convierte a wav cualquier archivo de audio ogg. Primero se invoca a file para que analice el
tipo de archivo correspondiente a la variable $1 que como ya se sabe es el primer argumento
introducido en la linea de comandos (por ejemplo la ruta hasta un archivo). Luego la salida de file se
entuba al programa grep que determina si dentro del archivo aparece la palabra vorbis (caso de los
archivos de audio ogg). El condiciomal if- then-fi chequea que sea cierto (es decir la palabra vorbis si
exista, por lo que es un archivo ogg de audio), entonces se decodifica a wav con el comando oggdec,
de lo contrario se imprime que es un archivo no soportado. Tanto la salida estndar como la de errores

se enva a /dev/null, un dispositivo que "desaparece" la informacin suprimiendo la salida por pantalla.
Esto es conveniente y saludable en muchas lineas de comandos cuando la salida puede generar gran
cantidad de informacin tanto de salida estndar como de errores y estos no nos interesan. Solo se
escribe
>/dev/null
2>&1.
11. Globales y expansiones.
1.
Globales
Estos son aliados cuando uno quiere ahorrarse teclazos y funcionan como "generalizadores" de
cosas,
los
globales
mas
comunes
son:
1.
~ Le dice a Bash que es el directorio home del usuario.
2.
* Significa "todo lo que puedas incluir ah" de forma tal que si ponemos el comando ls ~/*.wav
listar todos los archivos .wav que estn en el directorio home del usuario. Ahora si escribimos ls ~/m*
nos listar todos los archivos de home que empiecen con m.
3.
. Un punto en el entorno de la shell significa "el directorio donde estamos trabajando"

Você também pode gostar