webentwicklung-frage-antwort-db.com.de

Was ist wenn [[?] -ne]]; meinen in .ksh

Ich habe einen folgenden Code, der besagt, dass, wenn alles ausgeführt wird, eine E-Mail an eine Person gesendet wird, wenn die E-Mail an die Person mit einer Fehlermeldung fehlschlägt. 

if [[ $? -ne 0 ]]; then
  mailx -s" could not PreProcess files" [email protected]
else            
  mailx -s" PreProcessed files" [email protected]
fi
done

Ich bin neu in Linux-Codierung. Ich möchte verstehen, was if [[ $? -ne 0 ]]; bedeutet 

10
Rahul sawant

Kurz gesagt, einfache Begriffe:

[[ and ]]

... bedeutet, dass ein Test auf Wahrhaftigkeit gemacht wird.

$?

... ist eine Variable, die den Exit-Code des letzten Ausführungsbefehls enthält.

-ne 0

... prüft, ob die Sache links ($?) "ungleich" bis "Null" ist. In UNIX war ein Befehl, der mit Null beendet wird, erfolgreich, während ein Exit mit einem anderen Wert (1, 2, 3 ... bis zu 255) fehlgeschlagen ist.

13
bishop
if [[ $? -ne 0 ]]; 

Überprüft den Rückgabewert der unmittelbar vorhergehenden if-Bedingung.

  • $? bedeutet Rückkehrcode
  • $? -ne 0 bedeutet, dass der vorherige Befehl einen Fehler zurückgegeben hat, da 0 als Erfolg betrachtet wird
5
anubhava

Wenn der vorherige Befehl einen Fehler zurückgegeben hat. 

0
Claudio

Das Snippet ist vermutlich Teil eines Codes, der ungefähr so ​​aussieht:

 for var in list of words; do
   cmd $var
   if [[ $? -ne 0 ]]; then
      mailx -s" could not PreProcess files" [email protected]
    else            
      mailx -s" PreProcessed files" [email protected]
   fi
 done

Was könnte (und sollte) einfacher geschrieben werden als:

for var in list of words; do
  if ! cmd $var; then
    message="could not PreProcess files"
  else
    message="PreProcessed files
  fi
  mailx -s" $message" [email protected]
done

Die [[ $? -ne 0 ]]-Klausel ist eine hackige Methode, um den Rückgabewert von cmd zu überprüfen. Es ist jedoch fast immer nicht erforderlich, $? explizit zu überprüfen. Code ist fast immer sauberer, wenn Sie der Shell die Überprüfung durch Aufrufen des Befehls in der if-Klausel überlassen. 

0
William Pursell