Come eseguire un’operazione OR logica in Shell Scripting

Sto provando a fare un semplice controllo delle condizioni, ma non sembra funzionare.

Se $# è uguale a 0 o è maggiore di 1 allora dì ciao.

Ho provato la seguente syntax senza successo:

 if [ "$#" == 0 -o "$#" > 1 ] ; then echo "hello" fi if [ "$#" == 0 ] || [ "$#" > 1 ] ; then echo "hello" fi 

Questo dovrebbe funzionare:

 #!/bin/bash if [ "$#" -eq 0 ] || [ "$#" -gt 1 ] ; then echo "hello" fi 

Non sono sicuro se questo è diverso nelle altre shell, ma se si desidera utilizzare <,>, è necessario inserirle all’interno di una doppia parentesi in questo modo:

 if (("$#" > 1)) ... 

Questo codice funziona per me:

 #!/bin/sh argc=$# echo $argc if [ $argc -eq 0 -o $argc -eq 1 ]; then echo "foo" else echo "bar" fi 

Non credo che sh supporti “==”. Usa “=” per confrontare stringhe e -eq per confrontare gli interi.

 man test 

per ulteriori dettagli.

Se stai usando lo stato del codice di uscita bash $? come variabile, è meglio farlo:

 if [ $? -eq 4 -o $? -eq 8 ] ; then echo "..." fi 

Perché se lo fai:

 if [ $? -eq 4 ] || [ $? -eq 8 ] ; then 

La parte sinistra dell’OR modifica il $? variabile, quindi la parte destra dell’OR non ha l’originale $? valore.

A volte è necessario utilizzare parentesi doppie, altrimenti si ottiene un errore come troppi argomenti

 if [[ $OUTMERGE == *"fatal"* ]] || [[ $OUTMERGE == *"Aborting"* ]] then fi 

hai provato qualcosa del genere:

 if [ $# -eq 0 ] || [ $# -gt 1 ] then echo "$#" fi 

Da Bash Manuale di riferimento → 3.4.2 Parametri speciali

#
($ #) Si espande al numero di parametri posizionali in decimale.

Pertanto, $# sarà sempre 0 o un numero intero più grande.

Quindi se vuoi fare qualcosa ogni volta che $# è 0 o più grande di 1, devi solo controllare se $# è o non è 1 :

 [ $# -eq 1 ] && echo "1 positional param" || echo "0 or more than 1" 

Questo usa la syntax:

 [ condition ] && {things if true} || {things if false} 

Se uno script bash

 If [[ $input -gt number || $input -lt number ]] then echo ......... else echo ......... fi exit