Bash
Kette von Befehlen und Operationen
Suche…
Einführung
Es gibt einige Möglichkeiten, Befehle miteinander zu verketten. Einfache wie nur ein; oder komplexere wie logische Ketten, die abhängig von bestimmten Bedingungen ablaufen. Der dritte ist das Piping-Kommando, das die Ausgabedaten effektiv an den nächsten Befehl in der Kette übergibt.
Zählen eines Textmustervorfalls
Durch die Verwendung einer Pipe wird die Ausgabe eines Befehls zur Eingabe des nächsten Befehls.
ls -1 | grep -c ".conf"
In diesem Fall wird der Ausgang des Befehls ls als Eingabe für den Befehl grep verwendet. Das Ergebnis ist die Anzahl der Dateien, in deren Namen ".conf" enthalten ist.
Dies kann verwendet werden, um Ketten nachfolgender Befehle so lange wie nötig zusammenzusetzen:
ls -1 | grep ".conf" | grep -c .
Übertragen Sie die root-cmd-Ausgabe in die Benutzerdatei
Oft möchte man das Ergebnis eines von root ausgeführten Befehls anderen Benutzern zeigen. Der tee- Befehl ermöglicht das einfache Schreiben einer Datei mit Benutzerlizenzen aus einem Befehl, der als root ausgeführt wird:
su -c ifconfig | tee ~/results-of-ifconfig.txt
Nur ifconfig wird als root ausgeführt.
logische Verkettung von Befehlen mit && und ||
&& fasst zwei Befehle zusammen. Der zweite läuft nur, wenn der erste erfolgreich beendet wird. || kettet zwei Befehle. Der zweite läuft jedoch nur, wenn der erste mit einem Fehler beendet wird.
[ a = b ] && echo "yes" || echo "no"
# if you want to run more commands within a logical chain, use curly braces
# which designate a block of commands
# They do need a ; before closing bracket so bash can diffentiate from other uses
# of curly braces
[ a = b ] && { echo "let me see."
echo "hmmm, yes, i think it is true" ; } \
|| { echo "as i am in the negation i think "
echo "this is false. a is a not b." ; }
# mind the use of line continuation sign \
# only needed to chain yes block with || ....
serielle Verkettung von Befehlen mit Semikolon
Ein Semikolon trennt nur zwei Befehle.
echo "i am first" ; echo "i am second" ; echo " i am third"
Verkettung von Befehlen mit |
Die | nimmt die Ausgabe des linken Befehls und leitet sie als Eingabe an den rechten Befehl weiter. Beachten Sie, dass dies in einer Subshell geschieht. Daher können Sie keine vars-Werte des aufrufenden Prozesses in einer Pipe festlegen.
find . -type f -a -iname '*.mp3' | \
while read filename; do
mute --noise "$filename"
done