Полный цикл в digital

Операторы bash в Linux

Операторы командной строки — это специальные символы, используемые для написания миниатюрных сценариев оболочки в командной строке. Обычно они используются для выполнения команд в определенной последовательности, определяемой размещением операторов между командами. Это невероятно полезно для автоматизации задач.

Применимо к основным командным интерпретаторам — sh, bash, csh, tcsh и некоторым другим.

Оператор амперсанда &

Когда вы открываете программу или выполняете команду из командной оболочки, вам приходится либо ждать завершения выполнения команды, либо вручную выходить из программы, прежде чем вы сможете продолжить использование командной оболочки.

Добавляя оператор амперсанда & к любой команде, вы диктуете оболочке выполнить эту команду Linux в фоновом режиме, чтобы вы могли продолжать использовать оболочку без привязки.

nano &

Если вы запускаете nano с терминала, вы не сможете использовать терминал, если не закроете текстовый редактор. Но, добавив оператор амперсанда, вы можете заставить его работать в фоновом режиме и немедленно продолжить использовать оболочку.

Оператор точки с запятой ;

Оператор ; нужно использовать для выполнения команд в определенном последовательном порядке. Упорядочивайте свои команды и разделяйте их точками с запятой.

pwd ; mkdir test ; cd test ; touch file

Приведенный выше синтаксис предписывает оболочке выполнять каждую команду одну за другой. Обратите внимание, что оболочка не проверяет, успешно ли завершается каждая команда. Как только оболочка получает код возврата, она переходит к выполнению следующей команды.

Оператор AND или &&

Оператор && функционирует аналогично оператору с запятой, за исключением того, что в отличие от оператора с запятой, оператор AND будет выполнять команды только в том случае, если предыдущая команда была успешно выполнена.

pwd && mkdir test && cd test && bad_command && ls

В этом примере синтаксиса оболочка успешно выполнит все команды вплоть до bad_command. Однако, поскольку bad_command не удается выполнить, оболочка вернет ошибку и пропустит команду ls.

Оператор OR или ||

Оператор OR выполнит следующую команду, только если предыдущая команда завершится неудачно, неудачно завершонная команда вернет код выхода 0. OR функционирует как логический элемент ИЛИ.

bad_command || ls

В этом примере синтаксиса bad_command это команда false, которая не будет выполнена, поскольку она завершается неудачей, команда следующая за оператором OR, которая является командой ls, будет выполнена успешно.

Оператор канала |

Оператор канала | направляет вывод предыдущей команды в качестве входных данных для последующей команды. Чаще всего он используется для фильтрации данных с помощью команды grep.

cat test | grep -i "mak"

Эта команда отправляет выходные данные команды cat в качестве входных данных команде grep, которая затем фильтрует выходные данные по указанной строке.

Оператор NOT или !

Если вы хотите выполнить операцию с большим количеством файлов в каталоге, но хотите исключить несколько на основе какого-либо параметра, вы можете использовать оператор NOT, передав параметр после символа !.

rm -r !(*.txt)

Этот пример команды рекурсивно удалит все файлы в каталоге, за исключением файлов с расширением .txt.

Оператор приоритета (...)

Команды, следующие за операторами AND и OR, зависят от кода завершения предыдущей команды. Эти операторы являются двоичными и оценивают только две команды, которые идут до и после них.

Поэтому при работе с несколькими операторами важно установить группы и приоритет, чтобы гарантировать, что последовательность выполнения соответствует вашим ожиданиям.

(ls *.txt > txt-files.list && cp *.tx ~) && (ls *.deb > deb-packages.list && cp *.deb ~) || echo "Precedence Test!"

В этом примере синтаксиса обе группы команд должны возвращать код выхода 0, чтобы гарантировать успешное выполнение последней команды. В этом примере требуется, чтобы обе команды в первом () завершились с 0 для запуска второго ().

Оператор комбинирования {...}

Как следует из названия, оператор комбинации используется для группировки команд. Какие бы команды вы ни хотели сгруппировать, вы можете поместить их в фигурные скобки, и они будут выполняться в зависимости от кода завершения первой команды.

test -f /etc/passwd && {pwd ; date} && echo $0 ; echo "Hello"

Пример синтаксиса проверит, присутствует ли файл /etc/passwd, выведет текущий рабочий каталог, дату, имя оболочки и повторит Hello.

Конкатенация или оператор \

Оператор конкатенации escape или \ выполняет две функции. Вы можете использовать его либо для объединения двух команд, либо в качестве escape символа при работе со строками в оболочке.

mkdir test0 test1 \ test2
echo "Hello! from the other side"

Первая команда создаст четыре каталога с именами test0 через test2, а вторая команда выведет строку, разделенную новой строкой.

Операторы перенаправления >, >>, <

Операторы перенаправления перенаправляют вывод или ввод в файл либо путем перезаписи файла, либо путем добавления к нему. Если вы хотите перезаписать файл, вам нужно использовать синтаксис с одной угловой скобкой >. Если вы хотите добавить в файл, вам придется использовать синтаксис двойной угловой скобки >>.

echo "dsd" > test ; echo >> test

В примере синтаксиса первая команда перезапишет тестовый файл предоставленной строкой, но во второй команде предоставленная строка будет добавлена к тестовому файлу.

Буквенное сравнение

Оператор Описание Пример
-eq Равно [ $x -eq $y ]
Для результат true необходимо, чтобы x был равен y
[ 1 -eq 2 ] — false
[ 3 -eq 3 ] — true
-ne Не равно [ $x -ne $y ]
Оператор обратный -eq
[ 1 -ne 2 ] — true
[ 3 -ne 3 ] — false
-gt Больше [ $x -gt $y ]
То есть проверяет больше ли x чем y
[ 1 -gt 2 ] — false
[ 3 -gt 3 ] — false
[ 5 -gt 4 ] — true
-lt Меньше [ $x -lt $y ]
Проверяет, что число в левой части (x) меньше числа в правой (y)
[ 1 -lt 2 ] — true
[ 3 -lt 3 ] — false
[ 5 -lt 4 ] — false
-ge Больше или равно [ $x -ge $y ] [ 1 -ge 2 ] — false
[ 3 -ge 3 ] — true
[ 5 -ge 4 ] — true
-le Меньше или равно [ $x -le $y ] [ 1 -le 2 ] — true
[ 3 -le 3 ] — true
[ 5 -le 4 ] — false
-z Проверка на нулевой размер [ -z $b ]
Оператор проверяет, является ли строка b с нулевым размером
[ -z 'linux' ] — false
[ -z '' ] — true
-n Проверка на ненулевой размер [ -n $b ]
Оператор обратный -z
[ -n 'linux' ] — true
[ -n '' ] — false
Проверка на пустоту [ $b ]
Оператор проверяет, является ли строка b не пустой
[ 'linux' ] — true
[ '' ] — false

Пример использования в IF:

if [ $x -eq $y ]
then
    echo 'true'
else
    echo 'false'
fi

Знаковое сравнение

Оператор Описание Пример
= Равно [ "$a" = "$b" ]
То есть строка a равна строке b
[ 'linux' = 'windows' ] — false
[ 'unix' = 'unix' ] — true
!= Не равно [ "$a" != "$b" ]
Оператор обратный
[ 'linux' != 'windows' ] — true
[ 'unix' != 'unix' ] — false
=~ Содержит [[ "$a" =~ $b ]]
То есть в строке a есть b
Обратите внимание, что для данного оператора используются двойные квадратные скобки
[[ 'linux' =~ 'windows' ]] — false
[[ 'unix' =~ 'ni' ]] — true

Проверяет больше ли x чем y
[ 1 > 2 ] — false
[ 3 > 3 ] — false
[ 5 > 4 ] — true
< Меньше [ $x < $y ]
Проверяет, что число в левой части (x) меньше числа в правой (y)
[ 1 < 2 ] — true
[ 3 < 3 ] — false
[ 5 < 4 ] — false

Пример использования в IF:

if [ $x = $y ]
then
    echo 'true'
else
    echo 'false'
fi

Несколько условий

Оператор Описание Пример
-a Логическое И [ $x -eq $y -a $z -le $w ]
В данном примере, проверяет, что (x равно y) И (z меньше или равно w)
[ 1 -eq 2 -a 3 -le 4 ] — false
[ 5 -eq 5 -a 3 -le 4 ] — true
[ 5 -eq 5 -a 6 -le 4 ] — false
-o Логическое ИЛИ [ $x -ne $y -o $z -ge $w ]
В данном примере, проверяет, что (x не равно y) ИЛИ (z больше или равно w)
[ 1 -eq 2 -o 3 -le 4 ] — true
[ 5 -eq 5 -o 3 -le 4 ] — true
[ 5 -eq 5 -o 6 -le 4 ] — true
[ 1 -eq 2 -o 6 -le 4 ] — false

Сравнение файлов

Оператор Описание Пример
-f Проверка на существование файла [ -f $file ]
Оператор проверяет, существует ли файл $file
[ -f '/etc/filename' ] — true
[ -f '' ] — false
-d Проверка на существование папки [ -d $folder ]
Оператор проверяет, существует ли каталог $folder
[ -d '/etc/exist_folder' ] — true
[ ! -d '/etc/exist_folder' ] — false
[ -d '/etc/not_exist_folder' ] — false
[ ! -d '/etc/not_exist_folder' ] — true
-x Проверка на существование исполняемого файла [ -x $file ]
Оператор проверяет, существует ли файл $file и является ли он исполняемым
[ -x '/etc/exec_filename' ] — true
[ -x '/etc/noexec_filename' ] — false
[ -x '' ] — false

Пример использования в IF:

if [ -x '/home/vadik/Рабочий стол/test.sh' ]
then
    echo 'true'
else
    echo 'false'
fi
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!