Bienvenidos/as al proceloso mar de las Oposiciones. Aquí hay fuentes de información, enlaces a páginas, libros y reflexiones sobre el duro trabajo del opositor/a (a Informática). Además, un podcast de Informática y 7.000 vídeos en Youtube.
Mostrando entradas con la etiqueta shell. Mostrar todas las entradas
Mostrando entradas con la etiqueta shell. Mostrar todas las entradas
sábado, 21 de abril de 2012
sábado, 18 de febrero de 2012
viernes, 10 de febrero de 2012
Shell Script Ejemplos de GREP
#!/bin/bash
#TODOS LOS SCRIPTS EN http://oposinf.blogspot.com/search/label/shellscript
#1. Utilidad grep
#El fichero /etc/passwd es un fichero de texto que contiene información #acerca de las cuentas de usuario definidas en el sistema.
#Cada línea contiene siete datos, separados por el carácter ‘:’. Estos datos son: nombre de la cuenta, password encriptado (opcional), el código de usuario (user ID), el código del grupo (group ID), un comentario, el nombre del directorio ‘home’ y el nombre del intérprete de comandos que se ejecutará cuando el usuario se conecte.
#Vamos a utilizar este fichero en las cuestiones siguientes.
#1. Mostrad la línea correspondiente a la cuenta alu.
#2. Mostrad las cuentas que empiecen por a.
#3. Mostrad las cuentas que empiecen por a o r.
#4. Mostrad las cuentas que terminen por u.
#5. Mostrad las cuentas que usen bash como intérprete de comandos.
#6. Mostrad las cuentas que NO usen bash como intérprete de comandos.
#7. Mostrad las cuentas que no empiecen por vocal.
#8. Mostrad las cuentas que empiecen por mayúscula.
#9. Mostrad las líneas cuyo tercer campo tenga una sola cifra.
#10. Mostrad las líneas que tengan cifras de 3 a 5 dígitos.
#11. Mostrad las líneas que tengan cifras de 3 dígitos en el cuarto campo.
#12. Mostrad las cuentas root o de ftp.
#13. ¿Qué ficheros de cabecera usan la constante MAXDOUBLE?
#14. ¿En qué ficheros aparece la palabra bash? (En mayúscula o minúscula)
#1.como no existe alu, pongo man
echo "1.Cuenta MAN"
grep ^man /etc/passwd
#2.
echo "2.Cuentas que empiezan por a"
grep ^a /etc/passwd
echo "3. Cuentas que empiezan por a o r"
grep ^[ar] /etc/passwd
echo "4. Cuentas que terminan en z"
cat /etc/passwd | awk -F : '{print $1}' | grep z$
echo "5. Cuentas que usen bash como intérprete de comandos"
#cat /etc/passwd | awk -F : '{print $7}' | grep /bin/bash
cat /etc/passwd | grep /bin/bash$ | awk -F : '{print $1}'
echo "6. Mostrad las cuenta que no usen bash como intérprete de comandos."
cat /etc/passwd | grep -v /bin/bash$ | awk -F : '{print $1}'
echo "7. Mostrad las cuentas que no empiecen por vocal."
cat /etc/passwd | awk -F : '{print $1}' | grep ^[^aeiou]
echo "8. Mostrad las cuentas que empiecen por mayúscula."
cat /etc/passwd | awk -F : '{print $1}' | grep ^[A-Z]
echo "9. Mostrad las líneas cuyo tercer campo tenga una sola cifra."
cat /etc/passwd | awk -F : '{print $3}' | grep ^[0-9]$
echo "10. Mostrad las líneas que tengan cifras de 3 a 5 dígitos."
cat /etc/passwd | grep -E [0-9]\{3,5\}
echo "11. Mostrad las líneas que tengan cifras de 3 dígitos en el cuarto campo."
#cat /etc/passwd | awk -F : '{print $4}' | grep -E ^[0-9]{3}$
cat /etc/passwd | grep -E *:*:*:[0-9]{3}:
echo "12. Mostrar las cuentas root o de ftp."
cat /etc/passwd | grep -E '^(root|ftp)'
echo "13. ¿Qué ficheros de cabecera usan la constante MAXDOUBLE?"
#los ficheros de cabecera están en la carpeta /usr/include
grep -r MAXDOUBLE /usr/include 2>/dev/null
#14. ¿En qué ficheros aparece la palabra bash? (En mayúscula o minúscula)
echo "14. ¿En qué ficheros aparece la palabra bash? (En mayúscula o minúscula)"
grep -Er '(FILE|file)' /usr/include 2>/dev/null
#TODOS LOS SCRIPTS EN http://oposinf.blogspot.com/search/label/shellscript
#1. Utilidad grep
#El fichero /etc/passwd es un fichero de texto que contiene información #acerca de las cuentas de usuario definidas en el sistema.
#Cada línea contiene siete datos, separados por el carácter ‘:’. Estos datos son: nombre de la cuenta, password encriptado (opcional), el código de usuario (user ID), el código del grupo (group ID), un comentario, el nombre del directorio ‘home’ y el nombre del intérprete de comandos que se ejecutará cuando el usuario se conecte.
#Vamos a utilizar este fichero en las cuestiones siguientes.
#1. Mostrad la línea correspondiente a la cuenta alu.
#2. Mostrad las cuentas que empiecen por a.
#3. Mostrad las cuentas que empiecen por a o r.
#4. Mostrad las cuentas que terminen por u.
#5. Mostrad las cuentas que usen bash como intérprete de comandos.
#6. Mostrad las cuentas que NO usen bash como intérprete de comandos.
#7. Mostrad las cuentas que no empiecen por vocal.
#8. Mostrad las cuentas que empiecen por mayúscula.
#9. Mostrad las líneas cuyo tercer campo tenga una sola cifra.
#10. Mostrad las líneas que tengan cifras de 3 a 5 dígitos.
#11. Mostrad las líneas que tengan cifras de 3 dígitos en el cuarto campo.
#12. Mostrad las cuentas root o de ftp.
#13. ¿Qué ficheros de cabecera usan la constante MAXDOUBLE?
#14. ¿En qué ficheros aparece la palabra bash? (En mayúscula o minúscula)
#1.como no existe alu, pongo man
echo "1.Cuenta MAN"
grep ^man /etc/passwd
#2.
echo "2.Cuentas que empiezan por a"
grep ^a /etc/passwd
echo "3. Cuentas que empiezan por a o r"
grep ^[ar] /etc/passwd
echo "4. Cuentas que terminan en z"
cat /etc/passwd | awk -F : '{print $1}' | grep z$
echo "5. Cuentas que usen bash como intérprete de comandos"
#cat /etc/passwd | awk -F : '{print $7}' | grep /bin/bash
cat /etc/passwd | grep /bin/bash$ | awk -F : '{print $1}'
echo "6. Mostrad las cuenta que no usen bash como intérprete de comandos."
cat /etc/passwd | grep -v /bin/bash$ | awk -F : '{print $1}'
echo "7. Mostrad las cuentas que no empiecen por vocal."
cat /etc/passwd | awk -F : '{print $1}' | grep ^[^aeiou]
echo "8. Mostrad las cuentas que empiecen por mayúscula."
cat /etc/passwd | awk -F : '{print $1}' | grep ^[A-Z]
echo "9. Mostrad las líneas cuyo tercer campo tenga una sola cifra."
cat /etc/passwd | awk -F : '{print $3}' | grep ^[0-9]$
echo "10. Mostrad las líneas que tengan cifras de 3 a 5 dígitos."
cat /etc/passwd | grep -E [0-9]\{3,5\}
echo "11. Mostrad las líneas que tengan cifras de 3 dígitos en el cuarto campo."
#cat /etc/passwd | awk -F : '{print $4}' | grep -E ^[0-9]{3}$
cat /etc/passwd | grep -E *:*:*:[0-9]{3}:
echo "12. Mostrar las cuentas root o de ftp."
cat /etc/passwd | grep -E '^(root|ftp)'
echo "13. ¿Qué ficheros de cabecera usan la constante MAXDOUBLE?"
#los ficheros de cabecera están en la carpeta /usr/include
grep -r MAXDOUBLE /usr/include 2>/dev/null
#14. ¿En qué ficheros aparece la palabra bash? (En mayúscula o minúscula)
echo "14. ¿En qué ficheros aparece la palabra bash? (En mayúscula o minúscula)"
grep -Er '(FILE|file)' /usr/include 2>/dev/null
Shell Script Ejemplos de sort
#!/bin/bash
#TODOS LOS SCRIPTS EN http://oposinf.blogspot.com/search/label/shellscript
#1. Ordenad el fichero /etc/passwd por orden alfabético.
#2. Ordenadlo en sentido inverso.
#3. Ordenadlo ignorando mayúsculas.
#4. Ordenadlo según el tercer campo.
#5. Ordenadlo según el tercer campo en orden numérico.
#6. Ordenadlo según el cuarto campo en orden numérico y eliminando repeticiones.
echo "Introduce una opción(1-6)"
read opcion
case $opcion in
1)
echo "Ordenad el fichero /etc/passwd por orden alfabético."
sort /etc/passwd
;;
2)
echo "Ordenadlo en sentido inverso."
sort -r /etc/passwd
;;
3)
echo "Ordenadlo ignorando mayúsculas."
sort -f /etc/passwd
;;
4)
echo "Ordenadlo según el tercer campo."
sort -t: -k 3 /etc/passwd
;;
5)
echo "Ordenadlo según el tercer campo en orden numérico."
sort -g -t: -k 3 /etc/passwd
;;
6)
echo "Ordenadlo según el cuarto campo en orden numérico y eliminando repeticiones."
sort -u -g -t: -k 4 /etc/passwd
;;
esac
#TODOS LOS SCRIPTS EN http://oposinf.blogspot.com/search/label/shellscript
#1. Ordenad el fichero /etc/passwd por orden alfabético.
#2. Ordenadlo en sentido inverso.
#3. Ordenadlo ignorando mayúsculas.
#4. Ordenadlo según el tercer campo.
#5. Ordenadlo según el tercer campo en orden numérico.
#6. Ordenadlo según el cuarto campo en orden numérico y eliminando repeticiones.
echo "Introduce una opción(1-6)"
read opcion
case $opcion in
1)
echo "Ordenad el fichero /etc/passwd por orden alfabético."
sort /etc/passwd
;;
2)
echo "Ordenadlo en sentido inverso."
sort -r /etc/passwd
;;
3)
echo "Ordenadlo ignorando mayúsculas."
sort -f /etc/passwd
;;
4)
echo "Ordenadlo según el tercer campo."
sort -t: -k 3 /etc/passwd
;;
5)
echo "Ordenadlo según el tercer campo en orden numérico."
sort -g -t: -k 3 /etc/passwd
;;
6)
echo "Ordenadlo según el cuarto campo en orden numérico y eliminando repeticiones."
sort -u -g -t: -k 4 /etc/passwd
;;
esac
sábado, 4 de febrero de 2012
Examen Oposiciones 2008 Shell Script
#!/bin/bash
#TODOS LOS SCRIPTS EN http://oposinf.blogspot.com/search/label/shellscript
#OPOSICIONES CUERPOS DOCENTES 2008
#EJERCICIO PRÁCTICO - PLANTEAMIENTO
#El ejercicio práctico se realizará bajo sistema operativo LINUX. Se podrá hacer uso del comando man.
#Elabora un script para llamado informe.sh que muestre información sobre el uso del sistema que realiza un determinado usuario.mEl shell-script tendra la siguiente sintaxis:
#informe.sh opcion [usuario]
#Las opciones pueden ser –u y –a. Si la opción que recibe es –u, deberá recibir como segundo argumento un nombre de usuario.
#Si el script ser ejecuta de la primera forma (-u usuario), deberá presentar un informe del usuario que se ha pasado por parámetro. En el informe deberán aparecer los siguientes datos:
#· Nombre del usuario.
#· Número de procesos que ha lanzado.
#· Nombre del primer proceso que lanzó.
#· Listado de todos los procesos que ha lanzado.
#· Número de directorios que tiene.
#· Número de ficheros regulares que tiene.
#· Uso del espacio en disco que ocupa.
#· Tanto por ciento de espacio en disco usado por el usuario.
function error {
echo "¡¡Horror!! Uso "$0" -[u|a] [usuario]"
exit
}
function numprocesos() {
echo "Contando procesos, $1..."
usuario=$1
numproc=`ps -U $usuario | wc -l`
echo "Número de procesos del usuario $usuario:$numproc"
}
function numprocesostotal() {
echo "Contando procesos totales"
usuario=$1
numproc=`ps | wc -l`
echo "Número de procesos total:$numproc"
}
function procesomasantiguo() {
echo "Buscando proceso más antiguo, $1..."
usuario=$1
ps -F -U $usuario | head -2 | tail -1 | awk '{print $11}'
}
function procesomasantiguototal() {
echo "Buscando proceso más antiguo total"
ps -F | head -2 | tail -1 | awk '{print $11}'
}
function listadoprocesos() {
echo "Listando procesos de usuario, $1..."
usuario=$1
ps -F -U $usuario
}
function listadoprocesostotal() {
echo "Listando procesos total"
ps -F
}
function numdirectorios() {
echo "Contando número de directorios, $1..."
usuario=$1
carpetausuario=`cat /etc/passwd | grep ^$usuario | cut -d: -f6`
#ls -ldr $carpetausuario/*
find $carpetausuario -type d -ls | wc -l
}
function numdirectoriostotal() {
echo "Contando número de directorios total"
carpetausuario="/home"
#ls -ldr $carpetausuario/*
find $carpetausuario -type d -ls | wc -l
}
function fichregulares() {
echo "Número de ficheros regulares, $1..."
usuario=$1
carpetausuario=`cat /etc/passwd | grep ^$usuario | cut -d: -f6`
find $carpetausuario -type f -ls | wc -l
}
function fichregularestotal() {
echo "Número de ficheros regulares total"
carpetausuario="/home"
find $carpetausuario -type f -ls | wc -l
}
function espacioendisco() {
echo "Espacio en disco, $1..."
usuario=$1
carpetausuario=`cat /etc/passwd | grep ^$usuario | cut -d: -f6`
du -sh $carpetausuario | awk {'print $1'}
}
function espacioendiscototal() {
echo "Espacio en disco total"
carpetausuario="/home"
du -sh $carpetausuario | awk {'print $1'}
}
function tantoporcientoendisco() {
echo "Tanto por ciento en disco, $1..."
usuario=$1
carpetausuario=`cat /etc/passwd | grep ^$usuario | cut -d: -f6`
du -sh $carpetausuario | awk {'print $1'}
ocupadocarpeta=`du -sh $carpetausuario | awk {'print $1'}`
#le quita la letra del final
ocupadocarpeta=`echo $ocupadocarpeta|sed 's/.$//'`
tamanodisco=`df -h | head -2 | tail -1 | awk {'print $2'}`
#le quita la letra del final
tamanodisco=`echo $tamanodisco | sed 's/.$//'`
echo "Ocupado carpeta:$ocupadocarpeta"
echo "Tamaño disco:$tamanodisco"
#expr no da decimales
#porcentajecarpeta=`expr $ocupadocarpeta / $tamanodisco`
#bc sí da decimales
porcentajecarpeta=$( echo "scale=2;$ocupadocarpeta/$tamanodisco" | bc)
porcentajecarpeta=$( echo "scale=2;$porcentajecarpeta*100" | bc)
echo "El porcentaje de la carpeta $carpetausuario sobre el tamaño total del disco es $porcentajecarpeta%"
}
function tantoporcientoendiscototal() {
echo "Tanto por ciento en disco total"
carpetausuario="/home"
du -sh $carpetausuario | awk {'print $1'}
ocupadocarpeta=`du -sh $carpetausuario | awk {'print $1'}`
#le quita la letra del final
ocupadocarpeta=`echo $ocupadocarpeta|sed 's/.$//'`
tamanodisco=`df -h | head -2 | tail -1 | awk {'print $2'}`
#le quita la letra del final
tamanodisco=`echo $tamanodisco | sed 's/.$//'`
echo "Ocupado carpeta:$ocupadocarpeta"
echo "Tamaño disco:$tamanodisco"
#expr no da decimales
#porcentajecarpeta=`expr $ocupadocarpeta / $tamanodisco`
#bc sí da decimales
porcentajecarpeta=$( echo "scale=2;$ocupadocarpeta/$tamanodisco" | bc)
porcentajecarpeta=$( echo "scale=2;$porcentajecarpeta*100" | bc)
echo "El porcentaje de la carpeta $carpetausuario sobre el tamaño total del disco es $porcentajecarpeta%"
}
#echo $#
if [[ $# -eq 0 ]]
then
error
elif [[ $# -gt 0 ]]
then
#Decir buenos días, nombre del usuario
#nombreusuario=`id -un`
#si el primer parámetro es -u
if [[ $1 == "-u" ]]
then
echo "Entrando en -u"
if [[ $2 == "" ]]
then
echo "No has introducido nombre de usuario. Saliendo del programa"
error
else #usuario correcto
nombreusuario=$2
echo $nombreusuario
if id $nombreusuario > /dev/null 2>&1
then
echo "Usuario existe. Comenzando proceso"
echo $nombreusuario
numprocesos $nombreusuario
procesomasantiguo $nombreusuario
listadoprocesos $nombreusuario
numdirectorios $nombreusuario
fichregulares $nombreusuario
espacioendisco $nombreusuario
tantoporcientoendisco $nombreusuario
else
echo "El usuario no existe."
error
fi
fi
elif [[ $1 == "-a" ]]
then
echo "Entrando en -a"
numprocesostotal
procesomasantiguototal
listadoprocesostotal
numdirectoriostotal
fichregularestotal
espacioendiscototal
tantoporcientoendiscototal
else
error
fi
else
error
fi
#TODOS LOS SCRIPTS EN http://oposinf.blogspot.com/search/label/shellscript
#OPOSICIONES CUERPOS DOCENTES 2008
#EJERCICIO PRÁCTICO - PLANTEAMIENTO
#El ejercicio práctico se realizará bajo sistema operativo LINUX. Se podrá hacer uso del comando man.
#Elabora un script para llamado informe.sh que muestre información sobre el uso del sistema que realiza un determinado usuario.mEl shell-script tendra la siguiente sintaxis:
#informe.sh opcion [usuario]
#Las opciones pueden ser –u y –a. Si la opción que recibe es –u, deberá recibir como segundo argumento un nombre de usuario.
#Si el script ser ejecuta de la primera forma (-u usuario), deberá presentar un informe del usuario que se ha pasado por parámetro. En el informe deberán aparecer los siguientes datos:
#· Nombre del usuario.
#· Número de procesos que ha lanzado.
#· Nombre del primer proceso que lanzó.
#· Listado de todos los procesos que ha lanzado.
#· Número de directorios que tiene.
#· Número de ficheros regulares que tiene.
#· Uso del espacio en disco que ocupa.
#· Tanto por ciento de espacio en disco usado por el usuario.
function error {
echo "¡¡Horror!! Uso "$0" -[u|a] [usuario]"
exit
}
function numprocesos() {
echo "Contando procesos, $1..."
usuario=$1
numproc=`ps -U $usuario | wc -l`
echo "Número de procesos del usuario $usuario:$numproc"
}
function numprocesostotal() {
echo "Contando procesos totales"
usuario=$1
numproc=`ps | wc -l`
echo "Número de procesos total:$numproc"
}
function procesomasantiguo() {
echo "Buscando proceso más antiguo, $1..."
usuario=$1
ps -F -U $usuario | head -2 | tail -1 | awk '{print $11}'
}
function procesomasantiguototal() {
echo "Buscando proceso más antiguo total"
ps -F | head -2 | tail -1 | awk '{print $11}'
}
function listadoprocesos() {
echo "Listando procesos de usuario, $1..."
usuario=$1
ps -F -U $usuario
}
function listadoprocesostotal() {
echo "Listando procesos total"
ps -F
}
function numdirectorios() {
echo "Contando número de directorios, $1..."
usuario=$1
carpetausuario=`cat /etc/passwd | grep ^$usuario | cut -d: -f6`
#ls -ldr $carpetausuario/*
find $carpetausuario -type d -ls | wc -l
}
function numdirectoriostotal() {
echo "Contando número de directorios total"
carpetausuario="/home"
#ls -ldr $carpetausuario/*
find $carpetausuario -type d -ls | wc -l
}
function fichregulares() {
echo "Número de ficheros regulares, $1..."
usuario=$1
carpetausuario=`cat /etc/passwd | grep ^$usuario | cut -d: -f6`
find $carpetausuario -type f -ls | wc -l
}
function fichregularestotal() {
echo "Número de ficheros regulares total"
carpetausuario="/home"
find $carpetausuario -type f -ls | wc -l
}
function espacioendisco() {
echo "Espacio en disco, $1..."
usuario=$1
carpetausuario=`cat /etc/passwd | grep ^$usuario | cut -d: -f6`
du -sh $carpetausuario | awk {'print $1'}
}
function espacioendiscototal() {
echo "Espacio en disco total"
carpetausuario="/home"
du -sh $carpetausuario | awk {'print $1'}
}
function tantoporcientoendisco() {
echo "Tanto por ciento en disco, $1..."
usuario=$1
carpetausuario=`cat /etc/passwd | grep ^$usuario | cut -d: -f6`
du -sh $carpetausuario | awk {'print $1'}
ocupadocarpeta=`du -sh $carpetausuario | awk {'print $1'}`
#le quita la letra del final
ocupadocarpeta=`echo $ocupadocarpeta|sed 's/.$//'`
tamanodisco=`df -h | head -2 | tail -1 | awk {'print $2'}`
#le quita la letra del final
tamanodisco=`echo $tamanodisco | sed 's/.$//'`
echo "Ocupado carpeta:$ocupadocarpeta"
echo "Tamaño disco:$tamanodisco"
#expr no da decimales
#porcentajecarpeta=`expr $ocupadocarpeta / $tamanodisco`
#bc sí da decimales
porcentajecarpeta=$( echo "scale=2;$ocupadocarpeta/$tamanodisco" | bc)
porcentajecarpeta=$( echo "scale=2;$porcentajecarpeta*100" | bc)
echo "El porcentaje de la carpeta $carpetausuario sobre el tamaño total del disco es $porcentajecarpeta%"
}
function tantoporcientoendiscototal() {
echo "Tanto por ciento en disco total"
carpetausuario="/home"
du -sh $carpetausuario | awk {'print $1'}
ocupadocarpeta=`du -sh $carpetausuario | awk {'print $1'}`
#le quita la letra del final
ocupadocarpeta=`echo $ocupadocarpeta|sed 's/.$//'`
tamanodisco=`df -h | head -2 | tail -1 | awk {'print $2'}`
#le quita la letra del final
tamanodisco=`echo $tamanodisco | sed 's/.$//'`
echo "Ocupado carpeta:$ocupadocarpeta"
echo "Tamaño disco:$tamanodisco"
#expr no da decimales
#porcentajecarpeta=`expr $ocupadocarpeta / $tamanodisco`
#bc sí da decimales
porcentajecarpeta=$( echo "scale=2;$ocupadocarpeta/$tamanodisco" | bc)
porcentajecarpeta=$( echo "scale=2;$porcentajecarpeta*100" | bc)
echo "El porcentaje de la carpeta $carpetausuario sobre el tamaño total del disco es $porcentajecarpeta%"
}
#echo $#
if [[ $# -eq 0 ]]
then
error
elif [[ $# -gt 0 ]]
then
#Decir buenos días, nombre del usuario
#nombreusuario=`id -un`
#si el primer parámetro es -u
if [[ $1 == "-u" ]]
then
echo "Entrando en -u"
if [[ $2 == "" ]]
then
echo "No has introducido nombre de usuario. Saliendo del programa"
error
else #usuario correcto
nombreusuario=$2
echo $nombreusuario
if id $nombreusuario > /dev/null 2>&1
then
echo "Usuario existe. Comenzando proceso"
echo $nombreusuario
numprocesos $nombreusuario
procesomasantiguo $nombreusuario
listadoprocesos $nombreusuario
numdirectorios $nombreusuario
fichregulares $nombreusuario
espacioendisco $nombreusuario
tantoporcientoendisco $nombreusuario
else
echo "El usuario no existe."
error
fi
fi
elif [[ $1 == "-a" ]]
then
echo "Entrando en -a"
numprocesostotal
procesomasantiguototal
listadoprocesostotal
numdirectoriostotal
fichregularestotal
espacioendiscototal
tantoporcientoendiscototal
else
error
fi
else
error
fi
sábado, 28 de enero de 2012
awk es mejor que cut
tamfichmenor=`ls -S -l -r -R| head -3 | tail -1 | awk '{print $5}'
Con cut al final, detecta los espacios, así que no me saca el tamaño del fichero.
Con cut al final, detecta los espacios, así que no me saca el tamaño del fichero.
Shell Script Enero 5. Leer un número indeterminado de argumentos, ejecutar, crear copia de seguridad, parámetros con letras, fichero de ayuda
#!/bin/bash
#TODOS LOS SCRIPTS EN http://oposinf.blogspot.com/search/label/shellscript
#5. Implementar un shell-script bajo Linux que realice lo siguiente: El script tendrá el siguiente formato ej5.sh [opciones] [argumentos] Al ejecutar el shell-script, eśte deberá mostrar un saludo (Buenos días) con el nombre del usuario que lo ejecuta.
#Las opciones que puede recibir el shell son las siguientes:
#Sin opciones ni argumentos, deberá mostrar el contenido del propio shell-script.
#-m Comprobará que los argumentos (tras -m) son ficheros, en cuyo caso muestra su contenido por pantalla.
#-x Deberá comprobar que los argumentos (tras -x) son programas ejecutables, en cuyo caso los ejecutará.
#-b Con esta opción se borrarán todos los ficheros y directorios que se le pasen como parámetro. Antes de ser eliminados, creará una copia de seguridad de los mismos en el directorios $HOME/backup.
#-help Mostrará el contenido de un fichero de texto, de nombre ayuda.hlp, en el que se explicará el funcionamiento del shell-script.
#Se valorará es uso de funciones y llamadas a shell-scripts externos, si procede.
function error {
echo "¡¡Horror!! Uso "$0" -[|m|x|b|help] [argumentos] "
exit
}
echo $#
if [[ $# -eq 0 ]]
then
echo "Contenido del archivo."
cat enero05
elif [[ $# -gt 0 ]]
then
#Decir buenos días, nombre del usuario
nombreusuario=`id -un`
echo "Buenos días, $nombreusuario"
#si el primer parámetro es -m
if [[ $1 == "-m" ]]
then
echo "Entrando en -m"
#la siguiente línea muestra todos los parámetros en una línea, pero no me gusta mucho, voy a probar otra opción
#echo $*
#esta manera es muy limpia
#primero se quita de en medio el primer parámetro, que es la -m
shift
#y luego va sacando cada parámetro hasta que la lista de parámetros esta vacía
#ni hay que contar parámetros ni nada
while [[ $1 != "" ]]
do
archivo=$1
if [ -f $archivo ]
then
echo "LISTANDO ARCHIVO $archivo..."
cat $archivo
else
echo "El archivo $archivo no existe"
fi
#pasa al siguiente parámetro, esto es, borra el primero y pasa todos los demas hacia adelante, así que el 2º pasa a ser el 1º
shift
done
elif [[ $1 == "-x" ]]
then
echo "Entrando en -x"
shift
while [[ $1 != "" ]]
do
archivo=$1
if [ -f $archivo ]
then
echo "EJECUTANDO $archivo..."
$archivo
else
echo "El archivo $archivo no es ejecutable."
fi
shift
done
elif [[ $1 == "-b" ]]
then
echo "Entrando en -b"
shift
#comprobar si existe carpeta de backup y, si no, crearla
nombreusuario=`id -un`
echo $nombreusuario
carpeta=`cat /etc/passwd | grep $nombreusuario | cut -d: -f6`
echo $carpeta
if [ -d $carpeta/backup1 ]
then
echo "La carpeta backup existe"
else
echo "Creando carpeta backup en carpeta de usuario"
mkdir $carpeta/backup1
fi
while [[ $1 != "" ]]
do
archivo=$1
if [ -f $archivo ]
then
echo "BORRANDO $archivo..."
cp $archivo $carpeta/backup1
#esto lo comento para evitar que borre archivos
#rm $archivo
else
echo "El archivo $archivo no existe."
fi
shift
done
elif [[ $1 == "-help" ]]
then
cat ayuda.hlp
else
error
fi
else
error
fi
#TODOS LOS SCRIPTS EN http://oposinf.blogspot.com/search/label/shellscript
#5. Implementar un shell-script bajo Linux que realice lo siguiente: El script tendrá el siguiente formato ej5.sh [opciones] [argumentos] Al ejecutar el shell-script, eśte deberá mostrar un saludo (Buenos días) con el nombre del usuario que lo ejecuta.
#Las opciones que puede recibir el shell son las siguientes:
#Sin opciones ni argumentos, deberá mostrar el contenido del propio shell-script.
#-m Comprobará que los argumentos (tras -m) son ficheros, en cuyo caso muestra su contenido por pantalla.
#-x Deberá comprobar que los argumentos (tras -x) son programas ejecutables, en cuyo caso los ejecutará.
#-b Con esta opción se borrarán todos los ficheros y directorios que se le pasen como parámetro. Antes de ser eliminados, creará una copia de seguridad de los mismos en el directorios $HOME/backup.
#-help Mostrará el contenido de un fichero de texto, de nombre ayuda.hlp, en el que se explicará el funcionamiento del shell-script.
#Se valorará es uso de funciones y llamadas a shell-scripts externos, si procede.
function error {
echo "¡¡Horror!! Uso "$0" -[|m|x|b|help] [argumentos] "
exit
}
echo $#
if [[ $# -eq 0 ]]
then
echo "Contenido del archivo."
cat enero05
elif [[ $# -gt 0 ]]
then
#Decir buenos días, nombre del usuario
nombreusuario=`id -un`
echo "Buenos días, $nombreusuario"
#si el primer parámetro es -m
if [[ $1 == "-m" ]]
then
echo "Entrando en -m"
#la siguiente línea muestra todos los parámetros en una línea, pero no me gusta mucho, voy a probar otra opción
#echo $*
#esta manera es muy limpia
#primero se quita de en medio el primer parámetro, que es la -m
shift
#y luego va sacando cada parámetro hasta que la lista de parámetros esta vacía
#ni hay que contar parámetros ni nada
while [[ $1 != "" ]]
do
archivo=$1
if [ -f $archivo ]
then
echo "LISTANDO ARCHIVO $archivo..."
cat $archivo
else
echo "El archivo $archivo no existe"
fi
#pasa al siguiente parámetro, esto es, borra el primero y pasa todos los demas hacia adelante, así que el 2º pasa a ser el 1º
shift
done
elif [[ $1 == "-x" ]]
then
echo "Entrando en -x"
shift
while [[ $1 != "" ]]
do
archivo=$1
if [ -f $archivo ]
then
echo "EJECUTANDO $archivo..."
$archivo
else
echo "El archivo $archivo no es ejecutable."
fi
shift
done
elif [[ $1 == "-b" ]]
then
echo "Entrando en -b"
shift
#comprobar si existe carpeta de backup y, si no, crearla
nombreusuario=`id -un`
echo $nombreusuario
carpeta=`cat /etc/passwd | grep $nombreusuario | cut -d: -f6`
echo $carpeta
if [ -d $carpeta/backup1 ]
then
echo "La carpeta backup existe"
else
echo "Creando carpeta backup en carpeta de usuario"
mkdir $carpeta/backup1
fi
while [[ $1 != "" ]]
do
archivo=$1
if [ -f $archivo ]
then
echo "BORRANDO $archivo..."
cp $archivo $carpeta/backup1
#esto lo comento para evitar que borre archivos
#rm $archivo
else
echo "El archivo $archivo no existe."
fi
shift
done
elif [[ $1 == "-help" ]]
then
cat ayuda.hlp
else
error
fi
else
error
fi
Shell Script Enero 4. Escribir un programa copiabin.sh que mueva todos los programas del directorio actual (archivos ejecutables) hacia el subdirectorio bin del directorio propio del usuario, muestre los nombres de los que mueve e indique cuántos ha movido o que no ha movido ninguno. Si el directorio bin no existe, deberá ser creado.
#!/bin/bash
#4. Escribir un programa copiabin.sh que mueva todos los programas del directorio actual (archivos ejecutables) hacia el subdirectorio bin del directorio propio del usuario, muestre los nombres de los que mueve e indique cuántos ha movido o que no ha movido ninguno. Si el directorio bin no existe, deberá ser creado.
if [[ $# -gt 1 ]]
then
echo "¡¡Horror!! Uso "$0" nombrearchivo "
exit
fi
nombreusuario=`id -un`
echo $nombreusuario
carpeta=`cat /etc/passwd | grep $nombreusuario | cut -d: -f6`
echo $carpeta
#carpeta= `echo $carpeta/bin 2>/dev/null`
#carpeta= `echo "$carpeta/bin"`
#carpetabin= `echo "$carpeta"/bin`
if [ -d $carpeta/bin ]
then
echo "La carpeta bin existe"
else
echo "Creando carpeta bin en carpeta de usuario"
mkdir $carpeta/bin
fi
ls > ficheros.txt
while read linea
do
echo $linea
if [ -f "$linea" ]
then
if [ -x "$linea" ]
then
cp $linea $carpeta/bin
fi
fi
done < ficheros.txt
#4. Escribir un programa copiabin.sh que mueva todos los programas del directorio actual (archivos ejecutables) hacia el subdirectorio bin del directorio propio del usuario, muestre los nombres de los que mueve e indique cuántos ha movido o que no ha movido ninguno. Si el directorio bin no existe, deberá ser creado.
if [[ $# -gt 1 ]]
then
echo "¡¡Horror!! Uso "$0" nombrearchivo "
exit
fi
nombreusuario=`id -un`
echo $nombreusuario
carpeta=`cat /etc/passwd | grep $nombreusuario | cut -d: -f6`
echo $carpeta
#carpeta= `echo $carpeta/bin 2>/dev/null`
#carpeta= `echo "$carpeta/bin"`
#carpetabin= `echo "$carpeta"/bin`
if [ -d $carpeta/bin ]
then
echo "La carpeta bin existe"
else
echo "Creando carpeta bin en carpeta de usuario"
mkdir $carpeta/bin
fi
ls > ficheros.txt
while read linea
do
echo $linea
if [ -f "$linea" ]
then
if [ -x "$linea" ]
then
cp $linea $carpeta/bin
fi
fi
done < ficheros.txt
Shell Script Enero 3. Realizar un script que permita copiar un archivo pasado como parámetro en un directorio cualquiera también pasado como parámetro, antes de copiar comprobar si el archivo se puede leer.
#!/bin/bash
#3. Realizar un script que permita copiar un archivo pasado como parámetro en un directorio cualquiera también pasado como parámetro, antes de copiar comprobar si el archivo se puede leer.
if [[ $# -gt 3 ]]
then
echo "¡¡Horror!! Uso "$0" nombrearchivo "
exit
fi
archivo=$1
carpeta=$2
if [ -r $nombre ]
then
cp $archivo $carpeta
fi
#3. Realizar un script que permita copiar un archivo pasado como parámetro en un directorio cualquiera también pasado como parámetro, antes de copiar comprobar si el archivo se puede leer.
if [[ $# -gt 3 ]]
then
echo "¡¡Horror!! Uso "$0" nombrearchivo "
exit
fi
archivo=$1
carpeta=$2
if [ -r $nombre ]
then
cp $archivo $carpeta
fi
Shell Script Enero 2. Recibir un nombre de archivo como parámetro e indicar, imprimiendo todas las leyendas que correspondan, si el archivo es legible, modificable y ejecutable por el usuario.
#!/bin/bash
#2. Recibir un nombre de archivo como parámetro e indicar, imprimiendo todas las leyendas que correspondan, si el archivo es legible, modificable y ejecutable por el usuario.
if [[ $# -gt 2 ]]
then
echo "¡¡Horror!! Uso "$0" nombrearchivo "
exit
fi
archivo=$1
if [ -f $nombre ]
then
if [ -r $nombre ]
then
echo "El archivo $archivo se puede leer"
else
echo "El archivo $archivo no se puede leer"
fi
if [ -w $nombre ]
then
echo "El archivo $archivo se puede escribir"
else
echo "El archivo $archivo no se puede escribir"
fi
if [ -x $nombre ]
then
echo "El archivo $archivo se puede ejecutar"
else
echo "El archivo $archivo no se puede ejecutar"
fi
fi
#2. Recibir un nombre de archivo como parámetro e indicar, imprimiendo todas las leyendas que correspondan, si el archivo es legible, modificable y ejecutable por el usuario.
if [[ $# -gt 2 ]]
then
echo "¡¡Horror!! Uso "$0" nombrearchivo "
exit
fi
archivo=$1
if [ -f $nombre ]
then
if [ -r $nombre ]
then
echo "El archivo $archivo se puede leer"
else
echo "El archivo $archivo no se puede leer"
fi
if [ -w $nombre ]
then
echo "El archivo $archivo se puede escribir"
else
echo "El archivo $archivo no se puede escribir"
fi
if [ -x $nombre ]
then
echo "El archivo $archivo se puede ejecutar"
else
echo "El archivo $archivo no se puede ejecutar"
fi
fi
Shell Script Enero 1. Hacer un script que visualice un menú de tres opciones, la primera borra un fichero leído por teclado, la segunda visualiza un fichero también leído por teclado y la tercera sale del programa
#!/bin/bash
#1. Hacer un script que visualice un menú de tres opciones, la primera borra un fichero leído por teclado, la segunda visualiza un fichero también leído por teclado y la tercera sale del programa
function menu {
echo "1. Borrar fichero."
echo "2. Visualizar fichero."
echo "3. Salir."
echo "Introduce una opción:"
}
until [[ $opcion -eq 3 ]]
do
menu
read opcion
#echo $opcion
if [[ $opcion -eq 1 ]] ;then
echo "Opción 1 seleccionada"
read -p "Introduce el nombre del archivo" nombre
#echo $nombre
if [ -f $nombre ]
then
rm $nombre
fi
elif [[ $opcion -eq 2 ]] ; then
echo "Opción 2 seleccionada"
read -p "Introduce el nombre del archivo" nombre
$echo $nombre
if [ -f $nombre ]
then
cat $nombre
fi
else
echo "Saliendo del programa..."
fi
done
#1. Hacer un script que visualice un menú de tres opciones, la primera borra un fichero leído por teclado, la segunda visualiza un fichero también leído por teclado y la tercera sale del programa
function menu {
echo "1. Borrar fichero."
echo "2. Visualizar fichero."
echo "3. Salir."
echo "Introduce una opción:"
}
until [[ $opcion -eq 3 ]]
do
menu
read opcion
#echo $opcion
if [[ $opcion -eq 1 ]] ;then
echo "Opción 1 seleccionada"
read -p "Introduce el nombre del archivo" nombre
#echo $nombre
if [ -f $nombre ]
then
rm $nombre
fi
elif [[ $opcion -eq 2 ]] ; then
echo "Opción 2 seleccionada"
read -p "Introduce el nombre del archivo" nombre
$echo $nombre
if [ -f $nombre ]
then
cat $nombre
fi
else
echo "Saliendo del programa..."
fi
done
viernes, 13 de enero de 2012
Shell Script Examen Viernes 13
Shell Script Examen Viernes 13
Para mis queridos alumnos y alumnas, para que vean que yo también hago exámenes:
#!/bin/bash
#examen viernes 13
#Elabora un Shell script que nos permitirá gestionar las copias de seguridad
#de un determinado directorio, que se recibirá por parámetro.
#Admitirá como argumento dos parámetros, el primero deberá ser Backup o
#Restore, y el segundo el nombre de un directorio.
#Si el primer parámetro es Backup, el Shell realizará una copia de seguridad
#(backup), para todos los usuarios del sistema, en el directorio pasado como
#segundo argumento.
#Si el primer parámetro es Restore, el Shell deberá restaurar todas las
#copias de seguridad guardadas en el directorio pasado como segundo
#parámetro. Se supone que restaura en el home.
#PD.- Recordad que es imprescindible comentad el código. (hacerlo a
#conciecia y la vinculación curricular aunque no lo pida).
#Comprueba el número de parámetros y si es distinto de 2, avisa del error y sale del programa
if (( $# != 2 ))
then
echo "Número de parámetros no correcto"
echo "Uso $0 Backup|Restore carpeta"
exit
fi
#echo "Número de parámetros:"$#
#inicialización de variables
#operación a realizar, Backup o Restore
operacion=$1
#carpeta destino u origen
directorio=$2
#echo $operacion
#Se comprueba si la operación es Backup o Restore y si no lo es, se sale del programa
if [ $operacion = "Backup" ]
then
echo "Operación Backup en curso..."
else
if [ $operacion = "Restore" ]
then
echo "Operación Restore en curso..."
else
echo "La operación debe ser Backup o Restore y tú has escrito " $operacion
echo "Saliendo del programa..."
exit
fi
fi
#ahora se comprueba si existe el directorio destino u origen
#y si no se crea
if [ -d $directorio ]
then
echo "El directorio existe. Se sigue el proceso..."
else
echo "El directorio no existe. Se crea."
mkdir $directorio
if [ $? -ne 0 ]
then
echo "Error al crear el directorio. Seguramente, no tienes permiso para copiar en él"
echo "Saliendo del programa"
exit
fi
fi
#echo "Operación:" $operacion
#si la operación es Backup
if [ $operacion = "Backup" ]
then
#se realiza la copia de seguridad
echo "Realizando copia de seguridad..."
cd $directorio
carpetahome="/home/ubuntu" #esta es la carpeta de la que se hace la copia de seguridad
tar -cf seguridad.tar $carpetahome
else
#se restaura la copia de seguridad
echo "Realizando la restauración..."
#cambia a la carpeta donde restaurar, que sería home
cd /home/jluserovilchez/examen13
#descomprime
tar -xf $directorio/*.tar
fi
Para mis queridos alumnos y alumnas, para que vean que yo también hago exámenes:
#!/bin/bash
#examen viernes 13
#Elabora un Shell script que nos permitirá gestionar las copias de seguridad
#de un determinado directorio, que se recibirá por parámetro.
#Admitirá como argumento dos parámetros, el primero deberá ser Backup o
#Restore, y el segundo el nombre de un directorio.
#Si el primer parámetro es Backup, el Shell realizará una copia de seguridad
#(backup), para todos los usuarios del sistema, en el directorio pasado como
#segundo argumento.
#Si el primer parámetro es Restore, el Shell deberá restaurar todas las
#copias de seguridad guardadas en el directorio pasado como segundo
#parámetro. Se supone que restaura en el home.
#PD.- Recordad que es imprescindible comentad el código. (hacerlo a
#conciecia y la vinculación curricular aunque no lo pida).
#Comprueba el número de parámetros y si es distinto de 2, avisa del error y sale del programa
if (( $# != 2 ))
then
echo "Número de parámetros no correcto"
echo "Uso $0 Backup|Restore carpeta"
exit
fi
#echo "Número de parámetros:"$#
#inicialización de variables
#operación a realizar, Backup o Restore
operacion=$1
#carpeta destino u origen
directorio=$2
#echo $operacion
#Se comprueba si la operación es Backup o Restore y si no lo es, se sale del programa
if [ $operacion = "Backup" ]
then
echo "Operación Backup en curso..."
else
if [ $operacion = "Restore" ]
then
echo "Operación Restore en curso..."
else
echo "La operación debe ser Backup o Restore y tú has escrito " $operacion
echo "Saliendo del programa..."
exit
fi
fi
#ahora se comprueba si existe el directorio destino u origen
#y si no se crea
if [ -d $directorio ]
then
echo "El directorio existe. Se sigue el proceso..."
else
echo "El directorio no existe. Se crea."
mkdir $directorio
if [ $? -ne 0 ]
then
echo "Error al crear el directorio. Seguramente, no tienes permiso para copiar en él"
echo "Saliendo del programa"
exit
fi
fi
#echo "Operación:" $operacion
#si la operación es Backup
if [ $operacion = "Backup" ]
then
#se realiza la copia de seguridad
echo "Realizando copia de seguridad..."
cd $directorio
carpetahome="/home/ubuntu" #esta es la carpeta de la que se hace la copia de seguridad
tar -cf seguridad.tar $carpetahome
else
#se restaura la copia de seguridad
echo "Realizando la restauración..."
#cambia a la carpeta donde restaurar, que sería home
cd /home/jluserovilchez/examen13
#descomprime
tar -xf $directorio/*.tar
fi
jueves, 12 de enero de 2012
martes, 10 de enero de 2012
Shell Script Sistemas de archivos ocupados al 90%
#!/bin/bash
#El comando df muestra el espacio disponible en los sistemas de archivos #montados. Su salida tiene esta forma:
# Filesystem 1024-blocks Used Available Capacity Mounted on
# /dev/hda2 1484386 433463 974213 31% /
# /dev/hda1 1228736 524576 704160 31% /dosc
# /dev/hda3 68263 63484 4779 93% /tmp
#Los campos están separados por espacios. El campo Capacity indica el porcentaje ocupado. Escribir un script espacio que invoque el comando df y muestre en su salida el nombre del sistema de archivo y su capacidad ocupada para los sistemas de archivos con 90% o más espacio ocupado.
if [ $# -gt 1 ] #comprobar número de parámetros introducidos
then #gracias a Alejandro por sus buenas formas
echo "¡¡Horror!! Uso "$0" "
exit
fi
df | tr -s " " | cut -d" " -f1,5 | grep 9[0-9]%
#El comando df muestra el espacio disponible en los sistemas de archivos #montados. Su salida tiene esta forma:
# Filesystem 1024-blocks Used Available Capacity Mounted on
# /dev/hda2 1484386 433463 974213 31% /
# /dev/hda1 1228736 524576 704160 31% /dosc
# /dev/hda3 68263 63484 4779 93% /tmp
#Los campos están separados por espacios. El campo Capacity indica el porcentaje ocupado. Escribir un script espacio que invoque el comando df y muestre en su salida el nombre del sistema de archivo y su capacidad ocupada para los sistemas de archivos con 90% o más espacio ocupado.
if [ $# -gt 1 ] #comprobar número de parámetros introducidos
then #gracias a Alejandro por sus buenas formas
echo "¡¡Horror!! Uso "$0" "
exit
fi
df | tr -s " " | cut -d" " -f1,5 | grep 9[0-9]%
Suscribirse a:
Entradas (Atom)