409 Stimmen

Wie lassen sich mehrere Bedingungen in einer Shell-If-Anweisung darstellen?

Ich möchte mehrere Bedingungen wie folgt darstellen:

if [ ( $g -eq 1 -a "$c" = "123" ) -o ( $g -eq 2 -a "$c" = "456" ) ]   
then  
    echo abc;  
else  
    echo efg;   
fi  

aber wenn ich das Skript ausführe, zeigt es

Syntaxfehler in Zeile 15: `[' unerwartet,

wobei Zeile 15 diejenige ist, die das "if ...." anzeigt.

Was ist falsch an dieser Bedingung? Ich denke, dass etwas mit den () nicht stimmt.

9 Stimmen

Sie fragen nicht nach Shell-Bedingungen, sondern nach Test-Bedingungen. Der gesamte Ausdruck in Ihrem Beispiel wird von test ([) und nicht von der Shell ausgewertet. Die Shell bewertet nur den Exit-Status von [.

0 Stimmen

0 Stimmen

6voto

ghostdog74 Punkte 305138
g=3
c=133
([ "$g$c" = "1123" ] || [ "$g$c" = "2456" ]) && echo "abc" || echo "efg"

Ausgabe:

efg

g=1
c=123
([ "$g$c" = "1123" ] || [ "$g$c" = "2456" ]) && echo "abc" || echo "efg"

Ausgabe:

abc

5 Stimmen

Das ist eine nutzlose Subshell. { ;} könnte stattdessen verwendet werden.

0voto

#!/bin/bash

current_usage=$( df -h | grep 'gfsvg-gfslv' | awk {'print $5'} )
echo $current_usage
critical_usage=6%
warning_usage=3%

if [[ ${current_usage%?} -lt ${warning_usage%?} ]]; then
echo OK current usage is $current_usage
elif [[ ${current_usage%?} -ge ${warning_usage%?} ]] && [[ ${current_usage%?} -lt ${critical_usage%?} ]]; then
echo Warnung $current_usage
else
echo Kritisch $current_usage
fi

5 Stimmen

Willkommen bei Stack Overflow! Diese Frage sucht nach einer Erklärung, nicht nur nach funktionierendem Code. Ihre Antwort bietet keine Einblicke für den Fragesteller und könnte gelöscht werden. Bitte bearbeiten, um zu erklären, was die beobachteten Symptome verursacht.

-2voto

Yordan Georgiev Punkte 4516

Sie können auch mehr als zwei Bedingungen verketten:

if [ \( "$1" = '--usage' \) -o \( "$1" = '' \) -o \( "$1" = '--help' \) ]
then
   printf "\033[2J";printf "\033[0;0H"
   cat << EOF_PRINT_USAGE

   $0 - Zweck: Einfügen von http json-Daten in die Postgres-Datenbank

   BEISPIEL FÜR DIE VERWENDUNG:

   $0 -a foo -a bar

EOF_PRINT_USAGE
   exit 1
fi

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X