Als Teil dieses Skripts muss ich prüfen können, ob das erste angegebene Argument mit dem ersten Wort der Datei übereinstimmt. Wenn dies der Fall ist, mit einer Fehlermeldung beenden; Wenn dies nicht der Fall ist, hängen Sie die Argumente an die Datei an. Ich verstehe, wie man if
schreibt -Anweisung, aber nicht, wie man grep
verwendet innerhalb eines Skripts. Ich verstehe das grep
wird in etwa so aussehen
grep ^$1 schemas.txt
Ich habe das Gefühl, dass dies viel einfacher sein sollte, als ich es mache.
Ich erhalte einen Fehler „zu viele Argumente“ bei if
Erklärung. Ich habe das Leerzeichen zwischen grep -q
entfernt und bekam dann einen Fehler binärer Operator erwartet.
if [ grep -q ^$1 schemas.txt ]
then
echo "Schema already exists. Please try again"
exit 1
else
echo "[email protected]" >> schemas.txt
fi
Akzeptierte Antwort:
grep
gibt einen anderen Exit-Code zurück, wenn es etwas gefunden hat (Null) oder wenn es nichts gefunden hat (Nicht-Null). In einem if
-Anweisung wird ein Null-Exit-Code auf „true“ und ein Nicht-Null-Exit-Code auf „false“ abgebildet. Außerdem hat grep ein -q
Argument, um den übereinstimmenden Text nicht auszugeben (sondern nur den Exit-Statuscode zurückzugeben)
Sie können grep also folgendermaßen verwenden:
if grep -q PATTERN file.txt; then
echo found
else
echo not found
fi
Als kurze Anmerkung, wenn Sie so etwas wie if [ -z "$var" ]…
tun , stellt sich heraus, dass [
ist eigentlich ein Befehl, den Sie ausführen, genau wie grep. Auf meinem System ist es /usr/bin/[
. (Nun, technisch gesehen hat Ihre Shell es wahrscheinlich eingebaut, aber das ist eine Optimierung. Es verhält sich, als wäre es ein Befehl). Es funktioniert genauso, [
gibt einen Null-Exit-Code für „true“ und einen Nicht-Null-Exit-Code für „false“ zurück. (test
ist dasselbe wie [
, mit Ausnahme des schließenden ]
)