Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Comandos:
if
estructura:
if condicin
then
comando1
elif condicin
then
comando
elif condicin
then
...
Fi
-z
#! /bin/bash
clear
read -p "Cual es tu nombre " respuesta
echo
if [ -z ${respuesta} ]
then
echo "No has escrito nada"
sleep 2
else
echo "Te llamas ${respuesta} y tu nombre
tiene ${#respuesta} letras"
fi
Cadena
Verdadero si la longitud de la cadena es igual a cero.
-n Cadena
Verdadero si la longitud de la cadena es distinto de cero.
Cadena1 !
= Cadena2
- d archivo
Verdadero si el archivo es un directorio.
-e archivo
#! /bin/bash
clear
if [ -d ${directorio} ]
then
read -p "Qu directorio ? "
directorio
read -n 2 -p "El directorio existe.
Quieres cambiarte a l ? "
respuesta
if [ "${respuesta}" != "si" ]
then
break
else
echo
cd ${directorio}
fi
else
echo "El directorio no existe"
fi
Edad de archivos
fecha de modificacin del fichero .
- w archivo
Verdadero si el archivo tiene permisos de escritura .
- x archivo
archivo1-nt archivo2
Verdadero si archivo1 es ms reciente
que archivo2 .
- h archivo
- L fichero
Verdadero si archivo es un enlace simblico
archivo2 ot archivo1
Verdadero si archivo1 es ms antiguo
que archivo2 .
nombredelscript.sh
read .
comparaciones numrica
-eq - son iguales
#! /bin/bash
clear
# IFS es una variable de entorno que determina el delimitador de
#campos
# (que por defecto vale ),en este script queremos
# cambiarlo a , para escribir por teclado nombre,apellidos
IFS=,
read -p Introduce el nombre,apellidos : nombre apellidos
echo El nombre es $nombre y los apellidos son $apellidos
VARIABLES
$var: valor de var si est definida, si no nada.
${var}: igual que el anterior excepto que las llaves contienen el nombre de la
variable a ser evaluada.
${var-algo}: valor de var si est definida, si no algo.
${var=algo}: igual que el anterior excepto cuando var no est definida en cuyo caso
el valor de var pasa a ser algo.
${var?mensaje}: valor de var si est definida, si no escribe el mensaje en el terminal.
${var+algo}: algo si var est definida, si no nada.
EJEMPLO_
$ var1=4 # Le asigna el valor 4
$ echo El valor de var1 es ${var1}
El valor mostrado ser 4
$ echo El valor de la variable es ${var1+5}
Al estar definida, se utiliza el valor 5
$ echo El valor es $var1
Su valor sigue siendo 4
= (Cadena) Iguales
!= (Cadena) Diferentes
Array
La sintaxis para crear e inicializar un array es la siguiente:
nombre_array=(val1 val2 val3 ...) # Crea e inicializa un array
nombre_array[x]=valor # Asigna un valor al elemento x
Para acceder a un elemento del array se utiliza la siguiente sintaxis:
${nombre_array[x]} # Para acceder al elemento x
${nombre_array[*]} # Para consultar todos los elementos// crea una nica palabra con todos los elementos del array
${nombre_array[@]} # Para consultar todos los elementos // crea palabra distintas para cada elemento del array
Case
WHILE
case $var in
v1) ..
..
;;
v2|v3) ..
..
;;
*) .. # Caso por defecto
;;
esac
ejemplo:
Un ejemplo de su funcionamiento
podra ser:
case $var in
1) echo La variable var es un uno ;;
2) echo La variable var es un dos ;;
*) echo La variable var no es ni un
uno ni un dos;;
esac
orden
En pantalla aparecera:
1) Ver contenido directorio actual
2) Salir
FOR
for var in lista
do
uso de $var
done
ejemplo:
for i in 10 30 70
do
echo Mi nmero favorito es $i #
toma los valores 10, 30 y 70
done
a menudo lo que queremos es
generar secuencias de valores
numricos al estilo de la
instruccin for
for i in seq 0 5 25
do
# uso de $i que toma los
valores 0, 5, 10, 15, 20 y 25
done
grep
Atributo
Significado
Dont update
Atime
No actualizar Un
tiempo
Synchronous
updates
actualizaciones
sncronas
Append only
Solo anexar
Compressed file
archivo
comprimido
Immutable file
archivo inmutable
No Dump
Secure deletion
Undeletable file
borrado seguro
lsattr
PROGRAMAR TAREAS
cron
El comando cron permite a los usuarios ejecutar, automticamente, comandos y scripts a una hora de una
anacron es una aplicacin que ejecuta tareas programadas al igual que cron
Funcionamiento de anacron
Cuando anacron se ejecuta lee una lista de tareas definidas en el archivo /etc/anacrontab.
Cada entrada en este archivo especifica un perodo en das, un retardo en minutos, un
identificador de tarea nico y un comando a ejecutar.
FUNCIONES
function nombrefuncion
{
Cdigo
}
Llamar a la funcin es como llamar a otro programa, slo
hay que escribir su nombre.
#! /bin/bash
# Se define la funcin salir
function salir {
exit
}
# Se define la funcin hola
function hola {
echo Hola!
}
hola # Se llama a la funcin hola
salir # Se llama a la funcin salir
echo ASIR-2
Comando
apropos palabra
which comando
time comando
time cat
nice info
Descripcin
Ver comandos
relacionados
con palabra.
Ver la ruta
completa de
comando
Medir cunto
tarda
comando
Iniciar
cronmetro.
Ctrl-d para
detenerlo. Ver
tambin sw
Lanzar
comando con
renice 19 -p $$
Navegacin
cd -
cd
pushd .
Bsquedas de archivo
alias l='ls -l --color=auto'
ls -lrt
prioridad baja
(info en este
ejemplo)
Darle
prioridad baja
al shell
(guin). Usar
para tareas no
interactivas
Volver al
directorio
anterior
Ir al directorio
personal
(home)
Ir a dir,
ejecutar
comando y
volver al
directorio
inicial
Guardar el
directorio
actual en la
pila para
luego, poder
hacer popd y
volver al
mismo
listado de
directorio
rpido
Listar
archivos por
fecha.
Imprimir 9
columnas en
ancho de la
terminal
Buscar 'expre'
en este
directorio y
subdirectorios
.
Buscar
find -maxdepth 1 -type d | while read dir; do echo $dir; echo cmd2;
done
locate -r 'file[^/]*\.txt'
look referencia
'ejemplo' en
todos los
archivos
regulares en
este directorio
y
subdirectorios
Buscar
'ejemplo' en
todos los
archivos
regulares de
este directorio
Procesar cada
elemento con
muchos
comandos
(con un bucle
while)
Hallar
archivos sin
permiso
general de
lectura (util
para sedes
web)
Hallar
directorios sin
permiso
general de
acceso (util
para sedes
web)
Buscar
nombres en
indice en
cache. Este re
es igual a glob
*file*.txt
Bsqueda
rpida
(ordenada) de
prefijo en
diccionario
Resaltar
ocurrencias de
expresin
regular en
diccionario
archivos
gpg -c file
gpg file.gpg
tar -c dir/ | bzip2 > dir.tar.bz2
Encriptar
archivo
Desencriptar
archivo
Crear archivo
compacto de
dir/
Extraer
archivo
compacto
(usar gzip en
vez de bzip2
para archivos
tar.gz )
Crear
compactado
encriptado de
dir/ en equipo
remoto
Crear
compactado
de
subconjunto
de dir/ y
subdirectorios
Copiar
subconjunto
de dir/ y
subdirectorios
Copiar (con
permisos)
directorio
copiame/ a
directorio
/este/dir/
Copiar (con
permisos)
contenido del
directorio
copiame/ a
directorio
/este/dir/
Copiar (con
permisos)
directorio
wget -c http://www.ejemplo.com/largo.archivo
wget ftp://remoto/archivo[1-9].iso/
copiame/ a
directorio
remoto
/este/dir/
Respaldo de
disco duro en
equipo remoto
Obtenerr solo
diffs. Repetir
muchas veces
para descargas
conflictivas
Copia local
con taza
lmite.
Parecido a
nice para E/S
(I/O)
Espejo de
sede web
(usando
compresin y
encriptado)
Sincronizando
directorio
actual con uno
remoto
Guardar en
directorio
actual una
versin
navegable de
una pgina
web
Retomar
descarga de
un archivo
parcialmente
descargado
Descargar una
serie de
archivos en el
directorio
actual
FTP permite
Redes
ethtool interface
ip link show
ip link set dev eth0 name wan
ip addr add 1.2.3.4/24 brd + dev eth0
globalizacione
s directas
Procesando
directamente
la salida
Descargar la
url a 1AM al
directorio en
que est
Hacer
descargas de
baja prioridad
(en este caso,
no exceder los
20KB/s)
Revisando los
enlaces de una
pgina
Actualizar
eficientemente
una copia
local de una
pgina web
(til si usamos
cron)
Listar estado
de interfase
Listar
interfases
Renombrar
eth0 a wan
Agregar ip y
mscara
(255.255.255.
0)
Subir (o bajar)
la interfase
Establecer
1.2.3.254
como valor
por omisin
para la puerta
de enlace.
Agregarle
20ms de
host pixelbeat.org
hostname -i
netstat -tupl
netstat -tup
Windows
smbtree
nmblookup -A 1.2.3.4
smbclient -L windows_box
espera al
dispositivo de
retorno (para
hacer pruebas)
Quitar la
espera
agregada
antes.
Obtener la
direccin ip
para el
dominio o al
revs
Obtener la
direccin ip
local
(equivale al
anfitrin
`hostname`)
Listar los
servicios de
internet de un
sistema
Listar las
conexiones
activas
de/hacia un
sistema
Hallar equipos
windows. Ver
tambin
findsmb
Hallar el
nombre
(netbios) de
windows
asociado con
la direccin ip
Listar
archivos
compartidos
en equipos
windows o
servidor
samba
Montar un
/mnt/share
echo 'mensaje' | smbclient -M windows_box
math
echo '(1 + sqrt(5))/2' | bc -l
echo $((0x2dec))
Manejo de textos
sed 's/cadena1/cadena2/g'
sed 's/\(.*\)1/\12/g'
directorio
compartido
Enviar
mensaje
emergente al
equipo
windows
(desactivado
por omisin
en XP sp2)
Cuentas
rpidas
(Calcular ).
Conversiones
de base
(decimal a
hexadecimal)
Conversiones
de base (hex a
dec)
((expansin
aritmtica del
shell))
Mas complejo
(int) x.ej.
Ejemplo: tasa
mxima de
paquetes
FastE
Python
maneja
notacin
cientfica
Graficar tasa
de paquetes
FastE vs.
tamao de
paquetes
Agregar una
columna de
nmeros.
Remplaza
cadena1 por
cadena2
Modificar
sed 's/\([\\`\\"$\\\\]\)/\\\1/g'
sed -n '1000p;1000q'
sed -n '10,20p;20q'
sed -n 's/.*<title>\(.*\)<\/title>.*/\1/ip;T;q'
cualquiercade
na1 con
cualquiercade
na2
Quitar
comentarios y
lineas en
blanco
Concatenar
lineas con \ al
final
Quitar blancos
finales de las
lineas
Escapar
metacaractere
s activos del
shell dentro de
comillas
dobles
Listar la lnea
1000
Listar de la
linea 10 a la
20
Extraer titulo
de pgina web
en HTML
Sort de
direcciones ip
de tipo IPV4
Conversin de
cajas
Filtrando
caracteres no
imprimibles
Contar lineas
Union de
archivos sin
ordenar
Interseccin
de archivos
sin ordenar
Diferencia de
archivos sin
Calendario
cal -3
cal 9 1752
date -d fri
date --date='25 Dec' +%A
TZ=':America/Los_Angeles' date
ordenar
Diferencia
Simtrica de
archivos sin
ordenar
Unin de
archivos
ordenados
Interseccin
de archivos
ordenados
Diferencia de
archivos
ordenados
Diferencia
Simtrica de
archivos
ordenados
Mostrar
calendario
Mostrar
calendario
para mes y
ao
determinado
Que da cae
este viernes.
En que da
cae la
Navidad, este
ao?
Convertir total
de segundos
desde la poca
a una fecha
Que hora es
en la Costa
Oeste de
EEUU (usar
tzselect para
hallar TZ)
Recordatorio
por email
Recordatorio
emergente
Locale
printf "%'d\n" 1234
BLOCK_SIZE=\'1 ls l
Recode
recode -l | less
Imprimir
numero
agrupado por
miles de
acuerdo a tu
locale
pedir que ls
agrupe por
miles de
acuerdo a tu
locale
Extraer
informacin
de la base de
datos del
locale
Buscar
informacin
de locale para
determinado
pas.
Listar campos
en base de
datos del
locale
Ver
conversiones
disponibles
(aliases en
cada lnea)
"ansi" de
Windows a
tabla de
caracteres
locales (auto
hace
conversin
CRLF)
utf8 de
Windows a
tabla de
caracteres
locales
Latin9
(Europa
CDs
gzip < /dev/cdrom > cdrom.iso.gz
oriental) a
utf8
Codificado
Base64
Decodificado
de citas
imprimibles
(qp)
Texto a
HTML
Buscar tabla
de caracteres
Mostrar
representacin
de un cdigo
en tabla de
caracteres
latin-9
Ver
codificado
latin-9
Ver
codificado
utf-8
Guardar una
copia de los
datos de
cdrom
Crear imagen
de cdrom con
el contenido
de dir
Montar la
imagen cdrom
en /mnt/dir
(solo lectura)
Limpiar un
CDRW
Grabar un
cdrom con
imagen (usar
dev=ATAPI scanbus para
confirmar ruta
dev)
cdparanoia -B
Espacio de disco
ls -lSr
df -h
df -i
fdisk -l
Extraer pistas
de audio
desde un CD a
archivos wav
en directorio
actual
Armar un CD
de audio con
todos los wavs
en directorio
actual (ver
tambin
cdrdao)
Crear un
archivo ogg
con un
archivo wav
Mostrar
archivos, de
menor a
mayor
Mostrar
usuarios de
disco
principales en
el directorio
actual.
Mostrar
espacio libre
de disco
Mostrar
inodos libres
Mostrar
tamaos y
tipos de
particiones de
disco (pedir
como root)
Listar todos
los paquetes
por tamao
instalado
(Bytes) de
distribuciones
RPMs
Listar todos
Monitoreo/rastreo
strace -c ls >/dev/null
lsof -p $$
lsof ~
ps -e -o pid,args --forest
los paquetes
por tamao
instalado
(Kbytes) de
distribuciones
deb
Crear un gran
archivo de
prueba (sin
ocupar
espacio).
Resumir/perfil
de llamadas al
sistema
hechas con
comando
Listar
llamadas al
sistema
hechas con
comando
Listar
llamadas a
libreras
hechas con
comando
Listar las rutas
que abri el id
de proceso
Listar
procesos que
solicitaron
apertura de
rutas
Ver trfico de
redes excepto
ssh.
Listar
procesos de
una jerarqua
Listar
procesos por
% de uso de
cpu
Listar
procesos por
ps -C firefox-bin -L -o pid,tid,pcpu,state
ps -p 1,2
last reboot
free -m
badblocks -s /dev/hda
mount | column -t
cat /proc/partitions
uso de
memoria.
Listar todos
los hilos de un
proceso
determinado
Listar
informacin
de un ID
determinado
Ver historia
de
reencendido
del sistema
Ver cantidad
de RAM (que
queda) (-m
muestra en
MB)
Observar
continuamente
los datos que
van
cambiando
Ver informe
sobre
particin hda
Hacer una
prueba de
velocidad de
lectura en
particin hda
Hallar bloques
ilegibles en
particin hda
Ver
particiones
montadas en
el sistema (y
alinear la
salida)
Ver todas las
particiones
registradas en
el sistema
Ver el total de
RAM que
registra el
sistema
Ver informe
de CPU(s)
Ver informe
de PCI
Ver informe
de USB
Un nico punto (.) se utiliza para hacer referencia al directorio en el que ests actualmente.
Dos puntos ( .. ) se utilizan para hacer referencia al directorio padre del actual.
orden
ls son:
cat:
..$cat .profile
Algunas opciones tiles de la orden cat son:
-n: numera las lneas del archivo.
-b: numera las lneas que no estn vacas.
-v: permite visualizar los caracteres de control
$ cat miarchivo > miarchivo.bak
$ cat new_info data
$ cat > memo //crea archivo se debe pulsar CTRL-D. Esto termina la orden cat
$ cat memo // lo aadir al final del archivo memo
Comodines:
El comodn "?" slo expande un nico carcter.
El comodn [...] sustituye cualquier valor incluido entre los corchetes
Cambio de directorios
$ cd cartas
Copiar ficheros
su
Atajos de teclado
consola virtual (Ctrl+Alt+F1) pero pulsando (Ctrl+Alt+F2) te llevar a la segunda consola virtual
el auto completado que se hace pulsando la tecla TAB.
ls -la puede darte un listado de ms de 24 lneas, para ver lo que se ha quedado en la parte de
arriba de la pantalla puedes usar: (SHIFT+PgUp) y (SHIFT+PgDown)
Presionando la flecha hacia arriba te muestra el ltimo comando que has escrito, si lo haces
ms veces vers una lista de todos los comandos que has usado.
Todos tus ltimos comandos se guardan en un fichero en tu directorio home llamado:
.bash_history
PROMT
Para cambiar el aspecto del prompt, hay que cambiar la variable PS1.
carlos@ubuntu:~$ SAVE=$PS1
carlos@ubuntu:~$
El prompt ms sencillo sera el de un solo carcter, tal cual hemos hecho en clase:
carlos@ubuntu:~$ PS1=-->
-->ls
find
El comando find sirve para buscar ficheros y directorios pero es muy complejo y
tiene muchas opciones
el nombre (-name xxx)
find . -name tureceta*
Si es un archivo o carpeta (-type f -type d)
find . -type f -name tureceta*
find . -type d -name tureceta*
Los permisos que tiene (-perm nnn)
find . -type d -perm 777
El usuario al que pertenece (-user usuario1)
find . -type f -user usuario1
El grupo al que pertenece (-group grupo1)
find . -type f -group grupo1
Si el fichero est vacio (-empty)
find . -type f empty
El tamao (-size n[cwbkMG]) siendo
b para bloques de 512-byte (este es el de por defecto)
c para bytes
w para two-byte words
k para Kilobytes (1024 bytes)
M para Megabytes (1048576 bytes)
G para Gigabytes (1073741824 bytes)
find . -size 21k
Modificados los datos en las ltimas X*24h (- dtime n)
find . -tipe f -dtime 2 (en las ltimas 48h = 2*24)
Accedidos en las ltimas X*24h (- atime n)
find . -tipe f -atime 2 (en las ltimas 48h = 2*24)
Recuerdar que con la ayuda y con el man del comando tendrs toda la
informacin
find --help
man find
whereis
Buscar la localizacin de un fichero binario, fuente o man
Carlos2014@ubuntu ~$ whereis grep
which
Buscar la localizacin de un fichero binario o ejecutable
Carlos2014@ubuntu ~$ which grep
hash
Muestra la ruta a los comandos utilizados en las ltimas sesiones
Carlos2014@ubuntu ~$ which grep
Commando Find
Se utiliza para buscar archivos dentro de una jerarqua de directorios.
Find utiliza las opciones -name y -print por defecto, es decir, si ejecutamos find a secas,
listar el contenido del directorio donde estemos situados de forma recursiva.
Lista de comparaciones
-amin n: bsqueda de ficheros que han sido ledos hace n minutos.
carlos2014@ubuntu:~$ find . -amin -10
./.bash_history
Como vemos, find aplica por omisin las acciones -name (especificar el patrn de bsqueda,
en este caso todos los ficheros *) y -print (el resultado lo imprime por la salida estndar).
-atime n: bsqueda de ficheros que han sido ledos por ltima vez hace nx24 horas.
carlos2014@ubuntu:~$ find . -atime -1
./scripts
./.bash_history
-cmin n: bsqueda de ficheros cuyos permisos se han cambiado hace n minutos.
carlos2014@ubuntu:~$ find . -cmin -10
./.bash_history
-ctime n: bsqueda de ficheros cuyos permisos se han cambiado por ltima vez hace nx24
horas.
carlos2014@ubuntu:~$ find . ctime -1
./.bash_history
-mmin n: bsqueda de ficheros que han sido modificados (su contenido) hace n minutos.
carlos2014@ubuntu:~$ find . -mmin 4
./sqlnet.log
-mtime n; bsqueda de ficheros que han sido modificados por ltima vez hace nx24h.
carlos2014@ubuntu:~$ find . -mtime +1
./.gtkrc
-empty: bsqueda de ficheros o directorios vacos. Muy til para "hacer limpieza" del disco duro.
-fstype tipo: especificamos el tipo de sistema de archivos donde queremos realizar la bsqueda
(en /proc/filesystems podemos ver la lista de todos los sistemas de ficheros registrados en el
sistema).
carlos2014@ubuntu:~$ find . -fstype ntfs
-gid n: buscamos ficheros que pertenezcan al grupo con identificador igual a n.
-uid n: busca ficheros cuyo propietario tenga el uid especificado.
-user usuario: busca fichero cuyo propietario del mismo es el usuario.
-group nombre: igual que la expresin anterior, pero esta vez buscamos por el nombre del
grupo.
-lname patrn: buscamos enlaces simblicos que coincidan con el patrn.
Con ilname ignoramos las maysculas o minsculas.
-name patrn: buscamos los ficheros que coincidan con el patrn.
Con iname ignoramos las maysculas o minsculas.
x para ejecucin,
w para escritura).
carlos2014@ubuntu:~$ find . -perm 744
./prueba
./mbox
-size n[ckMG]: buscamos los ficheros que tengan como tamao de bloque el valor n, es decir, el
nmero bloques que utiliza el fichero en disco.
-type tipo: especificamos el tipo de fichero a buscar
-d: directorio
-f: fichero regular
-l: enlace simblicos
-b: fichero especial de bloques*
-c: fichero especial de caracteres*
Acciones
-exec orden: ejecutar una orden sobre el resultado de la bsqueda
COMANDO SED
Sed es considerado un editor de texto
sed comandos_sed archivo
"comandos_sed" corresponde a una o ms especificaciones acerca de qu hacer con las
lneas que se leen desde "archivo".
Modificar lneas
sed 's/cadena1/cadena2/' fichero
Al ejecutar el comando anterior, se sustituye la primera cadena que encuentra por la segunda.
Por otra parte, tambin podemos hacer que sustituya la cadena1 por la cadena2 en un nmero
de lnea concreto:
sed '5 s/USUARIO/usuario/g' fichero
Supongamos que queremos cambiar la palabra "Debian" por "Ubuntu" dentro de un
documento.
sed s/Debian/Ubuntu/g documento.txt > salida.txt
La "s" significa "substituya".
La "g" significa que la accin se realizar en todo el documento.
La opcin "-e" significa "ejecute".
sed -e 'comando 1' -e 'comando 2' archivo.txt > archivo2.txt
Comando tr
El comando tr, es un filtro de datos que nos permite modificarlos sustituyendo y/o borrando
caracteres.
tr [OPCIN] ... SET1 [SET2]
Donde [OPCIN] pueden ser cualquiera de las siguientes.
Borrar
El borrado de caracteres es ms fcil de usar. En este caso solo necesitamos SET1, para indicar
que caracteres queremos borrar.
En el siguiente ejemplo borraremos las letras 'a' y 'e' de la palabra 'murcielago'.
$ echo murcielago | tr -d ae
murcilgo
GREP
grep -E(extended grep), una herramienta que analiza una entrada suministrada y la compara
con nuestra expresin regular
Corchetes
Sirven para hacer coincidir cualquier carcter (pero slo uno) que se encuentre entre ellos:
$ ls | grep -E "[ab]00sor
Cuantificadores
| Coincide con cualquier carcter o caracteres a cada lado de la barra (Yo no lo uso)
$ ls | grep -E "[a|b]00*"
a00sor
b00sor
[^] Coincide con cualquier carcter no listado despus del circunflejo
grep -E "^." demo2
$touch huevo hu3vo hueeevo // crear varios ficheros
Anclas
COMANDO useradd
useradd - Aade nuevo usuario al sistema linux,
crea en los archivos /etc/passwd, /etc/group y /etc/shadow.
SINTAXIS: La sintaxis es useradd [opciones] [nombre_de_usuario]
OPCIONES:
-d
Especifica el directorio inicial del usuario
-s
Especifica el shell del usuario
-g
-G
-M
-e
-uid
Enlace simblico
/etc/group: contiene los miembros de cada grupo, excepto para el grupo principal,
que aparece en /etc/passwd.
/etc/skel: directorio que contiene el contenido del directorio de los nuevos usuarios.
Windows cmd
Enlace simblico
Es un tipo de enlace que no es real, sino que supone un atajo a un
archivo o carpeta, sera parecido a los accesos directos.
Si quisiramos recrear este enlace simblico de forma manual
tendramos que teclear el comando:
mklink /d C:\documents and setting
C:\users
4Cmo puedo crear archivos en Unix? Con el comando "touch" seguido del nombre de archivo
que quiero crear.
Cmo puedo crear uno o varios directorios? Con el comando mkdir seguido del nombre o nombres,
separados por espacio, de los directorios que quiero crea
1. Con denomina Unix a los disco duros IDE? Los denomina como hd (de Hard Disk). Canal Primario:
hda (Maestro) y hdb (Esclavo) Canal Secundario: hdc
(Maestro) y hdd (Secundario)
1. Puedo tener ms de una consola abierta? S. Y se puede alternar entre ellas con el atajo de
teclado alt +f1, f2, f3 segn a la consola que queramos
cambiar
uname -r
1. Dnde se guardan los archivos de configuracin del
sistema? en /etc
1. Cmo diferencio entre ruta absoluta y ruta relativa? Si hay una / delante de la ruta
#!/bin/ksh
#!/bin/sh
#!/bin/bash
Es interesante saber que muchos comandos devuelven un valor despus de ejecutarse, y que este valor indicar si la
ejecucin ha sido buena o si ha habido algn fallo y que tipo de fallo se ha producido. Para conocer si un comando
devuelve o no un valor y qu es lo que devuelve en cada caso se deber consultar la documentacin, pero por lo
general en caso de una ejecucin correcta devolvern el valor 0, y en caso de fallo otro numero, positivo o negativo.
Para poder ejecutar un archivo de comandos es necesario que tenga activados, al menos, los permisos de lectura y
ejecucin. A continuacin vamos a ver unos ejemplos, comenzando por cosas muy sencillas.
Ejemplo1:
# Programa que cambia de directorio y nos muestra donde estamos en cada
# momento. Cambia directorio en un subshell, no altera ambiente original
#
echo SUBSHELL.
DIRACT=`pwd`
echo Directorio actual $DIRACT
echo Cambiando directorio en el subshell...
cd /etc
echo Ahora en directorio `pwd`
cd
echo Ahora estoy en mi directorio, que es `pwd`
# fin subsh.cmd
Ejemplo 2:
# Programa que muestra la hora del sistema cada segundo durante 1 minuto
Cont=0
while [ $Cont -le 60 ]
do
date
((Cont=$Cont + 1))
sleep 1
done
Ejemplo 3:
# Programa que nos dice el dia de la semana que fue ayer
HOY=$(date +%w)
AYER=$(expr $HOY - 1)
2) echo "Martes";;
3) echo "Miercoles";;
4) echo "Jueves";;
5) echo "Viernes";;
*) echo "un dia raro, pues no existe";;
esac
Ejemplo 4:
#!/bin/ksh
# Programa que pide al usuario que introduzca una cadena de caracteres y
# la muestra, por pantalla del derecho y del revs.
#
echo "Introduce una cadena: \c"
read NOMBRE
LONGITUD=${#NOMBRE}
while [ $LONGITUD -gt 0 ]
do
NOMBREALREVES="$NOMBREALREVES"`echo $NOMBRE | cut -c$LONGITUD`
LONGITUD=`expr $LONGITUD - 1`
done
echo "\n$NOMBRE\n$NOMBREALREVES"
Ejemplo 5:
#!/bin/ksh
# Programa que simula una papelera de reciclaje, mediante el cual en lugar de
# borrar un archivo, lo que hace es guardarlo en un subdirectorio, con el fin
# de evitar borrados accidentales.
#
if [ $# -gt 0 ]
then
for i in $*
do
echo "Moviendo $i al directorio $HOME/borrados"
if [ `mv $i $HOME/borrados 2> /dev/null` = 0 ]
then
echo "Error, no se puede mover $i"
fi
done
else
echo "Error: hay que especificar argumentos"
echo "$0 archivo1 [archivo2] ..."
return 1
fi
return 0
Ejemplo 6:
# Programa que ejecuta un proceso largo, y mientras tanto va mostrando un punto en la pantalla,
# simulando que el proceso va progresando.
function puntos ()
{
if [ $1 ]
then
INTERVALO=$1
else
INTERVALO=5
# Si no se ha pasado, considerar 5
fi
while true
do
echo ".\c"
sleep $INTERVALO
done
}
# Programa principal
# Lo que sea
puntos 2 &
# Lo que sea
# Fin del programa
Ejemplo 7:
# Programa encargado de comprobar la hora de los diferentes sistemas conectados
# a un sistema determinado
# En la variable SISTEMAS_TOT se definen los sistemas de los que se intentara
# obtener la hora.
SISTEMAS_TOT="maquina1 maquina2 maquina3 maquina4 maquina5 maquina6 maquina7"
# La funcion hora se encarga de pedir la hora al sistema especificado,
# filtrarla y mostrarla por pantalla.
hora()
{
Ejemplos:
while getopts abc opcion
do
case $opcion in
a) print "Opcion -a";;
b) print "Opcion -b";;
c) print "Opcion -c";;
+a) print "Opcion +a";;
+b) print "Opcion +b";;
+c) print "Opcion +c";;
esac
done
#funcionara con llamadas como
#
script -a -b +c
script -ac +b
#
USAGE="Sintaxis: $0 -a -b
while getopts :ab opcion
do
case $opcion in
a) print "Opcion -a";;
b) print "Opcion -b";;
+a) print "Opcion +a";;
+b) print "Opcion +b";;
\?) echo "$OPTARG no es una opcion valida.\n $USAGE";;
esac
done
Cuando una opcin debe ir seguida de un argumento se indica aadiendo : despus de la opcin, con lo que OPTARG
tomar el valor del argumento. Tambin se aade una opcin : al case para tratar la falta de argumento.
Ejemplos:
USAGE="Sintaxis: $0 -ac [-b argumento]
while getopts :ab:c opcion
do
case $opcion in
a) print "Opcion -a";;
b) programa $OPTARG;;
Backgrounds activos
Si ejecutas un shell script que tarda algn tiempo, lo suficiente como para mosquear al usuario, y quieres que el
usuario se crea que todo va bien, prueba a incluir lo siguiente en tu shell script (puedes cambiar el punto que se
imprime por cualquier carcter o smbolo, pero cuidado con las secuencias de escape):
function puntos ()
{
if [ $1 ]
then
tiempo = $1
# Lo que le indiques
else
tiempo = 5
fi
while true
do
echo ".\c"
sleep $tiempo
done
}
Programa principal:
puntos 1 & # Cada segundo imprimir un punto
PROGRAMA
# programa a ejecutar
kill -9 $! # Finaliza el ltimo programa lanzado en background presenta los resultados como quieras
if [ -f $out ] # Si se gener el archivo de salida. Prueba a insertar otras funciones
then
echo "Los resultados estan en $SALIDA"
else
echo "Algo ha fallado"
fi
Aliases o Funciones?
Habitualmente los aliases se guardan en un archivo cuyo nombre suele ser .aliases, o .env, se puede comprobar
visualizando la variable de entorno $ENV. En otras ocasiones puede estar almacenado en el propio .profile. Los
aliases vienen a tener la siguiente estructura:
alias ll="ls -l"
alias ll=ls -l
function Ffind ()
{
if [ $2 ]
then
DIR_INICIAL=$1
CADENA=$2
else
if [ $1 ]
DIR_INICIAL=.
CADENA=$1
else
echo "Sintaxix: Ffind <directorio> <cadena>"
return 0
fi
fi
# Ahora obtenemos el rbol de directorios sobre el que hay que buscar
DIRECTORIOS=find $DIR_INICIAL -depth -type d -print
for i in $DIRECTORIOS
do
echo "Buscando $CADENA en $i"
grep $CADENA $i/*
done
}
Esta funcin estara en el archivo de aliases y sera de uso exclusivo del propietario, invisible a los dems.
La puedes mejorar con ms opciones, emplear recursividad, etc., el caso es que debe ser til y lo ms rpida posible,
para lo cual debe consumir el mnimo de recursos. La sintaxis que se empleara, en el caso expuesto, sera:
Ffind <directorio> <cadena>
Un ejemplo de alias dinmico, que cambie el directorio de acceso en funcin del ao en que nos encontremos puede
ser del tipo:
alias cdano="ANO=`date +%Y` ; cd /home/user/$ANO
El resto es cuestin de imaginacin.
Visualizar los procesos ejecutados por todos los usuarios conectados al sistema (whodo).
Este script, que simula el comando whodo, permite visualizar los programas que tiene cada usuario en ejecucin, as
como su direccin IP, tiempo de inactividad, terminales asociados, etc.
#!/usr/bin/ksh
usuarios=`who -u`
usu=`echo "$usuarios" | cut -f1 -d " " | sort -u`
for i in $usu
do
echo "$usuarios" |grep $i
ps -x -u $i
done
EJERCICIO
1. Realiza un script que compruebe si el usuario actual del sistema es manolo, si es as saldalo, sino te
despides de l amigablemente.
3. En un fichero tengo una palabra clave. Haz un script que muestre si dicha palabra es myfpschool
o no.
4. Realiza un script que compruebe si la segunda columna de un fichero que contiene solamente una
lnea contiene la palabra myfpschool.
5. Realiza un script que compruebe si las tres primeras columnas de un fichero (que contiene solamente
una lnea) son iguales o diferentes.
6. Realiza lo mismo pero teniendo en cuenta que el fichero est comprimido con gzip.
7. Tengo un tar con tres ficheros. Se pide realizar un script que genere un fichero toatoa.gz con las
lneas de los tres primeros ficheros que contengan la cadena te nesecito.
8. Tengo un fichero personahes.gz que contiene dos columnas <pas de procedencia>. Se desea saber el
nombre de los ciudadanos de chiquitistan. Ejemplo de fichero:
Juan holanda
Pedro chiquitistan
Ramiro rusia
Josue dinamarca
9. Se pide realizar un script que muestre las lneas de un fichero cualquiera que contengan las palabras
uno y dos sin importar sin van en maysculas y minsculas.
10. Idem que el fichero anterior pero que contengan la palabra a al comienzo de las frases.
3. Variables en bash
Una variable es un contenedor donde poder guardar informacin. Las variables se almacenan en
memoria y nos pueden servir en los shell script para guardar el nombre del usuario que lo ha
ejecutado, la fecha actual, el nombre de un directorio, etc.
#!/bin/bash
FECHA=`date +%d-%m-%y`
echo $FECHA
En la variable FECHA almaceno el resultado de ejecutar el comando date +%d-%m-%y. Para esto
utilizo el smbolo de acento ` al principio y al final del comando para delimitarlo. Para crear este
smbolo pulsa la tecla del acento y le das un espacio en blanco. De esa manera aparece ese
smbolo.
Has notado?
Que cuando asigno un valor a la variable no le pongo el smbolo $ delante y cuando la utilizo s.
Al ejecutar este script en mi terminal me aparece lo siguiente:
$ ./script.sh
21-03-14
Podemos utilizar los script para almacenar ms informacin como por ejemplo:
USER=usuario
En este caso en la variable USER almacenaremos la palabra usuario.
Veamos un ejemplo ms completo en el que se hace un backup del directorio home de un usuario
concreto:
#!/bin/bash
FECHA=`date +%d-%m-%y`
USER=usuario
echo 'Comenzando el backup...'
tar cvzf /tmp/$USER-$FECHA.tgz /home/usuario
echo 'Backup terminado'
Como puedes ver en las variables FECHA y USER vamos a guardar informacin que luego se
utilizarn en el comando tar para realizar el backup.
Recuerda.
En shell script hay que tener cuidado con las maysculas y minsculas. FECHA y fecha son para
shell script variables diferentes. Acostmbrate por ejemplo a escribir las variables en mayscula y no
tendrs problemas.
Ejercicio propuesto.
Modifica el ejemplo anterior para que haga el backup de un directorio de prueba que crees al efecto.
Prueba a realizar un backup del directorio, borrarlo y restaurarlo para comprobar que tu script
funciona correctamente.
4. Funciones en bash
En primer lugar tenemos que tener en cuenta qu es una funcin y para qu se utiliza. Imagina
que tienes que hacer una tarea con comandos de forma repetitiva. Lo primero que piensas es en
hacer un script para automatizar dichas tareas. Cierto, yo pensara lo mismo.
Imagina ahora tambin que vas a hacer (adems de esa) otro tipo de tareas repetitivas pero hay
algunas partes de esas tareas que son iguales (se van a repetir). Tienes dos opciones, copiar y
pegar esa parte del cdigo con lo cual esa parte del cdigo se va a reproducir en muchos script, o
mejor, crear una funcin que pueda ser utilizada por todos los script.
Las funciones en bash nos permiten agrupar comandos y tienen la ventaja que las podemos
comprobar y verificar que son eficientes. Si queremos modificar algo solamente tendremos que
modificar la funcin. Es ms, si falla algo el error lo tendremos tambin ms localizado y ser ms
fcil de corregir.
#!/bin/bash
HOLA=hola
function hola {
funcin
1. Sentencias condicionales
Imagina que ests vendiendo entradas de cine. Si te viene alguien hablando en espaol tu le
contestas en espaol y si te habla en otro idioma tu le contestas en ingls porque imagnate que es
el nico idioma que conoces adems del espaol.
if [ habla_en_espaol]; then
contesto_en_espaol
else
contesto_en_ingls
fi
Condicionales
#!/bin/bash
# Este es un ejemplo de if expresin then sentencia
if [ "alboran" = "alboran" ]; then
echo "Cierto, alboran == alboran"
fi
Este es otro ejemplo pero utilizando el patrn if expresin then sentencia1 else sentencia2
#!/bin/bash
Recuerda.
Ten cuidado con los espacios en blanco. Intenta respetar los espacios en blanco en las expresiones
porque de lo contrario al ejecutar tu shell script puedes tener problemas.
Veamos otro ejemplo utilizando ahora variables y sentencias condicionales:
#!/bin/bash
T1="mar de"
T2="alboran"
if [ $T1 = $T2 ]; then
echo "Cierto, " $T1 " == " $T2
else
echo "No es cierto"
fi
Ejercicios propuestos.
1. Copia y ejecuta el ejercicio anterior. Comprueba que funciona y modifcalo para que T1 sea igual
a T2. Comprueba ahora que dice Cierto..
2. Crea un nuevo shell script que diga si el usuario que lo est ejecutando es root o no (recuerda
que con el comando echo $USER puedo conocer el nombre del usuario actual).
for La sentencia for se utiliza cuando se quieren ejecutar una serie de sentencias un
nmero determinado de veces. La sentencia for en shell script es un poco diferente a la
sentencia for de otros lenguajes de programacin. Una ventaja del for de shell script es que se
puede iterar sobre cadenas (ya veremos ms adelante cmo se hace).
while Esta sentencia ejecuta un trozo de cdigo si una condicin se cumple, y para cuando
dicha condicin es falsa
until Muy parecida a la anterior. La sentencia until ejecuta un pedazo de cdigo hasta que
una expresin sea falsa. La diferencia con la anterior es que mientras que while pregunta y
luego ejecuta, until primero ejecuta y luego pregunta. Ten en cuenta que toda sentencia until
se puede convertir en una sentencia while.
Veamos un ejemplo de la sentencia for:
En este caso se muestran todos los ficheros del directorio desde donde se ejecuta el script
anterior. La variable i va tomando como valor uno a uno el nombre de los archivos del directorio
actual. Como puedes ver, dentro del for (desde el do hasta el done) se muestra el contenido de la
variable i.
Ejercicio propuesto.
Copia y ejecuta el ejercicio anterior. Comprueba que funciona y modifcalo para que muestre otro
directorio a tu eleccin.
Veamos otro ejemplo. El ejemplo anterior no es muy parecido a los bucles for de otros lenguajes
como java, C, etc. El siguiente ejemplo s se asemeja al for de dichos lenguajes:
El comando seq 1 10 genera una secuencia que va del 1 al 10. Si te fijas lo que har este script es
mostrar por pantalla los nmeros del 1 al 10 ambos incluidos.
Ejercicio propuesto.
Copia y ejecuta el ejercicio anterior. Comprueba que funciona y modifcalo para que muestre los
nmeros del 5 al 50.
Seras capaz de hacer que solamente se muestren los nmeros pares?
Bueno, ya que sabemos cmo funciona el bucle for pasemos a ver cmo funcionan los bucles
while y until. Si has entendido el for no te costar nada aprender estos otros. Veamos
primeramente cmo funciona el bucle while con un ejemplo:
En este ejemplo tenemos una variable que se llama CONTADOR que al principio vale 0 y luego se
va incrementando uno a uno hasta llegar a 10. El resultado de ejecutar el script anterior es el
siguiente:
El
El
El
El
El
El
El
El
El
El
contador
contador
contador
contador
contador
contador
contador
contador
contador
contador
es
es
es
es
es
es
es
es
es
es
0
1
2
3
4
5
6
7
8
9
No llega a mostrar el valor 10 porque la condicin es CONTADOR -lt 10 (lt es less than). Ya
veremos ms adelante cmo funcionan las condiciones.
CONTADOR:
CONTADOR:
CONTADOR:
CONTADOR:
CONTADOR:
CONTADOR:
CONTADOR:
CONTADOR:
CONTADOR:
18
17
16
15
14
13
12
11
10
Ejercicios propuestos.
1. Realiza un script que muestre los nmeros pares del 0 al 100 con while.
2. Realiza el mismo ejercicio de forma descendente pero utilizando until.
Si te ha gustado este post o lo has encontrado interesante no dejes de continuar aprendiendo shell
script en la tercera entrega.
No se si te has percatado en el ejercicio anterior, pero TATACHAN nunca aparecer por pantalla. Si
te das cuenta, la funcion salte hace que el script termine en ese mismo instante.
Una caracterstica fundamental de las funciones son los argumentos. Los argumentos nos sirven
para parametrizar las funciones y que estas sean ms genricas.
A continuacin se muestra un ejemplo de funciones con argumentos:
Si te das cuenta, la funcin mostrar admite un parmetro que es $1. Si se le quisiesen pasar dos
parmetros seran $1 para el primero y $2 para el segundo (y as sucesivamente). Esta funcin de
momento solamente muestra el parmetro por pantalla pero podra hacer muchas ms cosas con
l.
Realiza un script con una funcin factorial que muestre por pantalla el factorial del nmero que se le
pasa como parmetro. No utilices recursividad, utiliza los bucles vistos con anterioridad.
Dentro de un script podemos referenciar los argumentos pasados al mismo mediante las
siguientes variables:
Como puedes ver al principio del script compruebo con [ -z "$1" ] que al menos existe el primer
parmetro y en caso contrario muestra los mensajes que ves y sale con el comando exit. De esa
manera termina y no se sigue ejecutando el script.
El script anterior puede servirnos para crear un script algo ms complejo como el siguiente:
Como puedes ver, he reutilizado el script anterior para hacer uno ms completo. Este script
establece unos directorios origen y destino del backup y un fichero (FICH) donde se va a realizar el
backup el cual tiene como nombre backup- y la fecha en que se realiz.
Copia y ejecuta el cdigo anterior. Comprueba que funciona y modifica el cdigo para cambiar el
nombre del fichero y que almacene los backup en otro directorio.
Esas lecturas interactivas con los usuarios las hacemos mediante la orden read. Veamos un
ejemplo muy sencillo de script con una orden read:
#!/bin/bash
echo Por favor, introduzca su nombre
read NOMBRE
echo " Hola $NOMBRE, cmo estas? "
Incluso si quieres, puedes poner varias lecturas en una misma orden read:
#!/bin/bash
echo Por favor, introduzca su nombre y apellido
read NOMBRE APELLIDO
echo " Hola $NOMBRE $APELLIDO, cmo estas? "
Existe una forma de lectura de variables un poco ms profesional y es meterle la opcin -n.
echo -n Introduzca un parmetro :
read VAR
echo El valor del parmetro es $VAR
De esta manera lee el parmetro en la misma lnea que escribe el texto y no en la siguiente.
Si te ha gustado este post o lo has encontrado interesante no dejes de continuar aprendiendo shell
script en la cuarta entrega.
Doblamos un nmero?
#!/bin/bash
clear
read -p Inserta un nmero: numero
until [ $numero -eq 0 ]; do
let numero=numero*2
echo El doble es $numero.
read -p Quieres doblar? respuesta
if [ $respuesta = no ] || [ $respuesta = NO ]; then
numero=0
else
echo Interpretaremos que has dicho que s
fi
done
echo Adis
Dejar un comentario
19 OCTUBRE, 2012
19 OCTUBRE, 2012
Variable Local
#/!bin/bash
function saludo {
19 OCTUBRE, 2012
Variable Global
#/!bin/bash
function saludo {
NOMBRE=Jose Antonio
echo Hola seor $NOMBRE encantado de conocerle
}
NOMBRE=Juana
saludo
echo En el script principal, mi nombre es $NOMBRE
Dejar un comentario
19 OCTUBRE, 2012
Calculadora
#Primero duplica el nmero (3 en este caso), despus lo triplica y finalmente vuelve a mostrar el nmero
original
#/!bin/bash
function doble {
echo voy a doblar el valor de numero
let NUMERO*=2
}
function triple {
echo voy a triplicar el valor de numero
let NUMERO*=3
}
function reset {
echo voy a resetear el valor de numero
let NUMERO=3
}
NUMERO=3
echo $NUMERO vale: $NUMERO
doble
echo $NUMERO vale: $NUMERO
triple
echo $NUMERO vale: $NUMERO
reset
echo $NUMERO vale: $NUMERO
Dejar un comentario
17 OCTUBRE, 2012
Mostrar IP
#Muestra por pantalla la IP del equipo
#!/bin/bash
clear
echo Mi IP es: $(ifconfig eth0 | grep inet | cut -d: -f2 | cut -d -f1)
Dejar un comentario
17 OCTUBRE, 2012
#!/bin/bash
clear
read -p Introduce una nombre fichero: nombre
read -p Introduce su tamao: tamano
if [ -n $nombre ]; then
nombre=vacio
fi
if [ -n $tamano ]; then
tamano=1
fi
dd if=/dev/zero of=$nombre count=$tamano bs=1024
Dejar un comentario
17 OCTUBRE, 2012
let pila=pila+1
elif [ $aux = u ]; then
let pila=pila+1
else
let pila=pila-1
fi
let contador=contador+1
done
if [ $pila -eq 0 ]; then
echo La palabra $palabra tiene el mismo numero de vocales que consonantes
elif [ $pila -gt 0 ]; then
echo La palabra $palabra tiene ms vocales que consonantes
else
echo La palabra $palabra tiene menos vocales que consonantes
fi
Dejar un comentario
17 OCTUBRE, 2012
Par o impar
#Introduce un nmero y te indicar si es par o impar.
#!/bin/bash
read -p Introduce un numero para saber si el numero es par o impar: numero
let resto=numero%2
if [ $resto -eq 0 ]; then
echo El numero $numero es par
else
echo El numero $numero es impar
fi
Dejar un comentario
17 OCTUBRE, 2012
Case Zodiaco
# Introduce el ao que naciste y te dir el signo del zodiaco que eres.
#!/bin/bash
clear
read -p Inserta el ao que naciste: ano
let zodiaco=ano%12
case $zodiaco in
0) signo= el Mono ;;
1) signo= el Gallo ;;
2) signo= el Perro ;;
3) signo= el Cerdo ;;
4) signo= el Rata ;;
5) signo= el Buey ;;
6) signo= el Tigre ;;
7) signo= el Conejo ;;
8) signo= el Dragon ;;
9) signo= el Serpiente ;;
17 OCTUBRE, 2012
Case Colores
#!/bin/bash
#pedir al usuario doce colores de una paleta de 4: rojo, verde, azul, negro y mostrar cuntas veces ha
introducido dichos colores.
clear
function comprobar {
case $color in
rojo) let rojo=rojo+1 ;;
verde) let verde=verde+1 ;;
azul) let azul=azul+1 ;;
negro) let negro=negro+1 ;;
*) let invalido=invalido+1 ;;
esac
}
rojo=0
verde=0
azul=0
negro=0
invalido=0
for (( i = 1 ; i <= 12; i++ )) do
read -p Inserta un color entre rojo, verde, azul y negro: color
comprobar
done
echo Has introducido $rojo veces el color rojo \
Has introducido $verde veces el color verde \
Has introducido $azul veces el color azul \
Has introducido $negro veces el color negro \
y has introducido $invalido errores.
Dejar un comentario
17 OCTUBRE, 2012
Capica
#Pide al usuario un nmero de tres digitos y nos dice si es capica o no
#!/bin/bash
read -n 3 -p Introduce un numero de 3 digitos: numero
echo
if [ $numero -lt 100 ]; then
echo El numero no tiene 3 cifras
else
primeracifra=$(echo $numero | cut -c 1)
terceracifra=$(echo $numero | cut -c 3)
if [ $primeracifra -eq $terceracifra ]; then
echo El nmero es capica
else
echo El nmero no es capica
fi
fi
2. Escribe un script que te pida por teclado el nombre, despus los dos apellidos,
permanezca esperando durante 5 segundos y despus muestre por pantalla un
mensaje Tu nombre completo es ., .., ..
#!/bin/bash
#uso del comando read con varios parmetros y varios read
echo "Cul es tu nombre?"
read nombre
echo "Cules son tus apellidos?"
read apellido1 apellido2
sleep 5 # dormimos la terminal 5 segundos
echo " Tu segundo apellido es $apellido2 "
echo " Tu nombre completo es $nombre $apellido1 $apellido2"
echo " Hola $nombre"
Como veremos en la salida podemos llamar a las variables introducidas
en el orden en que queramos. Solo he usado el comando sleep para
que podis apreciar la salida del script diferenciada de la entrada de
parmetros.
Mensajes: 32
Fecha de inscripcin:11/05/2012
Escribe un script que pida por teclado un nmero y despus muestre por pantalla.
El resultado del cuadrado de (nmero introducido) es (numero al cuadrado).
La funcin a utilizar para generar el cuadrado es `expr $num \* $num`
#!/bin/bash
#Ejemplo de expr (el cuadrado de un numero)
echo "Dame un nmero."
read numero
resultado=`expr $numero \* $numero` # declaramos la variable
Mensajes: 32
Fecha de inscripcin:11/05/2012
Explica lo que realiza este script
#!/bin/bash
IFS=$','
vals='/mnt,/var/lib/vmware/Virtual Machines,/dev,/proc,/sys,/tmp,/usr/portage,/var/
tmp'
for i in $vals; do echo $i; done
unset IFS
Output:
/mnt
/var/lib/vmware/Virtual Machines
/dev
/proc
/sys
/tmp
/usr/portage
/var/tmp
En este caso el separador usado es la coma, despus se carga en la variable
vals, la lista de directorios que se indica en el ejemplo. Posteriormente
se trabaja con esa variable vals, mostrando por pantalla cada uno de los
directorios que se encuentran separados por comas hasta llegar al final de
dicha variable.
Modifica estas dos lneas de cdigo para que en ambos casos, muestra el ao, mes y da.
echo "2010 10 12" | read y m d
r=$(echo '2010-10-12' |(IFS='-'; read y m d; echo $y $m $d))
Para que ambas lneas de comando muestren lo mismo por pantalla, en la primera
lnea hay que incluir lo siguiente.
echo "2010 10 12" | (IFS= ; read y m d; echo $y $m $d)
Si queremos que salte de lnea
echo "2010 10 12" | (IFS= ; read y m d; echo $y; echo $m; echo $d)
Explica lo que genera este script, si realizsemos un $login $pw $uid $gid
grep asir /etc/passwd | IFS=":" read login pw uid gid gecos home sh
Busca el usuario asir en el fichero /etc/passwd, despus carga en las
variables login pw uid gid gecos home sh, el valor de esa lnea.
Pero no muestra nada por pantalla.
Mensajes: 32
Fecha de inscripcin:11/05/2012
Crea un programa que pida por pantalla el nombre de un animal (caballo, perro, gato,
canguro, gallina). Si se introduce uno de los tres primeros, mostrara por pantalla el
siguiente mensaje es una animal de 4 patas, si son los dos ltimos, mostrara por pantalla es
un animal de 2 patas.
#!/bin/bash
read -p "Introduce el nombre de un animal (caballo, perro, gato, canguro, gallina): " animal
case $animal in
caballo|perro|gato) echo "Es un animal de 4 patas";;
canguro|gallina) echo "Es un animal de 2 patas";;
*) echo "No has introducido ningun animal anterior";;
esac
Mensajes: 32
Fecha de inscripcin:11/05/2012
Crear un programa que meta dos cadenas de caracteres en dos variables. Y las compare, si
son iguales mostrara por pantalla las cadenas son iguales y si no lo son mostrara el mensaje
contrario.
read -p "introduce una cadena: " cadena1
read -p "Introduce otra cadena: " cadena2
if [ $cadena1 = $cadena2 ]
then echo "son iguales"
else echo "son distintas"
fi
Mensajes: 32
Fecha de inscripcin:11/05/2012
Este script es un claro ejemplo de cmo comprobar si un usuario y un grupo existen en el
sistema, vemos tambin el uso que se le da al elif.
#! /bin/bash
clear
read -p Introduce usuario user
read -p Introduce grupo group
if `grep -e $user:.* /etc/passwd >/dev/null`
then
if `grep -e $group:.* /etc/group >/dev/null`
then
echo Usuario y grupo ya existen en el sistema
fi
elif `grep -e $group:.* /etc/group >/dev/null`
then
echo usuario no existe, grupo si!!
else
echo Ni grupo ni usuario existen
fi
7 cual es el mayor o si son iguales (ELIF) el Vie Mayo 11, 2012 7:42
am
Demichelis
Mensajes: 32
Fecha de inscripcin:11/05/2012
Crear un script que pida dos nmeros por teclado, compruebe que se han cargado con un
valor, una vez asegurado de ello. Compruebe si son iguales, y muestre por pantalla, dichos
nmeros son iguales, si un numero es mayor que el otro, y si un numero es menor que otro.
read -p "introduce un numero:" cadena1
read -p "introduce otro numero:" cadena2
if [ $cadena1 -eq $cadena2 ]
then echo "los dos numeros son iguales"
elif [ $cadena1 -gt $cadena2 ]
then echo "el primer numero es mayor"
else "el segundo numero es mayor"
fi
Mensajes: 32
Fecha de inscripcin:11/05/2012
x=1
until [ $x -ge 10 ]
do
echo $x
x=`echo "$x + 1" | bc`
done
Mensajes: 32
Fecha de inscripcin:11/05/2012
Crear un script que reciba un directorio como primer parmetro, y a continuacin una lista
de archivos. El script debe validar que los parmetros recibidos sean realmente archivos y
luego copiarlos al directorio recibido.
if [ -d $1 ]; then
nombre_dir=$1
shift
for i in $*; do
if [ -f $i ]; then
cp $i $nombre_dir
else
echo "El archivo $i no es vlido"
fi
done;
else
echo "El primer parmetro debe ser un directorio"
fi
Mensajes: 32
Fecha de inscripcin:11/05/2012
read -p "Desea aadir una nueva direccin (s/n): " CONF
case $CONF in
[sS]*) read -p "Introduce la direccin:" DIRECCION
echo $DIRECCION >> Fichero_Datos.txt
;;
*) echo "El fichero no se modifica"
;;
esac
Mensajes: 32
Fecha de inscripcin:11/05/2012
echo Por favor seleccione P, D o Q para
echo [P]rint Imprime un archivo
echo [D]elete Borra un archivo
echo [Q]uit Sale del programa
read response
case $response in
P|p) echo Nombre del archivo a imprimir?
read filename
lp $filename;;
D|d) echo Nombre del archivo a eliminar?
read filename
rm $filename;;
*) echo Salir ahora;;
esac
Mensajes: 32
Fecha de inscripcin:11/05/2012
Se pueden hacer selecciones segn el nmero de parmetros (representado por el shell como
$#).Interprete, pruebe y comente el siguiente archivo de comandos:
# Nombre: recent
case $# in
0) ls lt |head ;;
1) case $1 in
[0-9]) ls lt |head -$1 ;;
*) echo Uso: nmero de archivos recientes;;
esac;;
*) echo Uso: nmero de archivos recientes;;
esac
Mensajes: 32
Fecha de inscripcin:11/05/2012
case `who | grep $1>/dev/null` in
0) echo "$1 est conectado" ;;
*) echo "$1 no est aqu. Intntelo ms tarde" ;;
esac
echo "Pase un buen dia."
-----------------------------------------------------------------------if who | grep $1>/dev/null
Mensajes: 32
Fecha de inscripcin:11/05/2012
2. El comando test le permite realizar todo tipo de comprobaciones muy tiles antes de
ejecutar un
determinado comando. Consulte la pgina del man para este comando y a continuacin
interprete,
pruebe y comente los siguientes archivos de comandos:
Sobran puntos y comas en todas menos en las case;el script testea las opciones hasta que le
pones
Si quieres copiar el archivo no , si es no sale si es si lo copia donde tu le ordenes el destino.
# Nombre: safcopy
case $# in
2) if test ! r $1;;
then
exit(1)
fi
if test f $2
then
if test w $2
then
echo $2 existe Desea una copia an? (Y|N)
read resp
case $resp in
Y|y) cp $1 $2
*)
exit(1);;
esac
else
exit(1)
fi
else
cp $1 $2
fi
*) echo Uso: safcopy <origen><destino>
exit(1)
esac
Mensajes: 32
Fecha de inscripcin:11/05/2012
hour=`date +%H`
if test $hour lt 12
then echo Buenos das, $LOGNAME
else
if test $hour lt 17
then echo Buenas tardes, $LOGNAME
else echo Buenas noches, $LOGNAME
fi
fi
Mensajes: 32
Fecha de inscripcin:11/05/2012
#!/bin/bash
if [ "$(whoami)" = 'root' ] then
shutdown -r +1
else
echo "El script no se ejecutar porque usted no es usuario 'root'"
fi
Mensajes: 32
Fecha de inscripcin:11/05/2012
if [ $# -eq 2 ]
then echo "Se deben pasar dos argumentos. Formato correcto $0 archivo A o Z"
if [ -f $1 ]
then
if [ $2 = "A" ]
then cat |sort $1
elif [ $2 = "Z" ]
then cat |sort -r $1
else echo "Error. $2 no es ni A ni Z."
fi
else echo " $1 no es un fichero"
fi
else echo "Se necesitan dos parametros.Sintaxis : archivo A o Z"
fi
Mensajes: 32
Fecha de inscripcin:11/05/2012
while :
do echo "Hola mundo"
sleep 1
done
Mensajes: 32
Fecha de inscripcin:11/05/2012
if test $# -lt 2
then
Mensajes: 32
Fecha de inscripcin:11/05/2012
if test $# -lt 1
then echo "Error. No se proporcionaron argumentos. La sintaxis es la siguiente:"
echo "$0 nombre_directorio"
elif test -f $1
then echo "Error. $1 no es un directorio. La sintaxis del script es la siguiente:"
echo "$0 nombre_directorio"
elif test -d $1
then cd $1
file *
else echo "Error. $1 no es ni directorio ni archivo. La sintaxis del script es la siguiente:"
echo "$0 nombre_directorio"
fi
Mensajes: 32
Fecha de inscripcin:11/05/2012
Con un bucle for podr especificar un conjunto de archivos o valores para que se utilicen con
algunos comandos. Por ejemplo, para copiar todos los archivos cuyos nombres terminen por
.txt al directorio textdir utilice el siguiente bucle for:
#!/bin/bash
mkdir textdir
for i in $(ls *.sh)
do
cp $i textdir/$i
done
El shell interpreta la expresin anterior y hace que la variable i tome en cada iteracin el valor
de cada uno de los ficheros de la lista que sigue a in.
Mensajes: 32
Fecha de inscripcin:11/05/2012
for i in $*
do
if [ lp -t $i 2>/dev/null ]
then
echo $i >> printed
else
echo $i >> notprinted
fi
done
if test -s printed
then
echo "Estos archivos fueron enviados a la impresora">mes
cat printed>>mes
mail $LOGNAME < mes
#rm mes printed
fi
if test -s notprinted
then echo "Estos archivos no fueron enviados a la impresora">mes
cat notprinted>>mes
mail $LOGNAME < mes
#/var/mail
#rm mes notprinted
fi
Mensajes: 32
Fecha de inscripcin:11/05/2012
cp $MAIL omail
while diff omail $MAIL>/dev/null
do
cp $MAIL omail
sleep 30
done
echo "Correo Nuevo !!!" | write $LOGNAME
Hacer un guion de shell que copie todos los ficheros del directorio
actual en un directorio llamado csg. Si el directorio no existe el guion lo
debe de crear.
if [ ! -d csg ]
then
mkdir csg
fi
cp * csg
SCRIPTS de LINUX
Scripts bsicos de frmulas matemticas.
Notas:
- Los signos ` son acentos, NO son ' apstrofes.
- Cuando la variable est a la izquierda de la igualdad o con el read,
no lleva $. Cuando se opera con ella o va con el echo s lleva $
a=12356
read b
resul=`expr $a + $b`
echo Solucion $resul
- Cuidado, segn la orden el signo = deber estar junto o separado:
a=12345
while [ $b = "hola" ]
El = va junto
El = va separado
chmod +x trian
- Para ejecutar un script nos situamos en la carpeta en donde est
guardado y escribimos ./trian
- Para evitar tener que escribir ./ y poder ejecutarlo desde cualquier
carpeta, hacemos lo siguiente...
--- Creamos una carpeta llamada losscripts en donde guardaremos
todos nuestros scripts
mkdir /home/juan/losscripts
Ahora aadimos esa carpeta al PATH; para que siempre reconozca
el PATH, editamos el archivo...
/home/juan/bashrc o bien el /home/juan/.bash_profile, depende de la
versin y aadimos...
PATH="$PATH:/home/juan/losscripts"
A partir de ahora para ejecutar un script slo tenemos que escribir
su nombre... trian
med=`expr \( $1 + $2 + $3 + $4` \) / 4
bisi=`expr $1 % 4`
if [ $bisi -eq 0 ]
then
echo El $1 es bisiesto.
else
echo El $1 no es bisiesto.
fi
Lo ejecutaremos as:
./bisiesto 2012
9.- Realizar un script llamado calcu, al cul haya que suministrarle
tres parmetros, los dos primeros sern nmeros y el tercer
parmetro la letra: s, r, m, d.
Segn la letra sea s, r, m, d, as sumar, restar, multiplicar o
dividir los dos nmeros.
if [ $3 = "s" ]
then
sum=`expr $1 + $2`
echo $1 + $2 = $sum
fi
if [ $3 = "r" ]
then
res=`expr $1 - $2`
echo $1 - $2 = $res
fi
if [ $3 = "m" ]
then
mul=`expr $1 \* $2`
echo $1 x $2 = $mul
fi
if [ $3 = "d" ]
then
div=`expr $1 / $2`
echo $1 / $2 = $div
fi
if [ $3 != "s" -o $3 != "r" -o $3 != "m" -o $3 != "d" ]
then
echo "La letra no existe"
fi
Lo ejecutaremos as:
./calcu 42 26 m
Realizacin de scripts en donde los valores se introducen mediante
variables (read a)
res=`expr $a - $b`
echo $a - $b = $res
fi
if [ $operacion = "m" ]
then
mul=`expr $a \* $b`
echo $a x $b = $mul
fi
if [ $operacion = "d" ]
then
div=`expr $a / $b`
echo $a / $b = $div
fi
13.- Realizar un script llamado dia, el cul solicite que introduzca un
dia de la semana: lunes, martes, miercoles, jueves, viernes, sabado,
domingo
Segn el da introducido saldr una frase.
echo "Introduzca un dia de la semana"
read dia
case $dia in
lunes) echo "El lunes es una lata" ;;
martes) echo "El martes es el segundo dia de la semana" ;;
miercoles) echo "Hoy es miercoles" ;;
jueves) echo "Siempre en medio" ;;
viernes) echo "Ya es finde" ;;
sabado) echo "A sali" ;;
domingo) echo "Domingo pingo" ;;
esac
14.- Realizar un script llamado figura; saldr un men y el usuario
eligir una letra segn la figura a la que quiera calcular el rea.
Segn la figura elegida solicitar los factores necesario y calcular
su rea.
echo "Area del cuadrado......c"
echo "Area del rectangulo.....r"
echo "Area del triangulo........t"
echo "Area del circulo..........s"
echo "------------------------"
echo "Introduzca una letra"
read letra
case $letra in
c) echo "Introduzca el lado del cuadrado"
read lado
ac=`expr $lado \* $lado`
echo El area del cuadrado es $ac ;;
do
echo "Introduce un numero, f para salir"
read x
if [ $x -gt $mayor ]
then
mayor=$x
fi
echo El numero mayor es $mayor
if [ $x -lt $menor ]
then
menor=$x
fi
echo El numero menor es $menor
done
17.- Realizar un script llamado siguientes, el cul solicite un nmero
y nos responda mostrndonos los 6 siguientes
echo Introduce un numero
read a
tope=`expr $a + 6`
while [ $a -le $tope]
do
a=`expr $a + 1`
echo $a
done
18.- Realizar un script llamado tabla, que solicite un nmero.
Responder mostrando la tabla de multiplicar de ese nmero.
read numero
mul=1
while [ $mul -lt 10 ]
do
pro=`expr $numero \* $mul`
echo $numero x $mul = $pro
mul=`expr $mul + 1`
done
echo "Quieres hacer otro calculo"
read otro
done
echo "ADIOS"
20.- Realizar un script llamado pitagora, el cul solicite la entrada
de un cateto, luego la entrada de otro cateto y luego calcule la
hipotenusa de un tringulo rectngulo.
El comando bc -l se utiliza para realizar operaciones matemticas +
- * / seno coseno tangente raizcuadrada (sqrt) exponente ^, se
pueden utilizar nmeros decimales.
resultado=$(echo "oooooperacionnnnn" | bc -l )
clear
echo "----------------------------"
echo "-- Teorema de Pitagoras --"
echo "----------------------------"
echo "Introduce el cateto a"
read a
echo "Introduce el cateto b"
read b
c=$(echo "sqrt($a^2 + $b^2)" |bc -l)
echo La hipotenusa vale $c
21.- Realizar un script llamado lamedia, el cul nos solicitar
continuamente que introduzcamos nmeros. Cuando introduzcamos
la letra f, saldremos de un bucle y calcular la media de los nmeros
introducidos.
num=0
c=-1
suma=0
while [ $num != f ]
do
echo "Introduce un numero, f para salir"
read num
suma=$(echo "$suma + $num" | bc -l)
c=$(echo "$c + 1" | bc -l)
done
med=$(echo "$suma / $c" | bc -l)
echo "La media vale $med"
22.- Realizar un script llamado facto, el cul solicite que se
introduzca un nmero. Calcular el factorial del nmero
introducido
c=0
f=1
echo "Introduce un numero"
read num
while [ $c != $num ]
do
c=$(echo "$c + 1" | bc -l)
f=$(echo "$f * $c" | bc -l)
done
echo "El factorial de $num es $f"
23.- Realizar un script llamado radian, el cul solicite que
introduzca grados. Se debern convertir a radianes.
rad = (g * 2 * 3.1416) / 360
echo "Introduce el angulo en grados"
read g
rad=$(echo "($g * 2 * 3.1416) / 360" | bc -l)
echo "En radianes vale $rad"
24.- Realizar un script llamado proyecta, el cul pedir un mdulo y
un ngulo, en grados, de un vector. Calcular la componente
horizontal y la componente vertical.
h = m * cos (alfa)
v = m * sen (alfa)
Nota: el ngulo debe ir en radianes. Coseno es c($rad) y el seno es
s($rad)
echo "Introduce el modulo"
read m
echo "Introduce el angulo en grados"
read g
rad=$(echo "($g * 2 * 3.1416) / 360" | bc -l)
h=$(echo "$m * c($rad)" | bc -l)
v=$(echo "$m * s($rad)" | bc -l)
echo "La componente horizontal vale $h"
[ ^ significa elevado a ]
read otro
done
echo "ADIOS"
27.- Realizar un script llamado adivina. El ordenador generar un
nmero aleatorio del 0 al 99 que debemos de adivinar.
x=$((RANDOM%100))
mio=200
c=0
while [ $mio -ne $x ]
do
echo "Introduce un numero"
read mio
c=$(echo "$c + 1" | bc -l )
if [ $mio -gt $x ]
then
echo "El numero $mio es mayor que el del ordenador"
fi
if [ $mio -lt $x ]
then
echo "El numero $mio es menor que el del ordenador"
fi
done
echo "Has acertado de $c intentos"
28.- Realizar un script llamado quiniela, que presente los 14 signos
de una quinela.
Deber de sacar un nmero aleatorio del 1 al 6.
Si sale el 1 o el 2 o el 3, deber poner "1"
Si sale el 4 o el 5, deber poner "X"
Si sale el 6 deber poner "2"
c=0
while [ $c -le 14 ]
do
d=$((RANDOM%6 ))
d=`expr $d + 1`
if [ $d -eq 1 -o $d -eq 2 -o $d -eq 3 ]
then
echo "1"
if
if [ $d -eq 4 -o $d -eq 5 ]
then
echo "X"
fi
if [ $d -eq 6 ]
then
echo "2"
fi
c=`expr $c + 1`
done
29.- Realizar un script llamado divisores que calcule los divisores de
un nmero.
#Divisores
echo Introduce un nmero
read a
n=$a
echo Los divisores de ese numero son:
while [ $n -ge 1 ]
do
d=$(echo " scale=0; $a%$n" | bc -l)
if [ $d -eq 0 ]
then
echo $n
fi
n=$(echo "$n-1" | bc -l)
done
30.- Realizar una script llamado paralelo, en donde se solicite
introducir el valor de dos resistencia. Se calcular el equivalente
paralelo de ellas.
# Solicitud de datos
echo "Introduce R1"
read r1
echo "Introduce R2"
read r2
# Calculos
numerador=$(echo "$r1 * $r2" | bc -l )
denominador=$(echo "$r1 + $r2" | bc -l )
total=$(echo "$numerador / $denominador" | bc -l )
# Presentacion del resultado
echo "La resistencia equivalente vale $total"
31.- Realizar un script llamado decibelios, en donde se solicite
introducir el valor de la tensin de entrada y salida de un
amplificador. Se calcular su ganancia en decibelios.
echo -n "Introduce tension de entrada .... "
read ve
echo -n "Introduce tension de salida ....... "
read vs
ganancia=$(echo "$vs / $ve" | bc -l )
decibelios=$(echo "(20 * l($ganancia)) / l(10)" | bc -l )
maysculas.
echo Introduce la direccin absoluta de un archivo
read archi1
cat $archi1
cat $archi1 | tr "aeiou" "AEIOU" > archi2
cat archi2
Nota: Tambin se podra haber puesto
tr "aeiou" "AEIOU" < $archi1 > archi2
34.- Realizar un script llamado ecuacion, en donde se solicite los
parmetros a, b y c de una ecuacin de 2 grado. El script calcular
las dos raices de la ecuacin.
ax2 + bx + c = 0
read archi
if [ -f $archi ]
then
if [ -d /home/utele/comprimidos ]
then
gzip -c $archi > /home/utele/comprimidos/abc.gz
else
mkdir /home/utele/comprimidos
gzip -c $archi > /home/utele/comprimidos/abc.gz
fi
else
echo EL ARCHIVO $archi NO EXISTE.
fi
36.- Realizar un script llamado nombre, el cual solicite el nombre de
un archivo que est en el mismo directorio que el script, luego
solicite una palabra y copie el archivo indicado con el nombre que
tenia adems de la nueva palabra.
echo Introduce un archivo que este en el mismo directorio que el script
read archi
echo Introduce una palabra
read pala
cp $archi $arci$pala
37.- Realizar un script llamado ordena, que reciba una serie de
palabras y las muestres en pantalla ordenadas alfabticamente.
Utilizar un archivo auxiliar.
palabra="o"
> archi
while [ $palabra != "f" ]
do
echo "Introduce una palabra, f para salir"
read palabra
clear
echo $palabra >> archi
sort archi
done
38.- Realiza un script llamado multi, en donde tengamos que
introducir como parmetro un nmero del 1 al 9. Luego nos pida
que introduzcamos un nmero y luego otro mayor. Nos presentar
la tabla de multiplicar del parmetro introducido, entre los dos
nmeros lmites.
Ejemplo: ./multi 4
Introduce lmite inferior: 6
Introduce lmite superior: 11
4 x 6 = 24
4 x 7 = 28
4 x 8 = 32
4 x 9 = 36
4 x 10 = 40
4 x 11 = 44
echo Introduce limite inferior
read i
echo Introduce limite superior
read s
while [ $i -le $s]
do
m=`expr $1 \* $i`
echo $1 x $i = $m
i=`expr $i + 1`
done
39.- Juego de dados. Se tiran dos dados, si la suma de ambos es 7,
GANAS, si es distinto de 7 PIERDES.
otro="s"
while [ $otro == "s" ]
do
x=$((RANDOM%6))
y=$((RANDOM%6))
x=`expr $x + 1`
1a6
y=`expr $y +1`
1a6
echo Dado1: $x
echo Dado2: $y
# Saca un nmero de 0 al 5
# Saca un nmero de 0 al 5
# Le suma 1 para convertirlo de
# Le suma 1 para convertirlo de
suma=`expr $x + $y`
if [ $suma -eq 7 ]
then
echo LA SUMA ES 7
else
echo NO ES 7
fi
echo Quieres otra tirada s,n
read otro
done
40.- Realizar un script que genere 3 nmero aleatorios del 1 al 3 (
1,2,3).
Si los tres nmeros generados son iguales: GANAS
A tener en cuenta:
-eq
-me
-lt
=
=
<
-gt
>
-le
<=
-ge
>=
-a
Si existe
-d
-f
Existe es un
directorio
Existe es un fichero
-r
Es de lectura
-w
Es de escritura
-x
Es ejecutable
Expresiones lgicas
If [Expresion]; Then
Realiza expresin si es verdadera
FI Cierra la estructura
If [Expresion]; Then
Realiza expresin si es verdadera
Else
Realiza expresin si es falsa
FI
-n utilizamos para variables si no es nula
-z Utilizamos para variables nulo, vacia o no definida
Cuando hay ms de dos opciones utilizamos ELIF
If [Expresion]; Then
Realiza expresin si es verdadera
elif [Expresion]; Then
Realiza expresin si es verdadera
elif [Expresion]; Then
Realiza expresin si es verdadera
Else
Realiza expresin si es falsa
FI
------------------------------------------------------#!/bin/bash
#primer programa
Echo Hola mundo
Guardamos con extensin .SH
- primer-programa.sh
#!bin/bash
#Muestra nombre y apellidos por parmetros
Echo Hola $1, tienes $2 aos
Guardamos como parmetros.sh
Desde terminal ejecutamos
Bash parmetros.sh Jhon 35
------------------------------------------------------------Fichero que solicita nombre y edad por pantalla
#!bin/bash
#Muestra nombre y apellidos por parmetros
Echo Introduzca su nombre
Read nombre
Echo introduzca su edad
Read edad
Echo Hola eres $nombre y tienes $edad aos
Guardamos como introduce-parametros.sh
Desde terminal ejecutamos
Bash inbtroduce-parmetros.sh Jhon 35
Aqu el introduzca su nombre hace un salto de lnea para introducir el nombre, si queremos que se haga
en la misma lnea ponemos -n
Echo n: Nos deja poner el nombre y la edad en la misma linea
------------------------------------------------------------#!bin/bash
#Muestra nombre y apellidos por parmetros
Echo -n Introduzca su nombre:
Read nombre
Echo -n introduzca su edad:
Read edad
Echo Hola eres $nombre y tienes $edad aos
READ P: nos muestra todo con una sola lnea de comando eliminamos el echo
------------------------------------------------------------#!bin/bash
#Muestra nombre y apellidos por variable
read p Introduzca su nombre: nombre
read -p introduzca su edad: edad
Echo Hola eres $nombre y tienes $edad aos
Introducimos nombre y ao de nacimiento, que muestre el nombre y la edad.
------------------------------------------------------------#!bin/bash
#Muestra nombre y apellidos por parmetros
Actual=2011
Echo Te llamas $1 y tienes $(expr $actual - $2) aos.
#Script que mire si el fichero por parametro, existe. si existe mostrar mensaje con el nombre del fichero. Si
no existe crearlo y decir que lo ha creado con el nombre quese ha puesto.
if [ -a $1 ]; then
echo "El fichero existe se llama "$1
else
touch $1
echo "Se ha creado el fichero con el nombre "$1
fi
---------------------------------------------------------#!/bind/bash
#Script que mire si el fichero pedido, existe. si existe mostrar mensaje con el nombre del fichero. Si no
existe crearlo y decir que lo ha creado con el nombre quese ha puesto.
read -p "Introduzca ruta del fichero: " f1
if [ -a $f1 ]; then
echo "El fichero existe se llama "$f1
else
touch $f1
echo "Se ha creado el fichero con el nombre "$f1
fi
---------------------------------------------------------#!/bind/bash
#Script que reciba un nombre de fichero, verifique que existe y que es un fichero comun (lectura-escritura)
lo convierta en ejecutable para el usuario y el grupo y muestre el estado final de los permisos.
if [ -f $1 ]; then
echo "El parametro introducido es un fichero"
ls -l $1
if [ -r $1 ];then
echo " Tiene permisos de Lectura"
if [ -w $1 ];then
echo "Tiene permisos de escritura "
chmod ug+x $1
ls -l $1
else
echo "No es un fichero comun"
fi
else
echo "No es un fichero comun"
fi
else
echo "El fichero no existe "
fi
------------------------------------------------------------
#!/bind/bash
#Script que reciba un nombre de fichero, verifique que existe y que es un fichero comun (lectura-escritura)
lo convierta en ejecutable para el usuario y el grupo y muestre el estado final de los permisos.
if [ -f $1 ]; then
echo "El parametro introducido es un fichero"
more $1
elif [ -d $1 ]; then
cd $1
ls
else
echo " ERROR!!! no es fichero ni directorio "
fi
-----------------------------------------------------------#/!bin/bash
#Script que nos muestra un menu para elegir una opcion, y nos da un mensaje despues de la eleccion.
case $op in
1)
echo "Ha pulsado opcion 1"
;;
2)
echo "Ha pulsado opcion 2"
;;
*)
echo "La opcion es incorrecta"
;;
esac
--------------------------------------------------------#/!bin/bash
#Script que nos muestra un menu para elegir la operacion a realizar
echo ""
echo "Realiza una operacion matematica segun las opciones"
echo ""
echo "a.Suma"
echo "b.Resta"
echo "c.Multiplicacin"
echo "d.Division entera"
echo "e.Resto"
echo "f.Es un numero par?"
case $op in
a)
suma=`expr $num1 + $num2`
echo "Ha pulsado opcion a, el resultado de la suma es "$suma
;;
b)
resta=`expr $num1 - $num2`
echo "Ha pulsado opcion b, el resultado de la resta es "$resta
;;
c)
multiplicacion=`expr $num1 \* $num2`
echo "Ha pulsado opcion c, el resultado de la multiplicacion es "$multiplicacion
;;
d)
division=`expr $num1 / $num2`
echo "Ha pulsado opcion d, el resultado de la division es "$division
;;
e)
resto=`expr $num1 % $num2`
echo "Ha pulsado opcion e, el resto es "$resto
;;
f)
res=`expr $num1 % 2`
if [ $res -eq 0 ]; then
echo " el numero introducido es " $num1 " es par"
else
echo " el numero introducido es " $num1 " No es par"
fi
;;
esac
--------------------------------------------------#/!bin/bash
#Script que nos diga al pulsar una tecla, si es letra, numero o caracter especial
read -n 1 tecla
case $tecla in
[a-z,A-Z]) echo "ha introducido una letra"
;;
[0-9]) echo "Ha introducido un numero"
;;
*) echo "Ha introducido un caracter especial"
;;
esac
-----------------------------------------------------#!/bin/bash
#realizar un scrip que reciba varios parametros y nos diga cuantos de esos parametros son de directorios
y cuantos son archivos. $# contador que indica cuantos parametros se pasan.
cont=0
contf=0
for var in $*; do
if [ -d $var ]; then
cont=`expr $cont + 1`
elif [ -f $var ]; then
contf=`expr $contf + 1`
else
echo "$var no es fichero ni directorio"
fi
done
echo "Ha introducido $cont directorios y $contf ficheros."
echo "Se han introducido $# parametros"
---------------------# Mostramos menu, con productos para vender, luego nos pide que introduzcamos la opcion. luego
mensaje que indica que introduzca moneda. Si ponemos precio exacto nos da mensaje, "Gracias buen
provecho", si ponemos menos, nos diga falta.
Si poner mas valor, nos indique el cambio con mensaje.
echo """"
echo "Bienvenido a la tienda On-line - CEPAL"
echo ""
echo "1. Refresco 1 euro"
echo "2. Sandiwch 3 euros"
echo "3. Tabaco 5 euros"
echo ""
read -p "Introduzca opcion:" op
read -p " Introduzca importe: " mon
case $op in
1)
precio=1
;;
2)
precio=3
;;
3)
precio=5
;;
*)
-------------------------------------
#/!bin/bash
#Realiza un script que introduzca numero por parametro y muestre tabla de multiplicar
echo " la tabla de multiplicar de $1 es: "
numerador=1
while [ $numerador -lt 11 ]; do
resul=`expr $1 \* $numerador`
echo "$1 x $numerador = $resul"
numerador=`expr $numerador + 1`
done
------------------
#!/bind/bash
#apertura carpeta contenido ASIR
ls /home/asir
-----------------------#/!bin/bash
#Realiza un script que muestre por pantalla los numeros del 1 al 20
num=1
while [ $num -lt 21 ]; do
echo "$num"
num=`expr $num + 1`
done
---------------------------