シェルスクリプトのマルチタスクメニュー
メニューに4つのことを行うシェルスクリプト(test.sh)があるとしましょう。タスクは、端末の履歴、ダウンロードフォルダ、ごみ箱、またはシャットダウンをクリーンアップすることです。これまで私のコードは次のようになります
#!/bin/bash
function menu {
clear
echo "[1] Clean Terminal"
echo ""
echo "[2] Clean Downloads"
echo ""
echo "[3] Clean Trash"
echo ""
echo "[x] Exit"
echo ""
read -p "Option > " option
}
function terminal {
clear
cd
cat /dev/null > .bash_history
echo "Terminal history is now cleared!"
}
function downloads {
clear
cd
rm -r Downloads/*
echo "Downloads directory is now cleared!"
}
function trash {
clear
cd
rm -rf ~/.local/share/Trash/*
echo "Trash is now cleared!"
}
function terminate {
exit
}
end_script=0
while [ "${end_script}" != 1 ];do
menu
case ${option} in
1)
terminal
;;
2)
downloads
;;
3)
trash
;;
x)
terminate
;;
*)
clear
echo "unknown usage!"
;;
esac
done
実行されたスクリプトは次のとおりです。
[1] Clean Terminal
[2] Clean Downloads
[3] Clean Trash
[x] Exit
Option >
問題は何ですか:
私が経験している問題は、このメニューがユーザーの単一の入力(一度に1つの数字のみ)を受け入れることです。私ができることを望むのは、複数の入力を受け取り、それを(1、2)または(1 2 3)のように分割することです。
私が今まで試したことは...
私はこの問題についてしばらくブレーンストーミングをしてきました。私が考えた1つの方法は、別の機能を作成し、すべての数値変更にコードを追加することでしたが、より大きなメニューの場合は時間がかかり、論理的には見えません。
ベストアンサー1
あなたの質問を理解したら、プロンプトで区切り文字で区切られた複数のメニューコードを入力できるようにしたいと思います。その後、一度に1つずつ処理できるようにしたいです。その場合、スペースを区切り文字として使用すると、入力文字列を配列に簡単に変換してその内容を繰り返すことができます。
# let's say user enters "a b c" and we store in input_str
input_arr=($input_str)
for cmd in "${input_arr[@]}"; do
# process command associated with $cmd
done
コードを配列に入れることは必ずしも必要ではありませんが、個々のコードにアクセスして全体を決定するなどの作業が可能なので便利です。