数値選択リストの作成

数値選択リストの作成

単語リストを含むファイルがあります。このファイルを読み、リストから動物を選択できるようにメニューを作成する方法は?シンプルなbashスクリプト、カラフルではありません。

例: 動物.txt

dog
cat
lion
bear

例: 必須メニュー

1 - dog
2 - cat
3 - lion
4 - bear

Select choice: 3

You chose a lion.

答え1

使用mapfileそしてselect

例えば

#!/bin/bash

mapfile -t animals < "animal.txt"

select animal in "${animals[@]}"; do
    echo "$animal"
    break
done

ランニング:

$ ./animal.sh
1) dog
2) cat
3) lion
4) bear
#? 2
cat

答え2

ここでは通常スクリプトを要求しませんが、難しい部分は私がお手伝いします。

シェルに次のselect機能があるとします(例bash:)。これにより開始されます。

#!/bin/bash

PS3='Select choice: '
select ch in "dog" "cat" "lion" "bear"; do
    case $REPLY in
        [1-4]) break ;;
            *) echo 'Try again' >&2
    esac
done

printf 'You chose a %s\n' "$ch"

selectbashメニューとプロンプトが表示されます。ヒントは変数の値として提供されますPS3

このselectステートメントはループであり、繰り返しごとにユーザーが選択します。選ぶ数字(またはユーザーが入力したすべての項目)はにあり、$REPLY実際のメニュー項目はその文の変数にありますselect(ここでは$ch)。

caseループのステートメントは、有効な応答が提供されたかどうかをテストします。そうであれば(つまり、$REPLY1と4の間の単一の数値である場合)、breakループを終了します。ユーザーが別のものを入力すると、単純なエラーメッセージが表示され、ループは次の反復を実行します。

メニュー項目が9つを超えると、値に$REPLY複数の文字が含まれる可能性があるため、より複雑な方法で有効な入力をテストする必要があるかもしれません。

ループが終わったら、メニューから項目を選択できます$ch

関連情報