I wrote the following script in the hopes of streamlining the finding and reading of multiple manual pages. Since I am always looking up different utilities' manual pages I thought this would a good learning aid.
#!/bin/bash
while true
do
echo
echo "1) /bin"
echo "2) /sbin"
echo "3) /usr/bin/"
echo "4) /usr/sbin"
echo "5) /usr/local/bin"
echo "6) /usr/local/lib"
echo "7) /usr/local/share"
echo "8) /usr/local/include"
echo "9) exit"
echo
read -p 'Select a directory ' d
if [[ $d = 1 ]]; then
dir=/bin
elif [[ $d = 2 ]]; then
dir=/sbin
elif [[ $d = 3 ]]; then
dir=/usr/bin
elif [[ $d = 4 ]]; then
dir=/usr/sbin
elif [[ $d = 5 ]]; then
dir=/usr/local/bin
elif [[ $d = 6 ]]; then
dir=/usr/local/lib
elif [[ $d = 7 ]]; then
dir=/usr/local/share
elif [[ $d = 8 ]]; then
dir=/usr/local/include
elif [[ $d = 9 ]]; then
exit
else
echo 'No such directory'
exit 1
fi
echo
while true
do
menu=( $(ls -1 ${dir}) )
i=0
for m in ${menu[@]}
do
echo "$(( i++ ))) $(basename $m)"
done | xargs -L3 | column -t
echo
echo 'Select from the list above'
echo 'Type b to go back to main menu'
read -p 'Type q to quit at anytime ' n
echo
if [[ $n = 'b' || $n = 'B' ]]; then
break 1
elif [[ $n = 'q' || $n = 'Q' ]]; then
exit
else
for item in ${menu[$n]}
do
if [[ $item =~ '.txt' ]]; then
item="$(echo ${item%.*})"
fi
man $item
done
fi
done
done
One thing I should point out. My /usr/local/bin
directory has several .txt
files. That is the reason for if [[ $item =~ '.txt' ]]; then item="$(echo ${item%.*})"; fi
Maybe it is normal to have plain text files in this directory or maybe this is something I did unintentionally when experimenting writing this script. (An earlier version of this script wrote all the man pages to plain text files.) I really don't know but that's why that part of the script is there.
I think this script does what I hoped it would do so now I would like other people's opinion. Is there anything I could do better? Am I overlooking anything?