| - оператор трубы. Из этого man sh:
Конвейер - это последовательность из одной или нескольких команд, разделенных символом |. Стандартный вывод каждой команды, кроме последней, соединен трубой (2) со стандартным входом следующей команды. Каждая команда запускается как отдельный процесс; оболочка ждет завершения последней команды. Значение конвейера - это статус выхода его последней команды.A | B | C
Будет принимать стандартный вывод A (то, что он печатает на экране), и передать его в качестве стандартного ввода, например, то, что вы вводите в интерактивном режиме, а B дает свое начало C.
history | grep word
history печатает всю историю вашей оболочки, а grep печатает строки, соответствующие шаблону, поэтому это находит каждую запись в истории вашей оболочки, в которой вы использовали word, потому что grep читает STDIN, если в качестве аргумента не указано имя файла.
history | tail -n10 | head -n5
Получает первые 5 строк из последних 10 строк из history, потому что tail и head оба читаются STDIN, когда имя файла не указано.
С другой стороны, || является логическим оператором OR, который точно эквивалентен тому же оператору на языках C и C. Опять же, из этого man sh:
Конвейер - это последовательность из одной или нескольких команд, разделенных символом |. Стандартный вывод каждой команды, кроме последней, соединен трубой (2) со стандартным входом следующей команды. Каждая команда запускается как отдельный процесс; оболочка ждет завершения последней команды. Значение конвейера - это статус выхода его последней команды.
stat filename || echo "no such file or directory"
stat filename && echo "file exists"
Символы & amp; & amp; и || соответственно, приводят к тому, что следующий список должен выполняться только в том случае, если предыдущий конвейер возвращает нулевое или ненулевое значение соответственно. Новые строки могут отображаться в списке, а не в точках с запятой, для разграничения команд.
Если stat не находит имя файла, он возвращает ненулевой статус выхода, и если он это делает, он успешно завершается с 0 Это обратное к C. (Очень надуманные примеры, как stat, дают такую информацию в любом случае.)
stat filename
if [ $? -gt 0 ]; then
echo "no such file or directory"
fi
Они по существу такие же, как и короткие, чем проверка состояния выхода последней команды явно :