Was ist der Unterschied zwischen "elif" und "else if" beim Shell-Scripting?

20887
Zeena Pinto

Ich bin sehr neu im Shell-Scripting.

Wenn ich mir einen Code anschaue, der für ksh ( #!/bin/ksh) geschrieben wurde, wird in einem Skript else ifso gut wie elifalles verwendet.

Was ist also der Unterschied zwischen else ifund elifbeim Shell-Scripting?

4
Was sagt die erste Zeile des Skripts? So etwas wie "#! / Bin / bash" Paul vor 9 Jahren 2
Es heißt #! / Bin / ksh Zeena Pinto vor 9 Jahren 0
Bitte geben Sie die Shell ** in Ihrer Frage ** und ** mit einem Tag ** an. Es gibt viele Shells, und alle haben eine leicht (oder radikal) unterschiedliche Syntax. ghoti vor 9 Jahren 0
Ich denke, Sie wollen [bearbeiten] und Beispielcode hinzufügen. ksh unterstützt "if", "else" und "elif", aber "else if" ist ungewöhnlich. Paul vor 9 Jahren 1
Verschachtelung `else if` startet eine andere Ebene und mehr Komplexität. Sie möchten Komplexität vermeiden. Henk Langeveld vor 9 Jahren 0
OK. Vielen Dank für diesen Vorschlag Zeena Pinto vor 9 Jahren 0

1 Antwort auf die Frage

5
mpy

Ich versuche, eine Antwort in einem Satz zusammen : Wenn Sie elifSich mit einer if-Klausel, wenn Sie verwenden, else ifmit zwei if-Klauseln .

Schauen Sie sich diese einfachen Beispiele an:

testone() { if [[ $CASE == 1 ]]; then echo Case 1. elif [[ $CASE == 2 ]]; then echo Case 2. else  echo Unknown case. fi } 

Dies ist formal (eine feste Einsicht macht manchmal Sinn) eine if-Klausel, da sich jeder Fall auf derselben Hierarchieebene befindet.

Nun die gleiche Funktion mit else if:

testtwo() { if [[ $CASE == 1 ]]; then echo Case 1. else if [[ $CASE == 2 ]]; then echo Case 2. else  echo Unknown case. fi fi } 

Sie haben formal zwei kaskadierte If-Klauseln und dementsprechend zwei abschließende fiAnweisungen. Bitte beachten Sie, dass es hier keinen Unterschied macht, ob ich else ifin einer Zeile schreibe (wie in Ihrer Frage) oder in zwei Zeilen (wie in meinem Beispiel).

Meine Vermutung, warum beide Formulare im selben Skript verwendet werden: Wenn Sie bereits eine vollständige If-Klausel geschrieben haben, die jedoch aus logischen Gründen in eine vorhandene If-Klausel kopiert / ausgeschnitten und in eine vorhandene If-Klausel eingefügt werden muss, landen Sie bei else if. Wenn Sie jedoch die vollständige if-Klausel von Grund auf neu schreiben, verwenden Sie wahrscheinlich das einfach zu lesende IMHO-Formular elif.