GNU/Linux >> Tutoriels Linux >  >> Linux

Bash Select (créer des menus)

Dans ce tutoriel, nous couvrirons les bases de la select construire dans Bash.

Le select construct vous permet de générer des menus.

Bash select Construire #

Le select construct génère un menu à partir d'une liste d'éléments. Il a presque la même syntaxe que le for boucle :

select ITEM in [LIST]
do
  [COMMANDS]
done

Le [LIST] peut être une série de chaînes séparées par des espaces, une plage de nombres, la sortie d'une commande, un tableau, etc. Une invite personnalisée pour le select la construction peut être définie à l'aide de la PS3 variable d'environnement.

Lorsque le select construction est invoquée, chaque élément de la liste est affiché à l'écran (erreur standard), précédé d'un numéro.

Si l'utilisateur saisit un nombre qui correspond au numéro d'un des éléments affichés, alors la valeur de [ITEM] est réglé sur cet élément. La valeur de l'item sélectionné est stockée dans la variable REPLY . Sinon, si l'entrée utilisateur est vide, l'invite et la liste des menus s'affichent à nouveau.

Le select la boucle continuera à s'exécuter et demandera une entrée utilisateur jusqu'à ce que le break la commande est exécutée.

Pour montrer comment le select travaux de construction, examinons l'exemple simple suivant :

PS3="Enter a number: "

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

Le script affichera un menu composé d'éléments de liste avec un numéro d'accompagnement et le PS3 rapide. Lorsque l'utilisateur saisit un numéro, le script imprimera le caractère et le numéro sélectionnés :

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 Exemple #

Généralement, select est utilisé en combinaison avec case de if déclarations.

Prenons un exemple plus pratique. Il s'agit d'une calculatrice simple qui invite l'utilisateur à entrer et effectue des opérations arithmétiques de base comme l'addition, la soustraction, la multiplication et la division.

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

Lorsque le script est exécuté, il affiche le menu et la PS3 rapide. L'utilisateur est invité à sélectionner l'opération, puis à saisir deux chiffres. En fonction de l'entrée de l'utilisateur, le script imprimera le résultat. L'utilisateur sera invité à effectuer une nouvelle opération après chaque sélection jusqu'au break la commande est exécutée.

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

Un inconvénient de ce script est qu'il ne peut fonctionner qu'avec des entiers.

Voici une version un peu plus avancée. Nous utilisons le bc outil qui prend en charge les nombres flottants pour effectuer des calculs mathématiques. De plus, le code répétitif est regroupé à l'intérieur d'une fonction.

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   

Conclusion #

Le select construct vous permet de générer facilement des menus. Il est particulièrement utile lors de l'écriture de scripts shell qui nécessitent une entrée de l'utilisateur.

Si vous avez des questions ou des commentaires, n'hésitez pas à laisser un commentaire.


Linux
  1. Arrondir un nombre divisé en Bash

  2. Obtenir un entier plafond à partir d'un nombre sous Linux (BASH)

  3. Utilisation de la sortie des commandes précédentes dans bash

  4. Comment sélectionner un numéro de port statique pour une application personnalisée ?

  5. Comment faire en sorte que GREP ne sélectionne que des valeurs numériques ?

Bash printf - Comment imprimer une variable dans Bash

Bash pour la boucle

Bash Shebang

Expression de séquence bash (plage)

Script Shell/Bash pour trouver des nombres premiers sous Linux

bash - commande make introuvable