Skip to main content
added tags
Link
I0_ol
  • 453
  • 3
  • 9
deleted 30 characters in body
Source Link
200_success
  • 145.6k
  • 22
  • 191
  • 481

Thank you for your time.

Thank you for your time.

Source Link
I0_ol
  • 453
  • 3
  • 9

Bash manual page selection menu

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?

Thank you for your time.