BASH — различия между версиями

Материал из megapuper
Перейти к: навигация, поиск
Строка 47: Строка 47:
 
Перенаправить все нормальные ответы в один файл, а все ошибки в другой
 
Перенаправить все нормальные ответы в один файл, а все ошибки в другой
 
  grep <font color=blue>TEXT</font> /etc/* > good.txt 2> errors.txt
 
  grep <font color=blue>TEXT</font> /etc/* > good.txt 2> errors.txt
 +
 +
 +
Перенаправить нормальные ответы и ошибки в один файл
 +
grep <font color=blue>TEXT</font> /etc/* &> all.txt

Версия 17:33, 8 октября 2020

Любой bash скрипт начинается со следующей строки

#!/bin/bash


Переменная $0 - равна имени файла(скрипта). Допустим имя world и скрипт выглядит так

#!/bin/bash
echo "Hello $0"

Запуск скрипта приведёт к выводу на экран

# ./world
Hello world


Все следующие $1, $2 и т.д. переменные, это параметры которые передаём скрипту. Допустим переменные будут vasya, petya.

#!/bin/bash
echo "My $0"
echo 'Privet $1'
echo 'Privet $2'

Результат

# ./script vasya petya
My script
Privet vasya
Privet petya


Стандартные ввод, вывод и ошибка
Существует три стандартных значения ввода и вывода для программ. Ввод получают от клавиатуры (интерактивная, диалоговая программа), или из программы, обрабатывающей вывод другой программы.
Результат программы обычно печатается в стандартной вывод и иногда в файл «STDERR» (ошибка).
Все это три дескриптора файла, которые часто называют STDIN, STDOUT и STDERR.

Но часто к ним обращаются не по имени, а по номеру:
0 — STDIN, 1 — STDOUT и 2 — STDERR
По умолчанию, если не указать номер, то будет подразумеваться STDOUT.


В следующем примере

cron job command > /dev/null 2>&1

видно, что команда направляет свой стандартный вывод в /dev/null (псевдоустройство, которое может принять произвольный объём данных, не сохраняя их совершенно нигде, следовательно, подавив стандартный вывод).
Затем все ошибки (то есть STDERR) перенаправляет в стандартный вывод. Перед номером потока, в который перенаправляем вывод, необходимо указывать амперсанд "&"


Перенаправить все ошибки в файл

cron job command 2> errors.txt


Перенаправить все нормальные ответы в один файл, а все ошибки в другой

grep TEXT /etc/* > good.txt 2> errors.txt


Перенаправить нормальные ответы и ошибки в один файл

grep TEXT /etc/* &> all.txt