Prácticas Ejercicios propuestos

¿Que salida ocasionaría cada una de las siguientes órdenes si la ejecutamos consecutivamente?

$ set a b c d e f g h i j k l m n
$ echo $10
$ echo $15
$ echo $*
$ echo $#
$ echo $?
$ echo ${11}
            

Explica que realizaría cada una de las siguientes órdenes ejecutadas en secuencia

$ A=\$B
$ B=ls
$ echo $A
$ eval $A
            

Mostrar el último parámetro posicional

Pista: $#

Asignar el úlimo parámetro posicional a la variable ULT

Realizar un programa que escriba los 20 primeros números enteros.

Realizar un programa que numere las líneas de un fichero

Realizar un programa que tomando como base el contenido de un directorio escriba cada elemento contenido indicando si es fichero o directorio.

Realizar un programa que muestre todos los ficheros ejecutables del directorio activo.

Modificar el programa anterior para que indique el tipo de cada elemento contenido en el directorio activo: fichero, directorio, ejecutable,...

Ejercicios resueltos sobre ficheros y directorios

Guion de shell que genere un fichero llamado listaetc que contenga los ficheros con permiso de lectura que haya en el directorio /etc:

for F in /etc/*
do
if [ -f $F -a -r $F ]
then
echo $F >> listaetc
fi 
done
            

Hacer un guion de shell que, partiendo del fichero generado en el ejercicio anterior, muestre todos los ficheros del directorio /etc que contengan la palagra "procmail":

while read LINEA
do
if grep procmail $L >/dev/null 2>&1
then
echo $L
fi
done <listaetc
            

Hacer un guion de shell que cuente cuantos ficheros y cuantos directorios hay en el directorio pasado como argumento:

DI=0
FI=0
for I in $1/*
do
if [ -f $I ]
then
let FI=FI+1
fi
if [ -d $I ]
then 
let DI=DI+1
fi
done
            

Hacer un guion de shell que compruebe si existe el directorio pasado como argumento dentro del directorio activo. En caso de que exista, que diga si no está vacío.

if [ -d $1 ]
then
echo "$1 existe"
N=$(ls | wc -l)
if [ $N -gt 0 ]
then
echo "S1 no está vacio, contiene $N ficheros no ocultos"
fi
fi
            

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
            

Hacer un script que muestre el fichero del directorio activo con más líneas:

NLIN=0
for I in * 
do
if [ -f $I ]
then
N=$(wc -l $I)
if [ $N -gt $NLIN ]
then
NOMBRE=$I
NLIN=$N
fi
fi
done
echo "$NOMBRE tiene $NLIN lineas"
            

¿Qué haría el siguiente script?

ORIGINAL="mejor"
            
NUEVA="óptimo"
for f in $(find .  -type f)
            
do
            
       sed s/$ORIGINAL/$NUEVA/g $f >$f.tr
            
       mv $f.tr $f
            
done
            

¿Qué haría el siguiente script?

ORIGINAL="mejor"
            
NUEVA="óptimo"
for f in $(find .  -type d)
            
do
            
       chmod a+rx $f
            
done
            

¿Qué haría el siguiente script?

find .  -type d -exec chmod a+rx {} \;
            

¿Qué haría el siguiente script?

#!/bin/bash
            
fecha=`date +%Y%m%d`
            
mkdir /var/copia/$fecha
            
tar cfz /var/copia/$fecha/etc-$fecha.mod.tar.gz $(find /etc -newer /var/copia/ultimo  ! -type d)
            
touch /var/copia/ultimo