Bash
Keten van opdrachten en bewerkingen
Zoeken…
Invoering
Er zijn enkele manieren om commando's aan elkaar te koppelen. Eenvoudige zoals slechts een; of meer complexe zoals logische ketens die lopen afhankelijk van sommige voorwaarden. De derde is piping-opdrachten, die de uitvoergegevens effectief overdragen aan de volgende opdracht in de keten.
Het aantal tekstpatronen tellen
Als u een pijp gebruikt, wordt de uitvoer van een opdracht de invoer van de volgende.
ls -1 | grep -c ".conf"
In dit geval wordt de uitvoer van de opdracht ls gebruikt als de invoer van de opdracht grep. Het resultaat is het aantal bestanden met ".conf" in hun naam.
Dit kan worden gebruikt om ketens van opeenvolgende opdrachten zo lang als nodig te construeren:
ls -1 | grep ".conf" | grep -c .
overdracht root cmd-uitvoer naar gebruikersbestand
Vaak wil men het resultaat van een door root uitgevoerde opdracht aan andere gebruikers tonen. Met de tee- opdracht kunt u eenvoudig een bestand met gebruikersmachtigingen schrijven van een opdracht die als root wordt uitgevoerd:
su -c ifconfig | tee ~/results-of-ifconfig.txt
Alleen ifconfig wordt als root uitgevoerd.
logische koppeling van opdrachten met && en ||
&& ketent twee commando's. De tweede wordt alleen uitgevoerd als de eerste met succes wordt afgesloten. || ketent twee commando's. Maar de tweede wordt alleen uitgevoerd als de eerste met mislukking wordt afgesloten.
[ 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 || ....
seriële koppeling van opdrachten met puntkomma
Een puntkomma scheidt slechts twee opdrachten.
echo "i am first" ; echo "i am second" ; echo " i am third"
kettingcommando's met |
De | neemt de uitvoer van het linker commando en stuurt het als invoer het rechter commando. Let op, dit gebeurt in een subshell. Daarom kunt u geen waarden instellen voor vars van het aanroepende proces met een pipe.
find . -type f -a -iname '*.mp3' | \
while read filename; do
mute --noise "$filename"
done