Bash.Синтаксис

Bash.Синтаксис

https://t.me/HotCheatSheet

Синтаксис bash не так сложен, на нём вполне можно писать различные команды, вычисления. Самое то для автоматизации рутины. Я думаю большая часть уже знакома с этой темой, но это только начало длинного пути, спасибо что остаётесь с нами =)


Команды возвращающие код возврата

test — используется для логического сравнения. после выражения, неоьбходима закрывающая скобка "]"

[ — синоним команды test

[[ — расширенная версия "[", внутри которой могут быть использованы ||(или), &(и). Должна иметь закрывающую скобку "]]"

(( )) — математическое сравнение.


Перенаправление ввода-вывода

0<filename или <filename — перенаправление ввода из файла «filename»

1>filename или >filename — перенаправление вывода в файл «filename», если отключена опция noclobber, то файл перезаписывается поступающими данными

1>|filename или >|filename — перенаправление вывода в файл «filename», файл перезаписывается поступающими данными

1>>filename или >>filename — перенаправление вывода в файл «filename», данные добавляются в конец файла, при отсутствии файл создаётся

2>filename — перенаправление стандартного вывода ошибок в файл «filename»

2>>filename — перенаправление стандартного вывода ошибок в файл «filename», данные добавляются в конец файла, при отсутствии файл создаётся

&>filename — перенаправление вывода и ошибок в файл «filename»

2>&1 — перенаправление вывода ошибок на стандартный вывод


Логические операции

-z <строка> — строка пуста

-n <строка> — строка не пуста

=, (==) <строка> — строки равны

!= <строка> — строки неравны

-eq — равно

-ne — неравно

-lt,(<) — меньше

-le,(<=) — меньше или равно

-gt,(>) — больше

-ge,(>=) — больше или равно

! — отрицание логического выражения

-a,(&&) — логическое «И»

-o,(||) — логическое «ИЛИ»


Математические операции

+ — сложение

- — вычитание

* — умножение

/ — деление

** — возведение в степень

% — модуль(деление по модулю), остаток от деления


Массивы

${<массив>[@]} — получить строку, состоящую из всех элементов массива, разделённых пробелом.

{!<массив>[@]} — получить строку со всеми индексами или ключами массива, независимо от того, численные они или текстовые.

{<массив>[@]/тскет/текст} — Осуществить массовую замену первого вхождения подстроки «тскет» на «текст» во всех элементах массива и вернуть строку, составленную из результирующих элементов массива, разделённых пробелом.

declare -a <массив> — объявить индексированный массив

Массив=(элемент1 элемент2 элемент3) — инициализировать индексированный массив.

${<имя_массива>[0]} — получить первый элемент массива.

declare -A <массив> — объявить ассоциативный массив.

Массив=([<ключ1>]=<значение1> [<ключ1>]=<значение1>[<ключ1>]=<значение1>) — инициализировать ассоциативный массив.


Целочисленная математика

VAR=55 — Устанавливаем переменную VAR, равной 55

((VAR = VAR + 1)) — Добавляем единицу к переменной VAR. Обратите внимание на отсутствие знака '$'

((VAR+=1)) — Сокращённая форма записи инкремента

((++VAR)) — Другой способ увеличения VAR на единицу. Выполняет префиксный инкремент

((VAR++)) — Другой способ увеличения VAR на единицу. Выполняет постфиксный инкремент

echo $((VAR * 22)) — Умножаем VAR на 22 и передаем результат команде

echo $[VAR * 22] — Устаревший способ сделать то же

((VAR<<3)) — Побитовый сдвиг влево (то же, что VAR*8)

((VAR>>3)) — Побитовый сдвиг вправо (то же, что VAR/8)


Условные операторы
if  <выражение или команда возвращающая код возврата> then 
    <команды>
else 
    <команды>
fi

if <выражение или команда возвращающая код возврата> then 
    <команды>
elif <выражение или команда возвращающая код возврата> then 
    <команды>
fi

case $<переменная> in
    <номер>)<команды>
    ;;
    *)<команды> — выполняются если не было найдено подходящего варианта
    ;;


Циклы
for <переменная> in <список_значений> do 
    <команды> 
done

while <выражение или команда возвращающая код возврата> do 
    <команды> 
done

until <выражение или команда возвращающая код возврата> do 
    <команды> 
done 


Дополнительно

cat filename | grep pattern — конвейер(|), передаёт вывод предыдущей команды на ввод следующей

echo a{p,c,d,b}e — расширение скобок (данный вывод - ape ace ade abe)

#!/bin/bash — для запуска скрипта с интерпретатором bash