bashでメニュー
bashでこんな感じのメニューを簡単に作る方法です。
■■■メインメニュー■■■ 0: submenu001.sh メニュー1 1: submenu002.sh メニュー2 q: 終了 コマンドを選択してEnterキーで決定します>
■作り方
- メインメニューとサブメニューは同じフォルダに作成します
- メインメニューはサブメニューを呼び出します
- サブメニューに記述したコマンドを適宜実行する構成です
- メインメニューにはサブメニュー内の「#@menu:サブメニュー」が表示されます
- メインメニューはとりあえずコピペで動きます
- サブメニューは適宜作成してください
- 小さいシステムならサブメニューだけで、サブメニューを直接起動でも良いかもしれません
■メインメニュー
mainmenu.sh
#!/bin/bash setMenu() { IFS=$'\n' menu=(`grep "^#@menu:" *.sh`) } getMenu() { IFS=$':' arr=($1) if [[ ${#arr[@]} -ge $2 ]]; then echo ${arr[$2]} else echo fi } printMenu() { for (( i = 0; i < ${#menu[@]}; i++ )) do shell=`getMenu "${menu[$i]}" 0` title=`getMenu "${menu[$i]}" 2` printf "%2d: %s %s \n" $i ${shell} ${title} done } executeMenu() { IFS=$':' item=(${menu[$1]}) ./${item[0]} } showMenu() { while true; do clear echo ■■■メインメニュー■■■ printMenu echo " q: 終了" read -p "コマンドを選択してEnterキーで決定します> " input if [[ ${input} =~ "[eEqQ]" ]]; then exit fi if [ ${input} -ge 0 ] && [ ${input} -lt ${#menu[@]} ]; then executeMenu ${input} fi done } setMenu showMenu exit 0
■サブメニュー
submenu001.sh
#!/bin/bash #@menu:メニュー1 while true; do clear cat <<EOF ================================================== メニュー1 ================================================== 1: サブメニュー1 2: サブメニュー2 3: サブメニュー3 q: 終了 ================================================== EOF case "$input" in 1) sudo ssh -t -t {remotehost} {command1} ;; 2) sudo ssh -t -t {remotehost} {command2} ;; 3) sudo ssh -t -t {remotehost} {command3} ;; q|Q|e|E) exit 0 ;; *) ;; esac read -p "メニューを選択してください(1-3:q)>" input done exit 0