GNU/Linux >> Linux Esercitazione >  >> Linux

Bash if..else Statement

Questo tutorial ti guiderà attraverso le basi di Bash if Statement e mostrarti come usarlo nei tuoi script di shell.

Il processo decisionale è uno dei concetti fondamentali della programmazione informatica. Come in qualsiasi altro linguaggio di programmazione, if , if..else , if..elif..else e if nidificato le istruzioni in Bash vengono utilizzate per eseguire codice in base a una determinata condizione.

if Dichiarazione #

Bash if i condizionali possono avere forme diverse. Il più semplice if dichiarazione assume la forma seguente:

if TEST-COMMAND
then
  STATEMENTS
fi

Il if l'istruzione inizia con if parola chiave seguita dall'espressione condizionale e da then parola chiave. L'istruzione termina con fi parola chiave.

Se il TEST-COMMAND restituisce True , le STATEMENTS viene giustiziato. Se TEST-COMMAND restituisce False , non succede niente; le STATEMENTS vieni ignorato.

In generale, è buona norma indentare sempre il codice e separare i blocchi di codice con righe vuote. La maggior parte delle persone sceglie di utilizzare il rientro a 4 o 2 spazi. Rientri e righe vuote rendono il tuo codice più leggibile e organizzato.

Diamo un'occhiata al seguente script di esempio che verifica se un determinato numero è maggiore di 10:

#!/bin/bash

echo -n "Enter a number: "
read VAR

if [[ $VAR -gt 10 ]]
then
  echo "The variable is greater than 10."
fi

Salva il codice in un file ed eseguilo dalla riga di comando:

bash test.sh

Lo script ti chiederà di inserire un numero. Se, ad esempio, inserisci 15, il test il comando restituirà true perché 15 è maggiore di 10 e echo comando all'interno di then la clausola verrà eseguita.

The variable is greater than 10.

if..else Dichiarazione #

Il if..else di Bash dichiarazione assume la forma seguente:

if TEST-COMMAND
then
  STATEMENTS1
else
  STATEMENTS2
fi

Se il TEST-COMMAND restituisce True , il STATEMENTS1 sarà eseguito. Altrimenti, se TEST-COMMAND restituisce False , il STATEMENTS2 sarà eseguito. Puoi avere solo un else clausola nella dichiarazione.

Aggiungiamo un else clausola allo script di esempio precedente:

#!/bin/bash

echo -n "Enter a number: "
read VAR

if [[ $VAR -gt 10 ]]
then
  echo "The variable is greater than 10."
else
  echo "The variable is equal or less than 10."
fi

Se esegui il codice e inserisci un numero, lo script stamperà un messaggio diverso a seconda che il numero sia maggiore o minore/uguale a 10.

if..elif..else Dichiarazione #

Il if..elif..else di Bash dichiarazione assume la forma seguente:

if TEST-COMMAND1
then
  STATEMENTS1
elif TEST-COMMAND2
then
  STATEMENTS2
else
  STATEMENTS3
fi

Se il TEST-COMMAND1 restituisce True , il STATEMENTS1 sarà eseguito. Se il TEST-COMMAND2 restituisce True , il STATEMENTS2 sarà eseguito. Se nessuno dei comandi di test restituisce True , il STATEMENTS2 viene eseguito.

Puoi avere uno o più elif clausole nella dichiarazione. Il else la clausola è facoltativa.

Le condizioni vengono valutate in sequenza. Una volta che una condizione restituisce True , le restanti condizioni non vengono eseguite e il controllo del programma si sposta alla fine del if dichiarazioni.

Aggiungiamo un elif clausola allo script precedente:

#!/bin/bash

echo -n "Enter a number: "
read VAR

if [[ $VAR -gt 10 ]]
then
  echo "The variable is greater than 10."
elif [[ $VAR -eq 10 ]]
then
  echo "The variable is equal to 10."
else
  echo "The variable is less than 10."
fi

Nidificato if Dichiarazioni #

Bash ti permette di annidare if dichiarazioni all'interno di if dichiarazioni. Puoi inserire più if istruzioni all'interno di un altro if dichiarazione.

Il seguente script ti chiederà di inserire tre numeri e di stampare il numero più grande tra i tre numeri.

#!/bin/bash

echo -n "Enter the first number: "
read VAR1
echo -n "Enter the second number: "
read VAR2
echo -n "Enter the third number: "
read VAR3

if [[ $VAR1 -ge $VAR2 ]]
then
  if [[ $VAR1 -ge $VAR3 ]]
  then
    echo "$VAR1 is the largest number."
  else
    echo "$VAR3 is the largest number."
  fi
else
  if [[ $VAR2 -ge $VAR3 ]]
  then
    echo "$VAR2 is the largest number."
  else
    echo "$VAR3 is the largest number."
  fi
fi

Ecco come apparirà l'output:

Enter the first number: 4
Enter the second number: 7
Enter the third number: 2
7 is the largest number.
In generale, è più efficiente usare il case statementinvece di if annidato dichiarazioni.

Condizioni multiple #

Il OR logico e AND gli operatori ti consentono di utilizzare più condizioni in if dichiarazioni.

Ecco un'altra versione dello script per stampare il numero più grande tra i tre numeri. In questa versione, invece del if annidato istruzioni, stiamo usando la logica AND (&& ) operatore.

#!/bin/bash

echo -n "Enter the first number: "
read VAR1
echo -n "Enter the second number: "
read VAR2
echo -n "Enter the third number: "
read VAR3

if [[ $VAR1 -ge $VAR2 ]] && [[ $VAR1 -ge $VAR3 ]]
then
  echo "$VAR1 is the largest number."
elif [[ $VAR2 -ge $VAR1 ]] && [[ $VAR2 -ge $VAR3 ]]
then
  echo "$VAR2 is the largest number."
else
  echo "$VAR3 is the largest number."
fi

Operatori di test #

In Bash, il test comando prende una delle seguenti forme di sintassi:

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]

Per rendere lo script portatile, preferisci usare il vecchio test [ comando, disponibile su tutte le shell POSIX. La nuova versione aggiornata del test comando [[ (parentesi doppie) è supportato sulla maggior parte dei sistemi moderni che utilizzano Bash, Zsh e Ksh come shell predefinita.

Per negare l'espressione di test, usa il logico NOT (! ) operatore. Quando si confrontano le stringhe, utilizzare sempre virgolette singole o doppie per evitare problemi di divisione delle parole e globbing.

Di seguito sono riportati alcuni degli operatori più comunemente utilizzati:

  • -n VAR - Vero se la lunghezza di VAR è maggiore di zero.
  • -z VAR - Vero se il VAR è vuoto.
  • STRING1 = STRING2 - Vero se STRING1 e STRING2 sono uguali.
  • STRING1 != STRING2 - Vero se STRING1 e STRING2 non sono uguali.
  • INTEGER1 -eq INTEGER2 - Vero se INTEGER1 e INTEGER2 sono uguali.
  • INTEGER1 -gt INTEGER2 - Vero se INTEGER1 è maggiore di INTEGER2 .
  • INTEGER1 -lt INTEGER2 - Vero se INTEGER1 è minore di INTEGER2 .
  • INTEGER1 -ge INTEGER2 - Vero se INTEGER1 è uguale o maggiore di INTEGER2.
  • INTEGER1 -le INTEGER2 - Vero se INTEGER1 è uguale o minore di INTEGER2 .
  • -h FILE - Vero se il FILE esiste ed è un collegamento simbolico.
  • -r FILE - Vero se il FILE esiste ed è leggibile.
  • -w FILE - Vero se il FILE esiste ed è scrivibile.
  • -x FILE - Vero se il FILE esiste ed è eseguibile.
  • -d FILE - Vero se il FILE esiste ed è una directory.
  • -e FILE - Vero se il FILE esiste ed è un file, indipendentemente dal tipo (nodo, directory, socket, ecc.).
  • -f FILE - Vero se il FILE esiste e è un file normale (non una directory o un dispositivo).

Conclusione #

Il if , if..else e if..elif..else Le istruzioni consentono di controllare il flusso di esecuzione dello script Bash valutando determinate condizioni.

Se hai domande o feedback, sentiti libero di lasciare un commento.


Linux
  1. Come utilizzare l'istruzione if else condizionali nello script Bash

  2. Bash Istruzione If-Else con esempi

  3. 4 Esempi di istruzioni Awk If ( if, if else, if else if, :? )

  4. Bash/sh istruzione 'if else'

  5. C'è un'istruzione goto in bash?

Bash Shebang

Python if..else Istruzione

Bash Scripting – Case Statement

Come lavorare con l'istruzione Case negli script Bash

Bash If Else Sintassi con esempi

Comprendere Bash If Else e altre dichiarazioni condizionali