miércoles, 15 de junio de 2016

Scripts VII.

Ejercicios propuestos en la prueba 10-6-2016

  1. Realiza un script que utilice dos números enteros como argumentos y deben devolverse todos los números enteros del intervalo formado por los dos números. El programa debe comprobar que se pasan sólo 2 números y que el segundo es mayor que el primero, en caso contrario mostrar mensaje de error.
  2. if test $# -ne 2 –a $1 –lt $2

    then

    echo “ Perdona pero introduce solo dos números y el segundo mayor que el primero”

    else

    for (( i=$1; i<=$2;i++))

    do

    echo “$i”

    done

    fi

  3. Guión que devuelva los enlaces duros que hay en el directorio actual.
    1. find . –type f –links +1 ¡cuidado! los enlaces duros sobre enlaces blandos no salen
    2. ls -li | tail –n +2|sort -k1 -n -r > fichero

      cont=`ls –li|tail –n +2|wc –l`

      while [ $cont -gt 0 ]

      do

      var1=`head -"$cont" fichero | tail -1 |tr -s " " | cut -d" " -f1`

      conti=`expr $cont - 1`

      var2=`head -"$conti" fichero | tail -1 | tr -s " " | cut -d" " -f1`

      if [ $var1 -eq $var2 ]

      then

      head -"$cont" fichero | tail -1 | tr -s " " | cut -d" " -f10 > enlaces

      fi

      cont=`expr $cont - 1`

      done

      cat enlaces

    3. Arrai=(`ls –li|sort –k1 –n –r`|tr –s “ “ “ “|cut –d “ “ –f1`)

      For((i=0;i<${#arrai[*]}; i++))

      Do

      Cont=0

      For((j=0;j<${#arrai[*]}; j++))

      Do

      if [ ${arrai[$i]} –eq ${arrai[$j]}

      then

      Cont=$(($cont+1))

      fi

      Done

      if [ $cont -gt 1 ]

      then

      echo “enlaces duros encontrados”

      find . –inum $i

      fi

      done

  4. Realiza un script que compruebe cada 15 minutos, la carga media del procesador en esos 15 últimos minutos y que envíe un mensaje al terminal /pts/5 en el caso de que la carga supere más del 20%. (el 20% es simbólico, nos referimos a una carga cualquiera).

    creamos el script: carga.sh

    v=`cat /proc/loadavg|cut -d" " –f3`

    entero=$(echo "$v/1"|bc) otra forma de hacerlo entero=`echo "$v*100"|bc|cut -d"." -f1`

    if [ $entero -gt 20 ] siguiendo la anterior forma if [ $entero -gt 2000 ]

    then

    echo aviso $entero >>/dev/pts/5

    fi

    En el crontab -e

    */15 * * * * ./root/carga.sh

  5. EL archivo /etc/login.defs contiene muchos comentarios y líneas en blanco, haz un guion para ver las líneas que no son comentarios o líneas en blanco (los ajustes de configuración real).

    grep -Ev /etc/login.defs '^$|^#'

  6. Realiza un script que me devuelva el nombre de los procesos que realmente están ejecutándose.

    c=(`ps -eo stat -o pid|grep "R"|tr -s " " |cut -d" " -f2`)

    for v in ${c[*]}

    do

    ps aux|grep $v|tr -s " "|cut -d" " -f11

    done

  7. Realiza un shell-script que pida por teclado el nombre de un usuario y nos diga si está o no conectado al sistema. Si está conectado que me indique el número de procesos que tiene en el sistema.

    echo –n nombre de usuario

    read usuario

    var=`who|grep –w $usuario`

    if [ $? –eq 0 ]

    then

    n=`Ps aux |grep "^usuario" |wc –l` también ps –u $usuario|wc -l

    echo el usuario $usuario está conectado y tiene $n procesos

    else

    echo el usuario $usuario no está conectado

    fi

No hay comentarios:

Publicar un comentario