BASH — различия между версиями
Root (обсуждение | вклад) |
Root (обсуждение | вклад) |
||
| Строка 25: | Строка 25: | ||
| − | '''Цикл | + | '''Цикл if''' |
#!/bin/bash | #!/bin/bash | ||
Версия 23:05, 16 ноября 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
Цикл if
#!/bin/bash if [ "$1" == "Vasya" ]; then echo "Privet $1" else [ "$1" == "Petya" ]; then echo "Privet $1" else echo "Zdarova $1" fi
Результаты
# ./script Zdarova # ./script Oleg Zdarova Oleg # ./script Vasya Privet Vasya # ./script Petya Privet Petya
Цикл if с case
#!/bin/bash
if [ "$1" == "Vasya" ]; then
echo "Privet $1"
else [ "$1" == "Petya" ]; then
echo "Privet $1"
else echo "Zdarova $1"
fi
x=$2
echo "Starting case selection..."
case $x in
1) echo "This is one";;
[2-9]) echo "Two-nine";;
"Petya") echo "Privet $x";;
*) echo "Parameter unknown"
esac
Результаты
# ./script Zdarova Starting case selection... Parameter unknown # ./script Oleg 3 Zdarova Oleg Starting case selection... Two-nine # ./script Petya 1 Privet Petya Starting case selection... This is one # ./script Vasya Petya Privet Vasya Starting case selection... Privet Petya # ./script Petya Alex Privet Petya Starting case selection... Parameter unknown
Интерактивный ввод параметра
#!/bin/bash
if [ "$1" == "Vasya" ]; then
echo "Privet $1"
else [ "$1" == "Petya" ]; then
echo "Privet $1"
else echo "Zdarova $1"
fi
echo "Please entrer something: "
read x
# read -p "Please entrer something: " x - второй вариант
echo "Starting case selection..."
case $x in
1) echo "This is one";;
[2-9]) echo "Two-nine";;
"Petya") echo "Privet $x";;
*) echo "Parameter unknown"
esac
Результат
# ./script Oleg Zdarova Oleg Enter something: 2 Starting case selection... Two-nine
и т.д.
Циклы
#!/bin/bash
COUNTER=0
while [$COUNTER -lt 10]; do
# -lt(less than) - меньше чем
echo "Current counter is $COUNTER"
COUNTER=$((COUNTER+1))
done
Результат выведет переменные от 0 до 9
# ./script Current counter is 0 Current counter is 1 Current counter is 2 Current counter is 3 Current counter is 4 Current counter is 5 Current counter is 6 Current counter is 7 Current counter is 8 Current counter is 9
#!/bin/bash
for myfile in `ls *.txt`; do
cat $myfile
done
Результат выведет содержимое файлов .txt
# ./script Text from file1 Text from file2 Text from file3
#!/bin/bash
for x in {1..10}; do
echo "X = $x"
done
Результат выведет значение переменной от 1 до 10
# ./script X = 1 X = 2 X = 3 X = 4 X = 5 X = 6 X = 7 X = 8 X = 9 X = 10
#!/bin/bash
for (( i=1; i<=10; i++ )); do
echo "Nomer N = $i"
done
Результат выведет значение переменной от 1 до 10
# ./script Nomer N = 1 Nomer N = 2 Nomer N = 3 Nomer N = 4 Nomer N = 5 Nomer N = 6 Nomer N = 7 Nomer N = 8 Nomer N = 9 Nomer N = 10
Стандартные ввод, вывод и ошибка
Существует три стандартных значения ввода и вывода для программ. Ввод получают от клавиатуры (интерактивная, диалоговая программа), или из программы, обрабатывающей вывод другой программы.
Результат программы обычно печатается в стандартной вывод и иногда в файл «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