逆引きシェルスクリプト/選択メニューを簡単に実現する
の編集
Top
/
逆引きシェルスクリプト
/
選択メニューを簡単に実現する
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
(no template pages)
#navi(../) * 選択メニューを簡単に実現する・selectコマンド [#ea5716dd] bashのビルドインで''select''コマンドがあります。~ この''select''を利用すると簡単に選択メニューを実現することができます。 #contents #htmlinsertpcsp(linux_ads_top.html,linux-sp.html) * selectを利用て選択メニューを作る [#we09d429] 以下、selectを利用したサンプルシェルスクリプトおよび実行結果を記します。~ 尚、利用したディストリビューションはUbuntuです。~ シェルがbashであれば他のディストリビューションでも同様に動作するはずです。 ** selectを利用したサンプルシェルスクリプト [#p58bf6c1] 以下のselectを用いたサンプルスクリプトを説明します。 #ref(select-1.sh) 1 #!/bin/bash 2 3 echo What linux distribution do you use? 4 ans1="Debian" 5 ans2="Ubuntu" 6 ans3="LinuxMint" 7 ans4="CentOS" 8 ans5="fedora" 9 10 select ANS in "$ans1" "$ans2" "$ans3" "$ans4" "$ans5" 11 do 12 if [ -z "$ANS" ]; then 13 continue 14 else 15 break 16 fi 17 done 18 19 echo You selected $REPLY\) $ANS - 3行目 : メッセージの表示 - 4行目~8行目 : 選択肢の設定 -10行目 : selectで選択メニューを表示(select ... do ... done の構文となる) -12行目 : 範囲外の値を入力された場合、$ANSには何もセットされないのでtest -z を用いて判定している。 -13行目 : doループの先頭に戻る -14行目~16行目 : $ANSに選択した項目の文字列がセットされた場合、do ... done のループから抜ける。 -19行目 : 入力された文字が$REPLYにセットされ、$ANSには$ans1~$ans5に設定された文字列がセットされているので、echoを使って表示。 ** 実行結果(select-01.sh) [#z293b50e] sakura@ubuntu:~$ ./select-1.sh What linux distribution do you use? 1) Debian 2) Ubuntu 3) LinuxMint 4) CentOS 5) fedora #? 2 You selected 2) Ubuntu 範囲外の値を入力した場合 $ ./select-1.sh What linux distribution do you use? 1) Debian 2) Ubuntu 3) LinuxMint 4) CentOS 5) fedora #? 100 #? 上記の実行結果より、$REPLYには入力した文字(数字)が格納され、$ANSには数字に対応した文字列が格納されることがわかります。~ また、範囲外の値を入力した場合(上記では100を入力)は、再度#?プロンプトが表示されるのがわかります。 * #?プロンプトの変更 [#b50204f1] selectではPS3変数にプロンプトメッセージを設定することにより#?を変更することができます。~ 以下にselect-01.shを一部変更したサンプルシェルスクリプトを記します。 #ref(select-2.sh) 1 #!/bin/bash 2 3 PS3="What linux distribution do you use? >" 4 ans1="Debian" 5 ans2="Ubuntu" 6 ans3="LinuxMint" 7 ans4="CentOS" 8 ans5="fedora" 9 10 select ANS in "$ans1" "$ans2" "$ans3" "$ans4" "$ans5" 11 do 12 if [ -z "$ANS" ]; then 13 continue 14 else 15 break 16 fi 17 done 18 19 echo You selected $REPLY\) $ANS 変更行は3行目だけです。~ echoで表示していたメッセージをPS3に設定するように変更しました。 ** 実行結果(select-02.sh) [#bcbdeb18] 以下、範囲外を指定し、その後3) LinuxMintを選択したときの実行結果です。 $ ./select-2.sh 1) Debian 2) Ubuntu 3) LinuxMint 4) CentOS 5) fedora What linux distribution do you use? >100 What linux distribution do you use? >3 You selected 3) LinuxMint PS3にメッセージを設定することにより選択一覧表示後、入力プロンプトが指定したメッセージになります。 #htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)
タイムスタンプを変更しない
#navi(../) * 選択メニューを簡単に実現する・selectコマンド [#ea5716dd] bashのビルドインで''select''コマンドがあります。~ この''select''を利用すると簡単に選択メニューを実現することができます。 #contents #htmlinsertpcsp(linux_ads_top.html,linux-sp.html) * selectを利用て選択メニューを作る [#we09d429] 以下、selectを利用したサンプルシェルスクリプトおよび実行結果を記します。~ 尚、利用したディストリビューションはUbuntuです。~ シェルがbashであれば他のディストリビューションでも同様に動作するはずです。 ** selectを利用したサンプルシェルスクリプト [#p58bf6c1] 以下のselectを用いたサンプルスクリプトを説明します。 #ref(select-1.sh) 1 #!/bin/bash 2 3 echo What linux distribution do you use? 4 ans1="Debian" 5 ans2="Ubuntu" 6 ans3="LinuxMint" 7 ans4="CentOS" 8 ans5="fedora" 9 10 select ANS in "$ans1" "$ans2" "$ans3" "$ans4" "$ans5" 11 do 12 if [ -z "$ANS" ]; then 13 continue 14 else 15 break 16 fi 17 done 18 19 echo You selected $REPLY\) $ANS - 3行目 : メッセージの表示 - 4行目~8行目 : 選択肢の設定 -10行目 : selectで選択メニューを表示(select ... do ... done の構文となる) -12行目 : 範囲外の値を入力された場合、$ANSには何もセットされないのでtest -z を用いて判定している。 -13行目 : doループの先頭に戻る -14行目~16行目 : $ANSに選択した項目の文字列がセットされた場合、do ... done のループから抜ける。 -19行目 : 入力された文字が$REPLYにセットされ、$ANSには$ans1~$ans5に設定された文字列がセットされているので、echoを使って表示。 ** 実行結果(select-01.sh) [#z293b50e] sakura@ubuntu:~$ ./select-1.sh What linux distribution do you use? 1) Debian 2) Ubuntu 3) LinuxMint 4) CentOS 5) fedora #? 2 You selected 2) Ubuntu 範囲外の値を入力した場合 $ ./select-1.sh What linux distribution do you use? 1) Debian 2) Ubuntu 3) LinuxMint 4) CentOS 5) fedora #? 100 #? 上記の実行結果より、$REPLYには入力した文字(数字)が格納され、$ANSには数字に対応した文字列が格納されることがわかります。~ また、範囲外の値を入力した場合(上記では100を入力)は、再度#?プロンプトが表示されるのがわかります。 * #?プロンプトの変更 [#b50204f1] selectではPS3変数にプロンプトメッセージを設定することにより#?を変更することができます。~ 以下にselect-01.shを一部変更したサンプルシェルスクリプトを記します。 #ref(select-2.sh) 1 #!/bin/bash 2 3 PS3="What linux distribution do you use? >" 4 ans1="Debian" 5 ans2="Ubuntu" 6 ans3="LinuxMint" 7 ans4="CentOS" 8 ans5="fedora" 9 10 select ANS in "$ans1" "$ans2" "$ans3" "$ans4" "$ans5" 11 do 12 if [ -z "$ANS" ]; then 13 continue 14 else 15 break 16 fi 17 done 18 19 echo You selected $REPLY\) $ANS 変更行は3行目だけです。~ echoで表示していたメッセージをPS3に設定するように変更しました。 ** 実行結果(select-02.sh) [#bcbdeb18] 以下、範囲外を指定し、その後3) LinuxMintを選択したときの実行結果です。 $ ./select-2.sh 1) Debian 2) Ubuntu 3) LinuxMint 4) CentOS 5) fedora What linux distribution do you use? >100 What linux distribution do you use? >3 You selected 3) LinuxMint PS3にメッセージを設定することにより選択一覧表示後、入力プロンプトが指定したメッセージになります。 #htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)
テキスト整形のルールを表示する
添付ファイル:
select-1.sh
654件
[
詳細
]
select-2.sh
807件
[
詳細
]