Bash
Цепь команд и операций
Поиск…
Вступление
Есть несколько способов объединить команды вместе. Простые, как просто; или более сложные, такие как логические цепи, которые работают в зависимости от некоторых условий. Третий - это команды трубопроводов, которые эффективно передают выходные данные следующей команде в цепочке.
Подсчет текста
Использование канала делает вывод команды входным для следующего.
ls -1 | grep -c ".conf"
В этом случае вывод команды ls используется как вход команды grep. Результатом будет количество файлов, содержащих «.conf» в их имени.
Это можно использовать для конструирования цепочек последующих команд до тех пор, пока это необходимо:
ls -1 | grep ".conf" | grep -c .
передать выходной файл cmd в файл пользователя
Часто хочется показать результат команды, выполняемой root для других пользователей. Команда tee позволяет легко записывать файл с пользовательским perms из команды, выполняемой с правами root:
su -c ifconfig | tee ~/results-of-ifconfig.txt
Только ifconfig работает от имени root.
логическая цепочка команд с && и ||
&& объединяет две команды. Второй работает только в том случае, если первый из них успешно завершает работу. || цепи две команды. Но второй работает только в том случае, если первый из них выходит с ошибкой.
[ 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 || ....
последовательная цепочка команд с точкой с запятой
Точка с запятой разделяет только две команды.
echo "i am first" ; echo "i am second" ; echo " i am third"
команды цепочки с |
| выводит результат левой команды и передает его в качестве входной правой команды. Разумеется, это делается в подоболочке. Следовательно, вы не можете устанавливать значения варов вызывающего процесса с трубой.
find . -type f -a -iname '*.mp3' | \
while read filename; do
mute --noise "$filename"
done