GNU/Linux >> Linux の 問題 >  >> Linux

Bash Select(メニューを作成)

このチュートリアルでは、 selectの基本について説明します。 Bashで構築します。

select コンストラクトを使用すると、メニューを生成できます。

バッシュselect 構築#

select コンストラクトは、アイテムのリストからメニューを生成します。 forとほぼ同じ構文です。 ループ:

select ITEM in [LIST]
do
  [COMMANDS]
done

[リスト] スペース、数値の範囲、コマンドの出力、配列などで区切られた一連の文字列にすることができます。 selectのカスタムプロンプト コンストラクトはPS3を使用して設定できます 環境変数。

selectの場合 コンストラクトが呼び出され、リストの各項目が画面に出力され(標準エラー)、前に数字が表示されます。

ユーザーが表示されたアイテムの1つの番号に対応する番号を入力した場合、 [ITEM]の値 そのアイテムに設定されます。選択したアイテムの値は、変数 REPLYに保存されます。 。それ以外の場合、ユーザー入力が空の場合、プロンプトとメニューリストが再度表示されます。

select ループは実行を続け、 breakまでユーザー入力を求めます コマンドが実行されます。

selectの方法を示すため 作品を組み立てるには、次の簡単な例を見てみましょう。

PS3="Enter a number: "

select character in Sheldon Leonard Penny Howard Raj
do
    echo "Selected character: $character"
    echo "Selected number: $REPLY"
done

スクリプトは、番号と PS3が付いたリストアイテムで構成されるメニューを表示します。 促す。ユーザーが数字を入力すると、スクリプトは選択された文字と数字を出力します:

1) Sheldon
2) Leonard
3) Penny
4) Howard
5) Raj
Enter a number: 3
Selected character: Penny
Selected number: 3
Enter a number:
バッシュselect 例#

通常、 select caseと組み合わせて使用​​されます if ステートメント。

より実用的な例を見てみましょう。これは、ユーザーに入力を求め、加算、減算、乗算、除算などの基本的な算術演算を実行する単純な計算機です。

PS3="Select the operation: "

select opt in add subtract multiply divide quit; do

  case $opt in
    add)
      read -p "Enter the first number: " n1
      read -p "Enter the second number: " n2
      echo "$n1 + $n2 = $(($n1+$n2))"
      ;;
    subtract)
      read -p "Enter the first number: " n1
      read -p "Enter the second number: " n2
      echo "$n1 - $n2 = $(($n1-$n2))"
      ;;
    multiply)
      read -p "Enter the first number: " n1
      read -p "Enter the second number: " n2
      echo "$n1 * $n2 = $(($n1*$n2))"
      ;;
    divide)
      read -p "Enter the first number: " n1
      read -p "Enter the second number: " n2
      echo "$n1 / $n2 = $(($n1/$n2))"
      ;;
    quit)
      break
      ;;
    *) 
      echo "Invalid option $REPLY"
      ;;
  esac
done

スクリプトを実行すると、メニューと PS3が表示されます。 促す。ユーザーは、操作を選択してから2つの数値を入力するように求められます。ユーザーの入力に応じて、スクリプトは結果を印刷します。ユーザーは、 break まで、選択するたびに新しい操作を実行するように求められます。 コマンドが実行されます。

1) add
2) subtract
3) multiply
4) divide
5) quit
Select the operation: 1
Enter the first number: 4
Enter the second number: 5
4 + 5 = 9
Select the operation: 2
Enter the first number: 4
Enter the second number: 5
4 - 5 = -1
Select the operation: 9
Invalid option 9
Select the operation: 5

このスクリプトの欠点の1つは、整数でしか機能しないことです。

これはもう少し高度なバージョンです。 bcを使用しています 数学計算を実行するための浮動小数点数をサポートするツール。また、反復コードは関数内にグループ化されています。

calculate () {
  read -p "Enter the first number: " n1
  read -p "Enter the second number: " n2
  echo "$n1 $1 $n2 = " $(bc -l <<< "$n1$1$n2")
}

PS3="Select the operation: "

select opt in add subtract multiply divide quit; do

  case $opt in
    add)
      calculate "+";;
    subtract)
      calculate "-";;
    multiply)
      calculate "*";;
    divide)
      calculate "/";;
    quit)
      break;;
    *) 
      echo "Invalid option $REPLY";;
  esac
done
1) add
2) subtract
3) multiply
4) divide
5) quit
Select the operation: 4
Enter the first number: 8
Enter the second number: 9
8 / 9 =  .88888888888888888888
Select the operation: 5   

結論#

select コンストラクトを使用すると、メニューを簡単に生成できます。これは、ユーザー入力を必要とするシェルスクリプトを作成するときに特に役立ちます。

ご質問やご意見がございましたら、お気軽にコメントをお寄せください。


Linux
  1. Bashで変数が数値かどうかをテストするにはどうすればよいですか?

  2. Bashで割った数を四捨五入する

  3. Linux(BASH)で数値から上限整数を取得する

  1. カスタム アプリの静的ポート番号を選択する方法は?

  2. GREPに数値のみを選択させる方法は?

  3. bash - make コマンドが見つかりません

  1. Bash:Shift +矢印キーでA、b、c、dを作成しますか?

  2. Bash:Find Into Selectの空白に安全な手続き上の使用?

  3. (ターミナルベースの)Vimでメニューを作成して使用することは可能ですか?