GNU/Linux >> Znalost Linux >  >> Linux

Bash Select (Vytvořit nabídky)

V tomto tutoriálu probereme základy select konstruovat v Bash.

select konstrukt umožňuje generovat nabídky.

Bash select Konstrukce #

select konstrukt generuje nabídku ze seznamu položek. Má téměř stejnou syntaxi jako for smyčka:

select ITEM in [LIST]
do
  [COMMANDS]
done

[LIST] může být řada řetězců oddělených mezerami, rozsah čísel, výstup příkazu, pole a tak dále. Vlastní výzva pro select konstrukt lze nastavit pomocí PS3 proměnná prostředí.

Když select je vyvolána konstrukce, každá položka ze seznamu se vytiskne na obrazovku (standardní chyba), před kterou je uvedeno číslo.

Pokud uživatel zadá číslo, které odpovídá číslu jedné ze zobrazených položek, pak hodnota [ITEM] je nastavena na tuto položku. Hodnota vybrané položky je uložena v proměnné REPLY . V opačném případě, pokud je uživatelský vstup prázdný, výzva a seznam nabídek se zobrazí znovu.

select smyčka bude pokračovat v běhu a bude vyžadovat zadání uživatele až do break příkaz se provede.

Chcete-li ukázat, jak select konstruktivní práce, podívejme se na následující jednoduchý příklad:

PS3="Enter a number: "

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

Skript zobrazí nabídku sestávající z položek seznamu s doprovodným číslem a PS3 výzva. Když uživatel zadá číslo, skript vytiskne vybraný znak a číslo:

1) Sheldon
2) Leonard
3) Penny
4) Howard
5) Raj
Enter a number: 3
Selected character: Penny
Selected number: 3
Enter a number:

Bash select Příklad #

Obvykle select se používá v kombinaci s case z if prohlášení.

Podívejme se na praktičtější příklad. Je to jednoduchá kalkulačka, která uživatele vyzve k zadání a provádí základní aritmetické operace, jako je sčítání, odčítání, násobení a dělení.

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

Po spuštění skriptu se zobrazí nabídka a PS3 výzva. Uživatel je vyzván k výběru operace a poté k zadání dvou čísel. V závislosti na zadání uživatele skript vytiskne výsledek. Uživatel bude po každém výběru až do break vyzván k provedení nové operace příkaz se provede.

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

Jednou nevýhodou tohoto skriptu je, že může pracovat pouze s celými čísly.

Zde je trochu pokročilejší verze. Používáme bc nástroj, který podporuje plovoucí čísla pro provádění matematických výpočtů. Opakující se kód je také seskupen uvnitř funkce.

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   

Závěr č.

select konstrukt umožňuje snadno vytvářet nabídky. Je to užitečné zejména při psaní skriptů shellu, které vyžadují vstup uživatele.

Pokud máte nějaké dotazy nebo zpětnou vazbu, neváhejte zanechat komentář.


Linux
  1. Bash:Shift+šipky Udělat A,b,c,d?

  2. Bash:Bezpečné procedurální použití funkce Najít do výběru?

  3. Je možné vytvářet a používat nabídky v (terminálovém) Vimu?

  1. Jak číst řetězec jako hexadecimální číslo v Bash?

  2. Jak otestuji, zda je proměnná číslo v Bash?

  3. Jak vybrat statické číslo portu pro vlastní aplikaci?

  1. Udělejte z historie Bash užitečnější pomocí těchto tipů

  2. Jak přidat ikonu do výzvy bash

  3. bash - příkaz make nenalezen