Ich bin neu in der Bash-Programmierung. Ich habe zwei gute, lange Anleitungen gelesen, aber sie haben in meinem Kopf ein Chaos über Operatoren und Schlüsselwörter verursacht.
Welche sind häufiger und weit verbreitet? Ich weiß nicht, wann ich welche verwenden soll und warum.
test
,[[ ]]
Oder[ ]
oder sogar(( ))
$((exp))
oder$[exp]
-gt
oder>
,ge
oder>=
usw.- wann zu verwenden
<
und>
oder( )
und wann wir es mit\:
\<
\(
etc. entkommen müssen . ==
oder=
(Zeichenfolgenvergleiche)
Ich kenne die grundlegenden Unterschiede zwischen [
und [[
aber andere Fragen sind mir ein Rätsel.
Danke im Voraus
command-line
bash
programming
scripts
MikeD
quelle
quelle
Antworten:
test
ist eine eingebaute Shell, die (offensichtlich) auf eine bestimmte Bedingung prüft. Einige ältere Muscheln benötigen einen speziellen Befehl. So finden Sie auch ein Programm unter/usr/bin/test
.[
ist auch ein Programm zum Testen auf bestimmte Bedingungen. Diese Software benötigt auch eine schließende Klammer und Sie finden sie unter/usr/bin/[
.[[…]]
ist eine Alternative zutest
und[
. Es wurde für die Korn-Shell entwickelt (ksh
). Sie finden es aber auch in Bash-Versionen größer als 2 und in der Z-Shell. Die doppelten Klammern haben einige raffinierte Merkmale:-a
(UND) oder-o
(ODER) können Sie&&
oder verwenden||
.=
können noch viel mehr.((…))
ist äquivalent zulet
. Also im Grunde((expression))
ist das gleiche wielet "expression"
. Jedoch mitlet
Sie können mehr als einen Ausdruck verwenden, aber doppelte Klammern erlauben nur einen Ausdruck.$((…))
(und auch$[…]
) führt einige Berechnungen durch. Ihre Shell versucht, den Ausdruck in geschweiften Klammern zu berechnen, und ersetzt den Ausdruck durch das Ergebnis. Alsoecho $((1+1))
führt zuecho 2
. Ihre Muscheln drucken also die Nummer 2.Jedes Mal , wenn Sie möchten , um zwei Zahlen vergleichen , sollen Sie die Möglichkeit , mit einem Bindestrich und zwei Buchstaben (
-ge
,-lt
etc.). Wenn Sie Zeichenfolgen vergleichen möchten, sollten Sie=
oder verwenden!=
.Ihre Frage bezüglich der Flucht ist ziemlich schwer zu beantworten. Weil es von der Software abhängt, die Sie neben der Shell verwenden. Also dh
grep
undgrep -E
brauche andere Flucht. Dies ist auch der Fall mitsed
,awk
und andere. Die beste Option ist also, einen Blick auf die Manpage zu werfen. Nach einiger Zeit gewöhnt man sich daran und weiß, wann man Flucht benutzt.quelle
if [ 2 -gt 1 ]; …
häufiger vorkommt, da ich dies häufiger in Shell-Skripten sehe und soweit ich weiß, dass dies POSIX-kompatibel ist.