L'expression bash est la combinaison d'opérateurs, de fonctionnalités ou de valeurs utilisées pour former une instruction conditionnelle bash. L'expression conditionnelle peut être une expression binaire ou unaire qui implique des commandes numériques, de chaîne ou toute autre commande dont le statut de retour est zéro en cas de succès.
Plusieurs expressions conditionnelles peuvent être utilisées pour tester les fichiers. Voici quelques expressions conditionnelles utiles.
- [ -e filepath ] Renvoie vrai si le fichier existe.
- [ -x filepath ] Renvoie true si le fichier existe et est exécutable.
- [ -S filepath ] Renvoie true si le fichier existe et s'il s'agit d'un fichier socket.
- [ expr1 -a expr2 ] Renvoie vrai si les deux expressions sont vraies.
- [ expr1 -o expr2 ] Renvoie vrai si l'expression 1 ou 2 est vraie.
Pour plus d'expressions conditionnelles pour vérifier les fichiers, les chaînes et les chiffres, veuillez consulter la page de manuel bash.
Exemple Bash 1. Vérifier l'existence du fichier
L'extrait de code de script shell Bash suivant obtient le nom de fichier avec son chemin absolu, vérifie si le fichier existe ou non et renvoie les informations appropriées.
$ cat exist.sh #! /bin/bash file=$1 if [ -e $file ] then echo -e "File $file exists" else echo -e "File $file doesnt exists" fi $ ./exist.sh /usr/bin/boot.ini File /usr/bin/boot.ini exists
Reportez-vous à notre article précédent pour comprendre les différents types d'instructions bash if.
Exemple de bash 2. Comparer des nombres
Le script ci-dessous lit deux nombres entiers de l'utilisateur et vérifie si les deux nombres sont égaux ou supérieurs ou inférieurs l'un à l'autre.
$ cat numbers.sh #!/bin/bash echo "Please enter first number" read first echo "Please enter second number" read second if [ $first -eq 0 ] && [ $second -eq 0 ] then echo "Num1 and Num2 are zero" elif [ $first -eq $second ] then echo "Both Values are equal" elif [ $first -gt $second ] then echo "$first is greater than $second" else echo "$first is lesser than $second" fi $ ./numbers.sh Please enter first number 1 Please enter second number 1 Both Values are equal $ ./numbers.sh Please enter first number 3 Please enter second number 12 3 is lesser than 12
Si vous débutez avec les scripts bash, reportez-vous à notre didacticiel d'introduction à Bash.
Bash Exemple 3. Calculatrice arithmétique de base
Cet exemple lit l'entrée, qui est un type d'opération arithmétique que l'on souhaite effectuer sur les variables bash (inp1 et inp2). L'opération arithmétique peut être une addition, une soustraction ou une multiplication..
$ cat calculator.sh #!/bin/bash inp1=12 inp2=11 echo "1. Addition" echo "2. Subtraction" echo "3. Multiplication" echo -n "Please choose a word [1,2 or 3]? " read oper if [ $oper -eq 1 ] then echo "Addition Result " $(($inp1 + $inp2)) else if [ $oper -eq 2 ] then echo "Subtraction Result " $(($inp1 - $inp2)) else if [ $oper -eq 3 ] then echo "Multiplication Result " $(($inp1 * $inp2)) else echo "Invalid input" fi fi fi $ ./calculator.sh 1. Addition 2. Subtraction 3. Multiplication Please choose a word [1,2 or 3]? 4 Invalid input
Savoir utiliser les paramètres spéciaux bash ( $*, $@, $#, $$, $!, $?, $-, $_ ) facilitera votre travail de script.
Bash Exemple 4. Lire et pinger l'adresse IP
Le script suivant est utilisé pour lire l'adresse IP et vérifier si l'adresse IP est accessible, et imprime le message approprié.
$ cat ipaddr.sh #!/bin/bash echo "Enter the Ipaddress" read ip if [ ! -z $ip ] then ping -c 1 $ip if [ $? -eq 0 ] ; then echo "Machine is giving ping response" else echo "Machine is not pinging" fi else echo "IP Address is empty" fi $ ./ipaddr.sh Enter the Ipaddress 10.176.191.106 Pinging 10.176.191.106 with 32 bytes of data: Reply from 10.176.191.106: bytes=32 time<1ms TTL=128 Ping statistics for 10.176.191.106: Packets: Sent = 1, Received = 1, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms Machine is giving ping response
Dans cet exemple, -z renvoie vrai si l'adresse IP est de longueur nulle, lorsque la condition est précédée de ! (négation) opérateur, si l'expression est fausse, elle entre dans si partie et s'exécute. Ainsi, lorsque l'adresse IP n'est pas nulle, il entre et vérifie si l'adresse IP est accessible.
Exemple de bash 5. Script d'installation
Le script d'installation de la plupart des packages ne permettra pas de les exécuter en tant qu'utilisateur root. Le script vérifie l'utilisateur qui exécute et renvoie l'erreur.
Le script suivant vous permet d'exécuter le script d'installation Oracle uniquement si l'utilisateur qui exécute n'est pas root.
$ cat preinstaller.sh #!/bin/bash if [ `whoami` != 'root' ]; then echo "Executing the installer script" ./home/oracle/databases/runInstaller.sh else echo "Root is not allowed to execute the installer script" fi Executing the script as a root user, # ./preinstaller.sh Root is not allowed to execute the installer script
Dans cet exemple, la sortie de la commande whoami est comparée au mot « root ». Pour la comparaison de chaînes ==, !=, < et doivent être utilisés et pour la comparaison numérique eq, ne, lt et gt doivent être utilisés.
Bash Exemple 6. Parenthèses améliorées
Dans tous les exemples ci-dessus, nous n'avons utilisé que des crochets simples pour entourer l'expression conditionnelle, mais bash autorise les doubles crochets qui servent de version améliorée de la syntaxe à crochet unique.
$ cat enhanced.sh #!/bin/bash echo "Enter the string" read str if [[ $str == *condition* ]] then echo "String "$str has the word \"condition\" fi $ ./enhanced.sh Enter the string conditionalstatement String conditionalstatement has the word "condition"
- [ est un synonyme de commande de test. Même s'il est intégré au shell, il crée un nouveau processus.
- [[ en est une nouvelle version améliorée, qui est un mot-clé, pas un programme.
- [[ est compris par Korn et Bash.
- Dans l'exemple ci-dessus, si la variable $str contient la phrase "condition" n'importe où, la condition est vraie.
- Il s'agit de la fonctionnalité de globalisation du shell, qui ne sera prise en charge que lorsque vous utilisez [[ (double crochets) et par conséquent, de nombreux arguments n'ont pas besoin d'être entre guillemets.