Cet article couvre les principes de base des scripts shell Bash et décrit les constructions logiques les plus largement utilisées, y compris le seul if déclaration, if-else déclaration et elif déclaration. En plus de cela, nous couvrirons la manière correcte de comparer des chaînes et des nombres. Améliorez votre expérience du shell Linux en 5 minutes !
Chaque fois que vous êtes un administrateur système expérimenté ou un utilisateur Linux débutant, il est utile de connaître les principes fondamentaux des scripts shell. Cette compétence vous permet d'automatiser des tâches répétables sur un ou plusieurs serveurs. Généralement, ces tâches incluent l'installation de logiciels et la configuration de tous les services système.
Instruction Si
si sert de noyau fondamental pour tous les langages de programmation. Cette déclaration aide à implémenter la logique de prise de décision dans votre programme ou un script. C'est pourquoi il est important de comprendre comment utiliser les différents si déclarations.
Voici la syntaxe de base :
if [ condition ]
then
COMMANDS
fi
Où :
- état – est l'opérateur logique du si déclaration.
- COMMANDES – commandes exécutées lorsque la condition est vraie .
- si, alors, fi – sont des mots clés de syntaxe.
Voici une liste des opérateurs de condition de test les plus souvent utilisés :
Opérateur | Description |
---|---|
! EXPRESSION | L'EXPRESSION est fausse. |
-n CHAÎNE | La longueur de STRING est supérieure à zéro.Text |
-z CHAÎNE | La longueur de STRING est zéro (la STRING est vide) |
STRING1 =STRING2 | STRING1 est égal à STRING2 |
STRING1 !=STRING2 | STRING1 n'est pas égal à STRING2 |
ENTIER1 -eq ENTIER2 | INTEGER1 est numériquement égal à INTEGER2 |
ENTIER1 -gt ENTIER2 | INTEGER1 est numériquement supérieur à INTEGER2 |
ENTIER1 -lt ENTIER2 | INTEGER1 est numériquement inférieur à INTEGER2 |
-e FICHIER | FILE existe |
-d FICHIER | FILE existe et c'est un répertoire |
-s FICHIER | FILE existe et sa taille est supérieure à zéro (FILE n'est pas vide. |
-w FICHIER | FILE existe et l'autorisation d'écriture est accordée. |
-x FICHIER | FILE existe et l'autorisation d'exécution est accordée. |
-r FICHIER | FILE existe et l'autorisation de lecture est accordée. |
La chose la plus intéressante est que pendant l'exécution du script Bash, tout dans [ ] est passé au test utilitaire, qui renvoie soit true ou faux . Donc, si vous oubliez la syntaxe de l'opérateur, utilisez simplement sa page de manuel :
man test
Regardons le plus simple si exemple d'énoncé :
#!/bin/bash
var=2
if [ $var -eq 2 ]
then
echo "var equals 2"
fi
Sortie attendue :
var equals 2
Dans l'exemple ci-dessus, nous définissons la variable var valeur à 2 , puis nous avons testé si la var la valeur est égale à (-eq ) 2 et imprimé le message.
Dans la vraie vie, nous utilisons généralement if en combinaison avec des constructions de bouclage Bash (boucles for, boucles while, boucles until). Voici un exemple d'utilisation de if déclaration avec pour -boucle :
#!/bin/bash
for var in 1 2 3 4 5
do
if [ $var -eq 3 ]
then
echo "Value 3 found"
break
fi
echo var=$var
done
Sortie attendue :
var=1
var=2
Value 3 found
Dans cet exemple, nous parcourons la liste des nombres à partir de 1 à 5 dans le pour -loop et l'impression de la valeur de la variable, que nous venons de traiter. Lorsque la valeur 3 est trouvée, nous interrompons l'exécution du script.
En plus des exemples ci-dessus, vous pouvez utiliser le résultat d'un calcul mathématique dans le si déclaration :
#!/bin/bash
for var in {1..10}
do
if (( $var % 2 == 0 ))
then
echo "$var is even number"
fi
done
Dans l'exemple ci-dessus, nous vérifions les nombres pairs compris entre 1 et 10 .
Sortie attendue :
2 is even number
4 is even number
6 is even number
8 is even number
10 is even number
Maintenant, vous pouvez vérifier une sortie de commande Bash ou un résultat d'exécution. Essayons de vérifier que l'utilisateur existe dans le /etc/passwd fichier.
#!/bin/bash
user='root'
check_result=$( grep -ic "^$user" /etc/passwd )
if [ $check_result -eq 1 ]
then
echo "$user user found"
fi
Dans l'exemple ci-dessus, nous utilisons grep commande pour rechercher dans /etc/passwd fichier :
grep -ic "^$user" /etc/passwd
Où :
- -i – recherche insensible à la casse.
- -c – renvoie le nombre de lignes trouvées (0 – rien trouvé ; 1 ou plus si quelque chose a été trouvé).
- "^$utilisateur" – rechercher la chaîne qui commence (^ ) à partir de la valeur de $user variables.
Tout le reste de l'exemple doit être clair.
Sortie attendue :
root user found
Ensuite, vérifions que /etc/passwd fichier existe :
#!/bin/bash
file='/etc/passwd'
if [ -s $file ]
then
echo "$file file found"
fi
Sortie attendue :
/etc/passwd file found
Instruction If-else
Après vous être familiarisé avec les principes de base si déclaration, voyons comment utiliser Bash if-else déclaration.
Voici la syntaxe générale :
if [ condition ]
then
TRUE_COMMANDS
else
FALSE_COMMANDS
fi
Où :
- état – est l'opérateur logique du si déclaration.
- TRUE_COMMANDS – commandes, qui sont exécutées si la condition est vraie.
- FALSE_COMMANDS – commandes, qui sont exécutées si la condition est fausse.
- si, alors, sinon, fi – sont des mots clés de syntaxe.
Pour montrer comment cela fonctionne, changeons un exemple, où nous avons détecté des nombres pairs. Maintenant, imprimons quel nombre est pair et lequel est impair :
#!/bin/bash
for var in {1..10}
do
if (( $var % 2 == 0 ))
then
echo "$var is even number"
else
echo "$var is odd number"
fi
done
Voici une sortie attendue :
1 is odd number
2 is even number
3 is odd number
4 is even number
5 is odd number
6 is even number
7 is odd number
8 is even number
9 is odd number
10 is even number
Déclaration Elif
Maintenant, que se passe-t-il si nous devons vérifier plusieurs conditions différentes lors de l'exécution de notre script ? Cela est également possible en utilisant l'instruction elif, qui est un raccourci de "else if ”.
Voici à quoi ressemble la syntaxe :
if [ condition_1 ]
then
CONDITION_1_COMMANDS
elif [ condition_2 ]
then
CONDITION_2_COMMANDS
else
ALL_OTHER_COMMANDS
fi
Où :
- état_1 – est la condition logique pour exécuter CONDITION_1_COMMANDS .
- CONDITION_1_COMMANDES – commandes exécutées si la condition_1 est vrai .
- CONDITION_2_COMMANDES – commandes exécutées si la condition_2 est vrai .
- ALL_OTHER_COMMANDS – commandes exécutées lorsque condition_1 et condition_2 sont faux .
- si, alors, elif, sinon, fi – sont des mots clés de syntaxe.
Regardons l'exemple suivant :
#/bin/bash
time=8
if [ $time -lt 10 ]
then
echo "Good morning"
elif [ $time -lt 20 ]
then
echo "Good day"
else
echo "Good evening"
fi
Dans cet exemple, nous avons défini une heure variable sur 8 AM et a imprimé un message basé sur la valeur de l'heure.
Sortie attendue :
Good morning
Imbrication des instructions if
Maintenant que nous nous sommes familiarisés avec les bases, nous pouvons terminer ce sujet en apprenant à imbriquer les instructions if.
Voici un exemple :
#/bin/bash
value=5
if [ $value -lt 10 ]
then
if [ $value -eq 5 ]
then
echo "Value equals 5"
else
echo "Value not equals 5"
fi
else
echo "value is greater than 10"
fi
Voici une sortie attendue :
Value equals 5
Opérateurs booléens
Il peut être utile de vérifier plusieurs conditions dans un seul si déclaration. Vous pouvez le faire en utilisant les opérateurs booléens suivants :
- && – ET logique.
- || – OU logique.
Voici un exemple rapide :
#!/bin/bash
username="andrei"
birthday="12/16"
today=$( date +"%m/%d")
if [ $USER = $username ] && [ $today = $birthday ]
then
echo "Happy birthday\!"
fi
Dans cet exemple simple, nous vérifions que deux conditions sont vraies :
- Le nom d'utilisateur de l'utilisateur connecté doit être égal à andrei.
- La date d'aujourd'hui devrait être le 16 décembre.
Si les deux conditions sont vraies, nous imprimons "'Joyeux anniversaire !"
Déclaration de cas
Dans certaines situations, vous devrez peut-être avoir plus de 3 instructions elif pour archiver votre script. Dans ce cas, l'utilisation d'une instruction elif devient compliquée. Bash vous offre un meilleur moyen de gérer de telles situations en utilisant un case déclaration.
Voici la syntaxe :
case VARIABLE in
VALUE_1)
COMMANDS_FOR_VALUE_1
;;
VALUE_2)
COMMANDS_FOR_VALUE_2
;;
*)
DEFAULT_COMMANDS
;;
esac
Où :
- VARIABLE – la variable dont la valeur sera comparée à VALUE_1 ou VALUE_2 .
- COMMANDS_FOR_VALUE_1 – commandes à exécuter lorsque VARIABLE la valeur est VALUE_1 .
- COMMANDS_FOR_VALUE_2 – commandes à exécuter lorsque VARIABLE la valeur est VALUE_2 .
- DEFAULT_COMMANDS – commandes à exécuter lorsque VARIABLE la valeur n'était pas égale à l'une des conditions supérieures.
- cas , dans , esac – mots-clés de syntaxe.
Voici le modèle très courant pour traiter les entrées du script et démarrer, arrêter ou redémarrer le service en fonction de l'utilisateur saisie :
#!/bin/bash
case $1 in
start)
echo "Starting the service"
;;
stop)
echo "Stopping the service"
;;
restart)
echo "Restarting the service"
;;
*)
echo "Unknown action"
;;
esac
Dans cet exemple, nous vérifions la valeur de la valeur spéciale $1 Variable bash. Il contient le premier argument, fourni à un script. Par exemple, si vous enregistrez l'exemple ci-dessus dans un fichier service.sh et exécutez-le comme ceci :
bash service.sh start
1 $ contiendra le mot "start" comme valeur.
Le reste est géré par la logique de l'instruction case.
Résumé
Dans cet article, nous avons couvert les principes fondamentaux des scripts shell Bash et décrit les constructions logiques les plus largement utilisées, y compris le seul if déclaration, if-else déclaration et elif déclaration.
Nous espérons que vous avez trouvé cet article utile. Si oui, s'il vous plaît, s'il vous plaît, aidez-nous à le diffuser dans le monde !