miércoles, 21 de junio de 2017

Resumiendo

Con nuestro conocimiento del comando for, aplicaremos ahora las mejoras finales a nuestro script sys_info_page. Actualmente, la función report_home_space aparece así:

report_home_space () {
    if [[ $(id -u) -eq 0 ]]; then
        cat <<- _EOF_
            <H2>Home Space Utilization (All Users)</H2>
            <PRE>$(du -sh /home/*)</PRE>
            _EOF_
    else
        cat <<- _EOF_
            <H2>Home Space Utilization ($USER)</H2>
            <PRE>$(du -sh $HOME)</PRE>
            _EOF_
    fi
    return
}

A continuación, la reescribiremos para proporcionar más detalle para cada directorio home de usuario, e incluiremos el número total de archivos y subdirectorios en cada uno de ellos:

report_home_space () {

  local format="%8s%10s%10s\n"
  local i dir_list total_files total_dirs total_size user_name

  if [[ $(id -u) -eq 0 ]]; then
      dir_list=/home/*
      user_name="All Users"
  else
      dir_list=$HOME
      user_name=$USER
  fi

  echo "<H2>Home Space Utilization ($user_name)</H2>"

  for i in $dir_list; do

      total_files=$(find $i -type f | wc -l)
      total_dirs=$(find $i -type d | wc -l)
      total_size=$(du -sh $i | cut -f 1)

      echo "<H3>$i</H3>"
      echo "<PRE>"
      printf "$format" "Dirs" "Files" "Size"
      printf "$format" "----" "-----" "----"
      printf "$format" $total_dirs $total_files $total_size
      echo "</PRE>"
  done
  return
}

Esta reescritura aplica mucho de lo que hemos aprendido hasta ahora. Aún probamos el superusuario, pero en lugar de realizar la lista completa de acciones como parte del if, configuramos algunas variables usadas posteriormente en un bucle for. Hemos añadido varias variables locales a la función y hecho uso de printf para formatear parte de la salida.

No hay comentarios:

Publicar un comentario