Introduccin a Shell
Arquitectura de capas
Shell: Intrprete de rdenes o intrprete de comandos
es el programa informtico que provee una interfaz de
usuario para acceder a los servicios del sistema
operativo.
TIPOS DE INTRPRETES DE COMANDOS
De lneas texto (CLI, Command-Line Interface,
interfaz de lnea de comandos),
Grficos (GUI, Graphical User Interface, interfaz
grfica de usuario),
De lenguaje natural (NUI, Natural User Interface,
interfaz natural de usuario).
Shells CLI
Bash Zsh
Smbolo del
Bourne Shell
Korn Shell
sistema (CMD)
Indicador del sistema
Usuario@equipo:/directorio/actual$
"$" especifica un usuario normal
"#" especifica el administrador, llamado
"root"
Ordenes
Todas las rdenes de UNIX/Linux son programas
que estn almacenados en el sistema de
ficheros. Su sintaxis es la siguiente:
orden [-opciones] [argumentos]
Todos los elementos encerrados entre corchetes son
opcionales. Esto se cumple en la mayora de manuales
Comandos bsicos
pwd Muestra el directorio actual
ls [-opciones] [directorio] Lista el
contenido de un directorio.
ls -a muestra todos los archivos y directorios, incluso los ocultos (los que comienzan con un punto).
ls -l muestra un listado en el formato largo, con informacin de permisos (que ya explicaremos ms adelante),
nmero de enlaces duros asociados al archivo, usuario, grupo, tamao en bytes y fecha de ltima modificacin
adems del nombre.
ls -lh muestra la misma informacin que con la opcin -l pero el tamao del fichero se muestra en unidades ms
entendibles (K, M, G...).
ls -r muestra el contenido ordenado de forma inversa.
ls -R muestra la estructura de directorios que cuelga del directorio actual o del que le pasemos como argumento.
Sistema de archivos.
Sistema de directorios.
Comando cd y tipos de rutas
cd cambia del directorio actual a
cualquier directorio especificado.
Rutas absolutas. Se forman empezando en el directorio raz y acabando en el
punto al que queremos hacer referencia. Por ejemplo, si nuestro usuario se llama
pepito y queremos hacer referencia a su directorio personal, la ruta absoluta
sera /home/pepito.
Rutas relativas. Se forman usando los directorios especiales . y .. y empiezan
siempre en el directorio actual.
Directorio actual (.): es un directorio especial que hace referencia al directorio en el que estamos. Si referenciamos al
directorio . nos estaremos refiriendo al directorio actual.
Directorio padre (..): es un directorio especial que hace referencia al directorio padre del directorio en el que estamos. Si
referenciamos al directorio .. nos estaremos refiriendo al directorio padre del actual. El nico directorio que no tiene
directorio padre es el directorio raz /.
Mas comandos...
date Muestra la fecha y hora.
mkdir Crea directorios
file ruta_del_fichero Muestra el tipo de fichero.
cp Rorigen Rdestino Copia ficheros.
mv Rorigen Rdestino Mueve ficheros.
rm ruta Elimina ficheros.
rmdir ruta Elimina directorios.
touch Crea un fichero en blanco.
echo Regresa a la salida estndar el argumento
ECHO
Miscelanea
Y mas comandos
cat filename Saca por pantalla el contenido
del fichero filename.
more file Visualizacin de archivos pantalla
a pantalla.
find [ruta] [expresin_de_bsqueda]
[accin] Busca archivos, ejemplo:find /
-name reporte
grep Busca un patrn dentro de un archivo
chmod [modificadores] permisos archivo
Permisos
Existen tres permisos independientes, llamados permisos bsicos, que pueden ser permitidos (estado 1) o
denegados (estado 0) a un fichero y/o directorio
r - lectura
w - escritura
x ejecucin
Las clases de usuarios a los cuales se les puede asignar los permisos bsicos anteriormente mencionados
son:
u dueo: dueo del fichero o directorio
g grupo: grupo al que pertenece el fichero
o otros: todos los dems usuarios que no son el dueo ni del grupo
chmod 635 [Link] # Permite lectura y escritura al dueo,
# escritura y ejecucin al grupo,
# y lectura y ejecucin al resto
BASH es un lenguaje de programacin
Se puede hacer uso de variables:
$ MENSAJE="Hola Mundo"
$ echo $MENSAJE
Podemos crear cdigo fuente (scripts) en bash
#!/bin/bash
MENSAJE="\"Hola Mundo ...\""
echo "El valor de la variable \$MENSAJE es
$MENSAJE"
Podemos usar variables numricas
A=2
B=5
suma=$[$A+$B]
multiplica=$[$A*$B]
divide=$[$A/$B]
resta=$[$A-$B]
echo "2 + 5 = $suma"
echo "2 * 5 = $multiplica"
echo "2 / 5 = $divide"
echo "2 - 5 = $resta"
Para simplificar el uso de variables numricas se
puede usar el comando let
A=2
B=5
let suma=A+B
let multiplica=A*B
let divide=A/B
let resta=A-B
echo "2 + 5 = $suma"
echo "2 * 5 = $multiplica"
echo "2 / 5 = $divide"
echo "2 - 5 = $resta"
VARIABLES PREDEFINIDAS
$$ El numero identificador del proceso del shell.
$? Resultado de la ejecucin del comando
anterior.
$0 Nombre del script que se esta ejecutando
$1-$9 Primer a noveno argumento con los que
se invoca.
$* Todos los argumentos como nica palabra
separador
$# Numero de argumentos recibidos.
Ejemplo de uso de variables predefinidas
#!/bin/bash
# muestra_param.sh
echo "El 1er parmetro es: $1"
echo "El 3er parmetro es: $3"
echo "Todos los argumentos son: $*"
echo "El nombre del script es: $0"
echo "Numero de argumentos: $#"
Comando test
Nos permite realizar comparaciones:
-lt: Menor que
-eq: Igual que Ejemplo:
-gt: Mayor que
-le: Menor o igual que
-ge: Mayor o igual que test 3 -lt 5
-ne: No coinciden echo $?
-a
Operador lgico and
exp1 -a exp2 .
-o
Operador lgico or
exp1 -o exp2 .
Podemos leer de la entrada estndar
read A
echo $A
Podemos usar condicionales
#!/bin/bash
#Test IF
echo ' Adivina el valor numerico de la variable'
read A
if [ $A = 1 ];
then
echo 'Acertaste'
exit 0
fi
echo 'No acertaste'
exit
O usar un selector de casos
read x
case $x in
1)
echo "uno"
;;
2)
echo "dos"
;;
*)
echo "no se qu numero es"
;;
esac
Ciclos
Num=10
for (( i=0;i<=Num;i++ ))
do
echo El numero es $i
done
Mas ciclos
while [ "condicin lgica" ]
do
accin 1
accin 2
accin n
done
Funciones
#!/bin/bash
function limpiarPantalla {
clear
}
function listarETC {
ls /etc
}
function crearDirectorio
{
mkdir directorio
}
read opcion
case $opcion in
b|B)
limpiarPantalla
;;
l|L)
listarETC
;;
esac
Factorial
#!/bin/bash
factorial()
{
if [ $1 -le 1 ]
then
return 1
else
factorial $[$1-1]
return $[$1*$?]
fi
}
factorial 5
echo "factorial 5 = $?"
Fibonacci
#!/bin/bash
# SCRIPT: [Link]
# USO: fibo_iterative.sh [Number]
if [ $# -eq 1 ]
then
Num=$1
else
echo -n "Cuantos valores de la serie desear desplegar? :"
read Num
fi
f1=0
f2=1
echo "La serie de Fibonacci hasta el numero $Num es : "
for (( i=0;i<=Num;i++ ))
do
echo -n "$f1 "
fn=$((f1+f2))
f1=$f2
f2=$fn
done
echo