Bash
Łańcuch poleceń i operacji
Szukaj…
Wprowadzenie
Istnieje kilka sposobów łączenia poleceń. Proste takie jak tylko; lub bardziej złożone, takie jak łańcuchy logiczne, które działają w zależności od pewnych warunków. Trzeci to polecenia potokowe, które skutecznie przekazują dane wyjściowe do następnego polecenia w łańcuchu.
Liczenie występowania wzoru tekstu
Użycie potoku powoduje, że wyjście polecenia staje się wejściem następnego.
ls -1 | grep -c ".conf"
W takim przypadku wyjście polecenia ls jest używane jako dane wejściowe polecenia grep. Wynikiem będzie liczba plików, które zawierają „.conf” w nazwie.
Można to wykorzystać do tworzenia łańcuchów kolejnych poleceń tak długo, jak to konieczne:
ls -1 | grep ".conf" | grep -c .
przenieś wyjściowy plik cmd do pliku użytkownika
Często chce się pokazać wynik polecenia wykonywanego przez root innym użytkownikom. Polecenie tee pozwala łatwo napisać plik z uprawnieniami użytkownika z polecenia działającego jako root:
su -c ifconfig | tee ~/results-of-ifconfig.txt
Tylko jeśli ifconfig działa jako root.
logiczne łączenie łańcuchów poleceń za pomocą && i ||
&& łączy dwa polecenia. Drugi działa tylko wtedy, gdy pierwszy zakończy się sukcesem. || łączy dwa polecenia. Ale drugi działa tylko wtedy, gdy pierwszy kończy się niepowodzeniem.
[ 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 || ....
szeregowe łączenie poleceń średnikiem
Średnik oddziela tylko dwa polecenia.
echo "i am first" ; echo "i am second" ; echo " i am third"
łączenie poleceń za pomocą |
The | pobiera dane wyjściowe lewego polecenia i potokuje je jako dane wejściowe prawego polecenia. Pamiętaj, że odbywa się to w podpowłoce. Dlatego nie można ustawiać wartości zmiennych procesu wywołującego za pomocą potoku.
find . -type f -a -iname '*.mp3' | \
while read filename; do
mute --noise "$filename"
done