< Previous | Contents | Next >
Summing Up
With our knowledge of the for command, we will now apply the final improvements to our sys_info_page script. Currently, the report_home_space function looks like this:
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
}
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
}
Next, we will rewrite it to provide more detail for each user’s home directory, and include the total number of files and subdirectories in each:
report_home_space () {
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
}
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
}
This rewrite applies much of what we have learned so far. We still test for the superuser, but instead of performing the complete set of actions as part of the if, we set some vari- ables used later in a for loop. We have added several local variables to the function and made use of printf to format some of the output.