L'espressione Bash è la combinazione di operatori, funzionalità o valori utilizzati per formare un'istruzione condizionale bash. L'espressione condizionale può essere un'espressione binaria o unaria che coinvolge numerici, stringhe o qualsiasi comando il cui stato restituito è zero in caso di esito positivo.
Sono disponibili diverse espressioni condizionali che possono essere utilizzate per testare i file. Di seguito sono riportate alcune espressioni condizionali utili.
- [ -e filepath ] Restituisce true se il file esiste.
- [ -x filepath ] Restituisce true se il file esiste ed è eseguibile.
- [ -S filepath ] Restituisce true se il file esiste ed è un file socket.
- [ espr1 -a espr2 ] Restituisce true se entrambe le espressioni sono vere.
- [ espr1 -o espr2 ] Restituisce vero se una delle espressioni1 o 2 è vera.
Per ulteriori espressioni condizionali per controllare i file, le stringhe ei numeri, fare riferimento alla pagina man di bash.
Esempio Bash 1. Verifica l'esistenza del file
Il seguente frammento di codice dello script della shell Bash ottiene il nome del file con il suo percorso assoluto e controlla se il file esiste o meno e genera le informazioni appropriate.
$ 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
Fare riferimento al nostro articolo precedente per comprendere i vari tipi di istruzione bash if.
Esempio Bash 2. Confronta i numeri
Lo script seguente legge due numeri interi dall'utente e controlla se entrambi i numeri sono uguali o maggiori o minori l'uno dell'altro.
$ 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
Se non conosci bash scripting, fai riferimento al nostro tutorial introduttivo a Bash.
Esempio Bash 3. Calcolatrice aritmetica di base
Questo esempio legge l'input, che è un tipo di operazione aritmetica che si desidera eseguire sulle variabili bash (inp1 e inp2). L'operazione aritmetica può essere addizione, sottrazione o moltiplicazione..
$ 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
Sapere come utilizzare i parametri speciali di bash ( $*, $@, $#, $$, $!, $?, $-, $_ ) renderà la tua vita di scripting facile.
Esempio Bash 4. Leggere e eseguire il ping dell'indirizzo IP
Il seguente script viene utilizzato per leggere l'indirizzo IP e verificare se l'indirizzo IP è raggiungibile e stampa il messaggio appropriato.
$ 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
In questo esempio, -z restituisce true se l'indirizzo IP è di lunghezza zero, Quando la condizione è preceduta da ! (negato), se expression è false, entra in if part ed esegue. Quindi, quando l'indirizzo IP non è nullo, entra e controlla se l'indirizzo IP è raggiungibile.
Esempio Bash 5. Script di installazione
Lo script di installazione della maggior parte dei pacchetti non consentirà di eseguirli come utente root. Lo script controlla l'utente che sta eseguendo e genera l'errore.
Lo script seguente consente di eseguire lo script di installazione di Oracle solo se l'utente che sta eseguendo non è 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
In questo esempio l'output del comando whoami viene confrontato con la parola “root”. Per il confronto di stringhe ==, !=, < e dovrebbe essere usato e per il confronto numerico dovrebbero essere usati eq, ne,lt e gt.
Esempio Bash 6. Parentesi migliorate
In tutti gli esempi precedenti, abbiamo utilizzato solo parentesi singole per racchiudere l'espressione condizionale, ma bash consente parentesi doppie che fungono da versione avanzata della sintassi a parentesi singola.
$ 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"
- [ è sinonimo di comando di prova. Anche se è integrato nella shell, crea un nuovo processo.
- [[ ne è una nuova versione migliorata, che è una parola chiave, non un programma.
- [[ è inteso da Korn e Bash.
- Nell'esempio sopra, se la variabile $str contiene la frase "condizione" in un punto qualsiasi, la condizione è vera.
- Questa è la funzione di globbing della shell, che sarà supportata solo quando usi [[ (parentesi doppie) e quindi molti argomenti non devono essere citati.