593 Stimmen

Wie führt man eine logische ODER-Verknüpfung für einen Ganzzahlvergleich in Shell-Skripten durch?

Ich versuche, eine einfache Bedingungsprüfung durchzuführen, aber es scheint nicht zu funktionieren.

Si $# ist gleich 0 oder größer ist als 1 dann sagen Sie hallo.

Ich habe die folgende Syntax ausprobiert, ohne Erfolg:

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

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

0 Stimmen

Für mich funktionieren beide. Haben Sie eine Shell in der Datei . Linie?

1 Stimmen

@Jason Ich habe die Shebang-Zeile tatsächlich vergessen, aber ich habe es gerade damit getestet und es hat nicht funktioniert.

27 Stimmen

> ist die Umleitung der Ausgabe in sh/bash. Jetzt haben Sie wahrscheinlich eine Datei namens 1 .

8voto

John Boker Punkte 80493

Haben Sie so etwas schon einmal ausprobiert:

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

6voto

fedorqui Punkte 249453

Von Bash-Referenzhandbuch 3.4.2 Spezielle Parameter

#
($#) Erweitert um die Anzahl der Positionsparameter in Dezimalzahlen.

Deshalb, $# ist immer entweder 0 oder eine größere ganze Zahl.

Wenn Sie also etwas tun wollen, wann immer $# entweder 0 oder größer als 1 ist, muss man nur prüfen, ob $# ist oder nicht ist 1 :

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

Dabei wird die Syntax verwendet:

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

1voto

Ravi Tyagi Punkte 147

Und in Bash

 line1=`tail -3 /opt/Scripts/wowzaDataSync.log | grep "AmazonHttpClient" | head -1`
 vpid=`ps -ef|  grep wowzaDataSync | grep -v grep  | awk '{print $2}'`
 echo "-------->"${line1}
    if [ -z $line1 ] && [ ! -z $vpid ]
    then
            echo `date --date "NOW" +%Y-%m-%d` `date --date "NOW" +%H:%M:%S` :: 
            "Process Is Working Fine"
    else
            echo `date --date "NOW" +%Y-%m-%d` `date --date "NOW" +%H:%M:%S` :: 
            "Prcess Hanging Due To Exception With PID :"${pid}
   fi

OR in Bash

line1=`tail -3 /opt/Scripts/wowzaDataSync.log | grep "AmazonHttpClient" | head -1`
vpid=`ps -ef|  grep wowzaDataSync | grep -v grep  | awk '{print $2}'`
echo "-------->"${line1}
   if [ -z $line1 ] || [ ! -z $vpid ]
    then
            echo `date --date "NOW" +%Y-%m-%d` `date --date "NOW" +%H:%M:%S` :: 
            "Process Is Working Fine"
    else
            echo `date --date "NOW" +%Y-%m-%d` `date --date "NOW" +%H:%M:%S` :: 
            "Prcess Hanging Due To Exception With PID :"${pid}
  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