Язык bash — интерпретируемый язык для автоматизации сценариев выполнения команд в системе Linux.
Выполнение скриптов или shebang
Шебанг (англ. shebang, sha-bang, hashbang, pound-bang, or hash-pling) — в программировании последовательность из символов решётки и восклицательного знака (#!) в начале файла скрипта.
Когда скрипт с шебангом выполняется как программа в Unix-подобных операционных системах, загрузчик программ рассматривает остаток строки после шебанга как имя файла программы-интерпретатора. Загрузчик запускает эту программу и передаёт ей в качестве параметра имя файла скрипта с шебангом.
Например, если полное имя файла скрипта «path/to/script» и первая строка этого файла:
#!/bin/sh
то загрузчик запускает на выполнение /bin/sh (обычно это Bourne shell или совместимый интерпретатор командной строки) и передаёт path/to/script как первый параметр.
После первой строки, где находится шебанг идет код того языка, на который указывает путь к интерпретатору.
Очень важно, чтобы скрипт имел прав ана исполнение, иначе он может не выполниться в системе и для этого достаточно прописать:
$ chmod -x ./script.py
Список команд
Команда | Описание |
echo | вывод значения переменной |
export | объявление перменной |
> | запись с затиранием содержимого |
>> | добавление в конец |
cat | вывод содержимого файла |
read | чтение и ожидание от пользователя |
Ветвления
Будучи языком программирования в bash есть ветвления, которые необходимы для управления потоком выполения команд, в зависимости от значений переменных и выглядит это так:
if [TEST-COMMAND1]
then
STATEMENTS1
elif [TEST-COMMAND2]
then
STATEMENTS2
else
STATEMENTS3
fi
Выражения ветвления начинается с команды if
и далее пишется проверяемое значение переменной и после then
пишется то, что будет выполнено в случае, если значение true, иначе продолжает выполнять следующие ветки, если они есть. Конец ветвления должен заканчиваться командой fi
.
Ниже представлен список операторов для конструкции if
:
-n
VAR
— True if the length ofVAR
is greater than zero.-z
VAR
— True if theVAR
is empty.STRING1 = STRING2
— True ifSTRING1
andSTRING2
are equal.STRING1 != STRING2
— True ifSTRING1
andSTRING2
are not equal.INTEGER1 -eq INTEGER2
— True ifINTEGER1
andINTEGER2
are equal.INTEGER1 -gt INTEGER2
— True ifINTEGER1
is greater thanINTEGER2
.INTEGER1 -lt INTEGER2
— True ifINTEGER1
is less thanINTEGER2
.INTEGER1 -ge INTEGER2
— True ifINTEGER1
is equal or greater than INTEGER2.INTEGER1 -le INTEGER2
— True ifINTEGER1
is equal or less thanINTEGER2
.-h
FILE
— True if theFILE
exists and is a symbolic link.-r
FILE
— True if theFILE
exists and is readable.-w
FILE
— True if theFILE
exists and is writable.-x
FILE
— True if theFILE
exists and is executable.-d
FILE
— True if theFILE
exists and is a directory.-e
FILE
— True if theFILE
exists and is a file, regardless of type (node, directory, socket, etc.).-f
FILE
— True if theFILE
exists and is a regular file (not a directory or device).
Пример кода:
#!/bin/sh
echo -n "Enter a number: "
read VAR
if [ $VAR -gt 10 ]
then
echo "The variable is greater than 10."
elif [ $VAR -eq 10 ]
then
echo "The variable is equal to 10."
else
echo "The variable is less than 10."
fi