
テーマメーカースクリプトには6つのオプションがあります。 1) テーマアップデートの確認 2) テーマの再インストール 3) フォントのインストール 4) 壁紙のインストール 5) ツールアップデートの確認 6) 終了
これはコードです
clear
echo "==========================="
echo "Tool for theme"
echo "==========================="
function check_update {
echo "checking theme update"
}
function reinstall_theme {
echo "Reinstalling"
echo "==========================="
}
function font {
echo "Installing font"
}
function wall {
echo "Installing wallpaper"
}
function check_update_tool {
echo "Checking tool update"
}
all_done=0
while (( !all_done )); do
options=("Check theme update" "Reinstall theme" "Install font" "Install wallpaper" "Check tool update" "Quit")
echo "Choose an option: "
select opt in "${options[@]}"; do
case $REPLY in
1) check_update; break ;;
2) reinstall_theme; break ;;
3) font; break ;;
4) wall; break ;;
5) check_update_tool; break ;;
6) all_done=1; break ;;
*) echo "Invalid option" ;;
esac
done
done
echo "Exiting"
sleep 2
しかし、実行するとメニュー選択が混乱します。
==================
Tool for theme
==================
Choose an option:
1) Check theme update 2) Reinstall theme 3) Install font
4) Install Wallpaper 5) Check tool update 6) Quit
しかし、私が望むもの
===============
Tool for theme
===============
Choose an option:
1) Check theme update
2) Reinstall theme
3) Install font
4) Install wallpaper
5) Check tool update
6) Quit
では、メニューはどのように修正しますか?
答え1
このCOLUMNS
変数を設定して表示幅を制限できます。たとえば、12に設定すると、例は単一の列にフォーマットされます。
COLUMNS=12
select opt in "${options[@]}"; do
case $REPLY in
1) check_update; break ;;
2) reinstall_theme; break ;;
3) font; break ;;
4) wall; break ;;
5) check_update_tool; break ;;
6) all_done=1; break ;;
*) echo "Invalid option" ;;
esac
生産する
===========================
Tool for theme
===========================
Choose an option:
1) Check theme update
2) Reinstall theme
3) Install font
4) Install wallpaper
5) Check tool update
6) Quit
#?
これバッシュマニュアル説明列:
ユーザー
select
コマンドは、選択リストを印刷するときの端末の幅を決定します。次の場合は自動的に設定されます。checkwinsize
オプションが有効になっています(参照:内蔵店舗)または対話型シェルから受信SIGWINCH
。
マニュアルページの機能を見ることに加えて、ソースコードを読むことも全体の内容を理解するのに役立ちます。この変数は次の目的で使用されます。select_query
コメントを含む関数
/* LISTの要素を1行に1つずつ印刷し、前に1から LIST_LEN。次に、PROMPTを表示し、ユーザーが数字を入力するのを待ちます。 数値が 1 と LIST_LEN の間であれば、選択項目が返されます。ファイルの終わりに 読んだ後は空の文字列が返されます。入力内容が空であるか無効である場合 数字を入力してループを再実行してください。 */
そして後でselect_query
機能
t = get_string_value("列"); COLS = (t && *t) ?atoi(t): 80;
与えれば合理的な値はatoi
合理的な結果を提供します(この場合は0も合理的です)。少ないatoi
COLUMNS
数値以外の値に設定すると、80を超える列が返されます。値がない場合(つまりCOLUMNS=""
、)bash
80列が使用されます。
追加資料:
- atoi - 文字列を整数に変換する
atoi(str) の呼び出しは次のようになります。
(int) strtol(str, (char **)NULL, 10)
- strtol, strtoll - 文字列を長い整数に変換する
変換できない場合は0を返します。