GNU/Linux >> Tutoriels Linux >  >> Linux

Commande de lecture bash

Bash est livré avec un certain nombre de commandes intégrées que vous pouvez utiliser sur la ligne de commande ou dans vos scripts shell.

Dans cet article, nous allons explorer le read intégré commande.

Bash read # intégré

read est une commande intégrée bash qui lit une ligne depuis l'entrée standard (ou depuis le descripteur de fichier) et divise la ligne en mots. Le premier mot est attribué au prénom, le deuxième au deuxième nom, et ainsi de suite.

La syntaxe générale du read intégré prend la forme suivante :

read [options] [name...]

Pour illustrer le fonctionnement de la commande, ouvrez votre terminal, tapez read var1 var2 , et appuyez sur "Entrée". La commande attendra que l'utilisateur entre l'entrée. Tapez deux mots et appuyez sur "Entrée".

read var1 var2Hello, World!

Les mots sont assignés aux noms qui sont passés au read commande comme arguments. Utiliser echo ou printf pour le vérifier :

echo $var1echo $var2
Hello,
World!

Au lieu de taper sur le terminal, vous pouvez passer l'entrée standard à read en utilisant d'autres méthodes telles que tuyauterie, here-string ou heredoc :

echo "Hello, World!" | (read var1 var2; echo -e "$var1 \n$var2")
read et echo sont entre parenthèses et exécutés dans le même sous-shell.
Hello,
World!

Voici un exemple utilisant une chaîne here et printf :

read -r var1 var2 <<< "Hello, World!"printf "var1: %s \nvar2: %s\n" "$var1" "$var2"
Var1: Hello, 
Var2: World! 

Lorsqu'aucun argument n'est fourni au read commande, toute la ligne est affectée à la REPLY variables :

echo "Hello, world!" | (read; echo "$REPLY")
Hello, World!

Si le nombre d'arguments fournis à read est supérieur au nombre de mots lus depuis l'entrée, les mots restants sont affectés au nom de famille :

echo "Linux is awesome." | (read var1 var2; echo -e "Var1: $var1 \nVar2: $var2")
Var1: Linux 
Var2: is awesome.

Sinon, si le nombre d'arguments est inférieur au nombre de noms, une valeur vide est affectée aux noms restants :

echo "Hello, World!" | (read var1 var2 var3; echo -e "Var1: $var1 \nVar2: $var2 \nVar3: $var3")
Var1: Hello, 
Var2: World! 
Var3: 

Par défaut, read interprète la barre oblique inverse comme un caractère d'échappement, ce qui peut parfois provoquer un comportement inattendu. Pour désactiver l'échappement antislash, appelez la commande avec le -r option.

Ci-dessous un exemple montrant comment read fonctionne lorsqu'il est invoqué avec et sans le -r choix :

read <<< "Hello, \tWorld!"printf %s "$REPLY"
Hello, tWorld!
read -r <<< "Hello, \tWorld!"printf %s "$REPLY"
Hello, \tWorld!

Généralement, vous devez toujours utiliser read avec le -r option.

Changer le délimiteur #

Le comportement par défaut de read consiste à diviser la ligne en mots en utilisant un ou plusieurs espaces, tabulations et retour à la ligne comme délimiteurs. Pour utiliser un autre caractère comme délimiteur, affectez-le à l'IFS variable (séparateur de champ interne).

echo "Linux:is:awesome." | (IFS=":" read -r var1 var2 var3; echo -e "$var1 \n$var2 \n$var3")
Linux 
is 
awesome.

Quand IFS est défini sur un caractère autre qu'un espace ou une tabulation, les mots sont séparés par exactement un caractère :

echo "Linux::is:awesome." | \  (IFS=":" read -r var1 var2 var3 var4; echo -e "Var1: $var1 \nVar2: $var2 \nVar3: $var3 \nVar4: $var4")

La ligne est séparée en quatre mots. Le deuxième mot est une valeur vide représentant le segment entre les délimiteurs. Il est créé car nous avons utilisé deux caractères délimiteurs l'un à côté de l'autre (:: ).

Var1: Linux 
Var2:  
Var3: is 
Var4: awesome.

Vous pouvez utiliser plusieurs délimiteurs pour diviser la ligne. Lorsque vous spécifiez plusieurs délimiteurs, affectez les caractères à l'IFS variable sans espace entre eux.

Voici un exemple utilisant _ un - comme délimiteurs :

echo 'Linux_is-awesome.' | (IFS="-_" read -r var1 var2 var3; echo -e "$var1 \n$var2 \n$var3")
Linux 
is 
awesome.

Chaîne d'invite #

Lors de l'écriture de scripts bash interactifs, vous pouvez utiliser la commande read commande pour obtenir l'entrée de l'utilisateur.

Pour spécifier une chaîne d'invite, utilisez le -p option. L'invite est imprimée avant le read est exécuté et n'inclut pas de retour à la ligne.

Voici un exemple simple :

read -r -p "Are you sure?"

Généralement, vous utiliseriez le read commande dans un while boucle pour forcer l'utilisateur à donner une des réponses attendues.

Le code ci-dessous demandera à l'utilisateur de redémarrer le système :

while true; do
    read -r -p "Do you wish to reboot the system? (Y/N): " answer
    case $answer in
        [Yy]* ) reboot; break;;
        [Nn]* ) exit;;
        * ) echo "Please answer Y or N.";;
    esac
done

Si le script shell demande aux utilisateurs d'entrer des informations sensibles, comme un mot de passe, utilisez le -s option qui indique read pour ne pas imprimer l'entrée sur le terminal :

read -r -s -p "Enter your password: "

Attribuer les mots au tableau #

Pour affecter les mots à un tableau au lieu de noms de variables, appelez le read commande avec le -a choix :

read -r -a MY_ARR <<< "Linux is awesome."

for i in "${MY_ARR[@]}"; do 
  echo "$i"
done
Linux 
is 
awesome.

Lorsqu'un tableau et un nom de variable sont donnés, tous les mots sont affectés au tableau.

Conclusion #

Le read La commande est utilisée pour diviser une ligne d'entrée en mots.


Linux
  1. La commande "eval" dans Bash ?

  2. Bash Script - Exemple Hello World

  3. bash sh - commande introuvable

  4. Bash - Commande de date et espace

  5. Bash si sur une seule ligne

Commande de source bash

Commande d'historique sous Linux (historique de bash)

Commande de sortie Bash et codes de sortie

Commande Bash printf

Script bash (II)

Script bash (III)