2017-05-24 7 views
-2

Ich versuche, einen gleichen Code zu laufen, der in Unix, aber nicht in Linux gut funktioniert.
Beispielcode:
wenn ["$ 1" -eq ""] dann echo "Kein Parameter übergeben! Bitte übergeben Sie die Anzahl der Zeilen in die Warteschlange eingereiht." exit 1 fi echo "Parameter ist $ 1";Wenn Bedingung in Unix und Linux env

auf Linux-Umgebung
Wenn i /tmp/script.sh sh laufen es wirft Fehler /tmp/script.sh: Zeile 1: [:: integer Ausdruck erwartet Parameter
ist wenn i sh laufen /tmp/script.sh 100 es einen Fehler /tmp/script.sh thows: Zeile 1: [:: integer Ausdruck erwartet Parameter 100

auf Unix-Umgebung
Wenn ich sh /tmp/script.sh laufen, sagt es keine Parameter übergeben! Bitte übergeben Sie die Anzahl der Zeilen, die in die Warteschlange gestellt werden sollen.
Wenn ich sh laufen /tmp/script.sh 100 es sagt Parameter ist 100.
Wenn ich sh laufen /tmp/script.sh ABCD es sagt kein Parameter übergeben! Bitte übergeben Sie die Anzahl der Zeilen, die in die Warteschlange gestellt werden sollen.

Kann mir jemand erklären, warum verhält es sich anders? Ich dachte, diese Art von Funktionalitäten sollte nicht von der Umgebung abhängen.

+0

Typ 'man test'. Suche nach '-eq'. –

+0

Ich ersetzte, wenn ["$ 1" -eq ""] mit if [["$ 1" -eq ""]] in Linux und es funktionierte. Ich frage mich immer noch wie und warum. –

+0

Es sieht aus wie das, was Sie in der Beschreibung von '-eq' gefunden haben, ist nicht identisch mit dem, was ich gefunden habe. Ich frage mich, was deine Version sagt. –

Antwort

0

-eq tut numerische Vergleich. Sie möchten = (einzelnes Gleichheitszeichen) für Zeichenfolgenvergleiche. Weitere Informationen finden Sie unter arithmetic expressions.

+0

Ich bin nur verwirrt, wenn ["$ 1" -eq ""] Anweisung auf Unix funktioniert, aber nicht auf Linux. Ich habe die Shell und ihre ksh auf beiden env überprüft, –