Bash est un langage de programmation assez puissant et il est également assez facile de démarrer avec.
Après tout, c'est presque universellement le shell que vous verrez lorsque vous ouvrirez votre terminal. Il est donc extrêmement utile de s'y habituer.
Il y a quelques commandes puissantes dans Bash que vous ne connaissez peut-être pas, même si vous êtes assez habitué à utiliser le langage. Toutes ces commandes peuvent cependant servir à des fins très utiles et peuvent rendre les scripts shell que vous écrivez plus propres, plus faciles à gérer et tout simplement plus puissants qu'ils n'auraient pu l'être auparavant.
Lire :Demander une entrée à l'utilisateur
La commande de lecture vous permet de prendre l'entrée d'un utilisateur et de la stocker dans une variable.
#!/usr/bin/env bash
echo "What is your name?"
read name
echo "Your name is ${name}!"
Cela attendra une entrée de votre part, l'utilisateur, puis définira la valeur pour le name
variable à la chaîne que vous saisissez.
Par exemple, si vous avez spécifié votre nom en tant que Linux Handbook
lors de l'exécution du script ci-dessus, il afficherait Your name is Linux Handbook!
.
Vous pouvez également rendre l'exemple ci-dessus plus compact en spécifiant le -p
l'option read
commande, qui imprimera la chaîne spécifiée après -p
, puis demandez à l'utilisateur de saisir :
#!/usr/bin/env bash
read -p "What is your name? " name
echo "Your name is ${name}!"
Vous remarquerez également que j'ai ajouté un espace après What is your name?
. Si nous ne l'ajoutions pas, cela afficherait littéralement What is your name?
sans espace, ce qui le rendrait un peu plus bizarre lorsque l'utilisateur saisit sa saisie :
Mapfile :Attribuer à une variable les valeurs des lignes d'un fichier
Vous pouvez utiliser le mapfile
pour lire le contenu d'un fichier, puis affecter cette sortie à un tableau Bash, chaque élément du tableau étant créé chaque fois qu'une nouvelle ligne est rencontrée dans le fichier.
Par exemple, créons un fichier appelé file.txt
qui contient le texte suivant :
Line 1
Line 2
Line 3
Line 4
Line 5
Vous pouvez convertir ce fichier en un tableau Bash en exécutant ce qui suit, qui attribue le contenu du fichier au file_var
variables :
#!/usr/bin/env bash
mapfile file_var < file.txt
for i in "${file_var[@]}"; do
echo "${i}"
done
Vous remarquerez que ce qui précède produit également une sortie étrangement espacée qui ne correspond pas à ce qui se trouve à l'intérieur du fichier, ce qui peut être résolu en ajoutant le -t
option au mapfile
commande :
#!/usr/bin/env bash
mapfile -t file_var < file.txt
for i in "${file_var[@]}"; do
echo "${i}"
done
Enfin, vous remarquerez peut-être que ce qui suit ne fonctionne pas :
#!/usr/bin/env bash
cat file.txt | mapfile -t file_var
C'est parce que le mapfile
La commande sur le côté droit du tube est exécutée dans un sous-shell (ou en d'autres termes, une nouvelle instance de Bash), qui ne peut pas affecter votre shell actuel.
Source :placez les variables d'un fichier dans l'environnement de votre shell
Disons que vous avez le fichier imaginaire suivant, config.sh
, avec le contenu suivant :
username=linuxhandbook
domain=linuxhandbook.com
Et si vous vouliez prendre le contenu de ce fichier et le mettre dans l'environnement de votre shell actuel ?
Cela peut être fait très simplement en utilisant simplement la commande source :
source config.sh
Vous pouvez ensuite vérifier que les variables ont été affectées comme prévu :
Sous le capot, le source
La commande exécute en fait le fichier spécifié dans l'environnement de votre shell actuel, donc la saisie de toutes les commandes dans ce fichier entraînerait leur exécution lors de l'exécution de source
.
Par exemple, mettons ce qui suit dans config.sh
:
name="Linux Handbook"
echo "Hello ${name}!"
echo "Have a good day!"
Si nous exécutons ensuite soure config.sh
, vous verrez que les deux echo
les commandes sont exécutées, ainsi que le name
variable en cours d'attribution :
Vous pouvez également utiliser .
à la place de source
, qui agit de la même manière que source
le ferait.
Conclusion
Et juste comme ça, vous êtes sur la bonne voie pour effectuer des tâches plus puissantes et utiles, tout en étant capable de rester à l'intérieur de Bash.
Y a-t-il d'autres commandes que vous utilisez fréquemment dans Bash ? N'hésitez pas à laisser l'un d'entre eux dans les commentaires ci-dessous.