Bash равен -s (например, —option=argument) (без getopt [s])
использования
вывод от копирования-вставки блока выше:
Чтобы лучше понять найдите «Удаление подстроки» в этом руководстве. Функционально он эквивалентен который вызывает ненужный подпроцесс или который вызывает два ненужных подпроцесса.
Способ № 2: Использование bash с getopt
от:
Ограничения getopt (1) (более ранние, относительно недавние версии ):
- не может обрабатывать аргументы, которые являются пустыми строками
- не может обрабатывать аргументы со встроенным пробелом
Более поздние версии не имеют этих ограничений.
Кроме того, оболочка POSIX (и другие) предлагает которых нет этих ограничений. Я включил упрощенный пример .
Использование
вывод от копирования-вставки блока выше:
Преимущества являются:
- Он более переносим и будет работать в других оболочках, например, в .
- Он может обрабатывать несколько отдельных параметров, таких как типичным способом Unix, автоматически.
Недостаток заключается в том, что он может обрабатывать только короткие опции (, а не ) без дополнительного кода.
Запуск
Поведение Bash зависит от способа, каким он был запущен.
Если Bash был вызван в TTY в процессе работы команды , демоном SSH или другим схожим образом, то он считается оболочкой входа (login shell). Этот режим также можно выбрать флагом /.
Примечание: В Arch исполняемый файл (использовался в оболочке Борна) заменён символической ссылкой на . Если запустить Bash командой , то он будет вести себя маскимально приближенно к «настоящему» sh, в том числе и в смысле POSIX-совместимости.
Файлы настроек
Файл | Описание | Оболочки входа (см. примечание) | Интерактивные оболочки (не входа) |
---|---|---|---|
Системный, файлы и с настройками приложений. | Да | Нет | |
Пользовательский, исполняется после . Если не существует, проверяются и (в указанном порядке). Файл-образец содержит также указание на исполнение файла . | Да | Нет | |
Пользовательский, исполняется после выхода из оболочки входа. | Да | Нет | |
Системный, исполняется после выхода из оболочки входа. Зависит от флага компиляции . | Да | Нет | |
Системный, исполняет файл . Зависит от флага компиляции . | Нет | Да | |
Пользовательский, исполняется после . | Нет | Да |
Примечание:
- Оболочка входа будет неинтерактивной, если вызывается с флагом .
- Интерактивные оболочки (не входа) не исполняют файл , они наследуют окружение от родительского процесса (которым может быть в том числе и оболочка входа). Подробнее см. .
Оболочка и переменные окружения
Для создания переменной окружения необходимо экспортировать переменную оболочки:
VARIABLE=content export VARIABLE
или более кратко:
export VARIABLE=content
Переменные окружения принято перечислять в файлах или , чтобы другие Bourne-совместимые оболочки могли их использовать.
Подробнее см. Переменные окружения.
Аргументы
Когда вы выполнили cd Documents, cd это команда, Documents это агрумент (argument).
Чтобы увидеть скрытые файлы в директории выполните ls -a
Где a означает All
У скрытых файлов первый символ в назывании — это точка
ls -a
. .bashrc Desktop docker-lab .gnupg Music Public snap .sudo_as_admin_successful .Xauthority
.. .bash_history .cache .docker Documents .local node_modules Pictures python .ssh Templates yandex-tank
.bash_logout .config docker Downloads .mozilla notes.txt .profile shell_scripts ssh-com Videos yarn.lock
-a это специальный вид аргумента, который называется опция (option).
Опции добавляют командам дополнительный функционал.
Опции начинаются с символа —
После — можно перечислить несколько опций подряд
Чтобы увидеть дополнительную информацию о файлах выполните ls -l, l означает long format
ls -l
total 96
drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Desktop
drwxrwxr-x 3 andrei andrei 4096 syys 17 19:09 docker
drwxrwxr-x 4 andrei andrei 4096 heinä 19 21:46 docker-lab
drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Documents
drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Downloads
drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Music
drwxr-xr-x 2 root root 4096 heinä 18 22:11 node_modules
-rw-rw-r— 1 andrei andrei 1 syys 19 21:40 notes.txt
drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Pictures
drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Public
drwxrwxr-x 2 andrei andrei 4096 syys 19 12:54 python
drwxrwxr-x 2 andrei andrei 4096 syys 19 22:01 shell_scripts
drwxr-xr-x 3 andrei andrei 4096 syys 15 19:58 snap
drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Templates
drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Videos
drwxrwxr-x 3 andrei andrei 4096 heinä 16 16:55 yandex-tank
-rw-r—r— 1 root root 86 heinä 18 22:11 yarn.lock
Чтобы узнать какие ещё опции есть у команды ls выполните
man ls
Результатом этой команды будет подробное описание всех опций. Список
довольно длинный, чтобы перемещаться вниз по списку нажимайте пробел, чтобы
вернуться наверх нажимайте b
Чтобы выполнить поиск по слову введите слово. Чтобы перейти к
следующему результату поиска нажмите n
Чтобы закрыть man нажмите q
Подробнее про все опции ls читайте в статье
«man ls»
Чтобы увидеть дополнительную информацию о файлах, вкючая скрытые
и отсортировать выдачу по вермени изменения
выполните ls -lat
ls -lat
total 176
drwxr-xr-x 31 andrei andrei 4096 syys 20 10:20 .
-rw——- 1 andrei andrei 34 syys 20 10:20 .lesshst
-rw——- 1 andrei andrei 236 syys 20 10:16 .Xauthority
-rw——- 1 andrei andrei 17546 syys 19 23:40 .bash_history
drwxrwxr-x 2 andrei andrei 4096 syys 19 22:01 shell_scripts
-rw-rw-r— 1 andrei andrei 1 syys 19 21:40 notes.txt
drwxrwxr-x 2 andrei andrei 4096 syys 19 12:54 python
drwx—— 2 andrei andrei 4096 syys 17 19:19 .ssh
drwxrwxr-x 3 andrei andrei 4096 syys 17 19:09 docker
drwx—— 3 andrei andrei 4096 syys 15 20:04 .gnupg
drwxr-xr-x 3 andrei andrei 4096 syys 15 19:58 snap
drwxr-xr-x 15 andrei andrei 4096 syys 15 19:58 .cache
drwxr-xr-x 12 andrei andrei 4096 syys 15 19:58 .config
drwxrwxr-x 4 andrei andrei 4096 heinä 19 21:46 docker-lab
drwx—— 2 andrei andrei 4096 heinä 18 23:06 .docker
drwxr-xr-x 2 root root 4096 heinä 18 22:11 node_modules
-rw-r—r— 1 root root 86 heinä 18 22:11 yarn.lock
drwxrwxr-x 3 andrei andrei 4096 heinä 16 16:55 yandex-tank
drwxr-xr-x 4 andrei andrei 4096 heinä 16 15:08 .local
-rw-r—r— 1 andrei andrei 0 heinä 16 12:27 .sudo_as_admin_successful
drwx—— 5 andrei andrei 4096 heinä 16 12:12 .mozilla
drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Desktop
drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Documents
drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Downloads
drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Music
drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Pictures
drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Public
drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Templates
drwxr-xr-x 2 andrei andrei 4096 heinä 16 12:11 Videos
-rw-r—r— 1 andrei andrei 220 heinä 16 11:53 .bash_logout
-rw-r—r— 1 andrei andrei 3771 heinä 16 11:53 .bashrc
-rw-r—r— 1 andrei andrei 807 heinä 16 11:53 .profile
drwxr-xr-x 3 root root 4096 heinä 16 11:53 ..
Просмотр файлов
Чтобы открыть содержимое текстового файла выполните cat имя_файла или less имя_файла
cat textfile
less book1
cat выведет содержимое в консольный вывод. less откроет файл во всё окно.
Навигация по файлу, открытому с помощью less, осуществляется также как и по man.
Пробел | вниз |
b | вверх |
поиск | |
n | следующий результат поиска |
q | закрыть |
Если вы пытаетесь открыть бинарный файл с помощью less, то можете получить предупреждение
«file1» may be a binary file. See it anyway?
cat откроет такой файл без предупреждения
Чтобы продолжить нажмите y. Результат вас скорее всего не обрадует — получится трудночитаемый набор символов.
<C3>&NU_p<C6>x<E6><AC>^N<B4>E<EA>^B<D1>E^U<AB>^A3Fy<A3>^T^N<B5>7`^D<8E><F4><9F><8D>^M<E8>y<CD>^T6^A<DF>^T<83><8A>^F{џZ<8B><8C>p4S^G^TUs
<C5>H@<DB><C3>}*d<C0>$<D4>Q^@Fq<83>S.:<81>\ƌp<E6><83>ӭ»<9F>j <C8><E9>I<92>/<BD>.i)hB
\P(<A6>^B<D2>^Q<91><8A>)h^A*;<A9><96><DA><DA>K<86>Ve<8D>K<B0>Q<93><81><C9><C5>KU<F5>7X<B4>ۙ]<B6><A2>D<CC><C7>n<EC>^@9<E3><BD>RZ<8C><A5><E1>mv<D7><C4>~^^<B4><D7>4<F8><E7>^V<B7><91><89>a<F3>Sk<95>#<AE>3X<9A>7
<C4>^]’W<D4>m<EC>ml<B5>1<E7><DE><DC>X<89><9E><DB>^Q$Ђ]Y<B3><C7>B3<EA>^M`<FC>^P<D5><E3><87><U+009E>^Z<F0>Ǖ»<DD><8E><EB><C4>?^QtM
<EF>T<B6><BE><B7><D4>7<E9>f<D7><ED>% ^E@<B8>m<B1><90>I^@<8C><F0>Ol^ZՓĶ<D1><E8>ڶ<AB>5<9D><EC>0<E9><86>a6<F8><86><E6><F2><F3><B9><94>^C<F3>^L^Lם<FC>a<F0>-<F7><88>|Ur<D6><C8>M<9E><A7>Ỉ.<C8>=g<B7>u<92><D8><FA>g{g覺<88><D6>h<FE>^M\I<AA>,<A9>wu<A4>I=<DA>^PIY%<8C><B3>.9<EE><C5>q<8A>9^U<84>t:^?<88>,<EF><FC>;a<AE>Q^P^Vfc<80>^@<EA>I<AC>m'<C4>vZ<95><EC>v<90>y<9B>偮b<84>,<D1>^B^@u><87> <FD>(<F1><EE><9B>u<AC>xESC]<D2>ld<F2><EE><AF>4<E9><ED><E1>oGx<D9>G<EA>kESC<E1>̩&<95><A1><C2><D6>ѭƛ<A3><C7>kx<^Rb0рx#tm<9F><F7>G<E3>1<8D><C0><EA> <D4>mf<D4><EE><B4>اF<BB><B6><8E>9e<8C>uE}<C1>I<FA><EC>oʲ<F5><AF>^WiZF<B0>t<BB>ߴ$<A9>f<D7><D2>8<8F>(<90>+^Eg'<^@O'<B0><AE>^_O<D4>#<B7><F8><DB>i<AC>Gs^L<B6>:<FD><8C><F6>-$n<D8>^R<8F>I<F1>'<8A><B4><CD>^KN<B0><D4>.<8C><93><AD><A8><90><C7><D8>t
^E<81>'<D0>^Z<EE><FC>;<AD><DA>k<BA>y<BF><B1>Y<C4>»Y»<FD><F4>E^X<94>m<A4><80>{d^\^^<F4><9C>l<AE>I<A6>(«<8A>*U<80>Lr^O<S<87>ZJ*<A2><80>u^T<99><A0>V<9C>ɈSH:<D0>h^T<80>O<D4>PzQ<C6>x<E3>ڑ<BD><E9>1<86>=M!<CE>^?
<AD>)<C7>zi<F4>&<A4>^C<9A>(<FC>h<A0>
Чтобы закрыть окно с этими символами попробуйте нажать q или ввести команду reset
Для того, чтобы не попадать в такую ситуацию, можно проверять тип файла перед тем как его открывать. Это можно сделать командой file
file file1
file1: JPEG image data, JFIF standard 1.01, resolution (DPI), density 72×72, segment length 16, baseline, precision 8, 325×500, components 3
Оказывается file1 это не текст а изображение в формате JPEG
Попробовать открыть изображение из терминала можно командой xdg-open,
не факт, что она будет работать в вашей системе, у меня в
Ubuntu 20.4
получилось.
xdg-open file1
Пример 4: Чтение обычных аргументов и аргументов с помощью параметров getopts
Способы чтения аргументов командной строки с использованием переменных аргументов и параметров getopts были показаны отдельно в предыдущих примерах этой статьи. Но эти два способа можно использовать в одном скрипте для чтения значений аргументов командной строки. Создайте сценарий bash со следующим кодом для чтения значений аргументов командной строки, передаваемых параметрами getopts и параметрами аргументов. Здесь три параметра getopts были использованы для чтения имени хоста, имени пользователя и пароля командной строки. Затем была использована команда shift для удаления всех параметров getopts из команды чтения значений командной строки с использованием переменных аргументов. Этот сценарий прочитает и распечатает не более трех значений переменных аргументов. Если после выполнения кода не будет указано значение аргумента без опции, то будет напечатано сообщение; иначе,
#!/bin/bash # Чтение аргументов с опциями getopts while getopts 'h:u:p:' OPTION; do case "$OPTION" in h) # Вывести имя хоста echo "Имя хоста - $OPTARG " ;; u) # Вывести имя пользователя echo "Имя пользователя - $OPTARG " ;; p) # Вывести пароль echo "Пароль: $OPTARG " ;; *) # Вывести справочное сообщение для неверных опций echo "Usage: $0 " >&2 # Завершить выполнение сценария exit 1 ;; esac done # Удалить все параметры, переданные getopts options shift "$(($OPTIND -1))" # Чтение первых обычных аргументов if ; then echo "The first table name is $1" else echo "No normal argument is given." exit 1 fi # Чтение второго нормального аргумента if ; then echo "The second table name is $2" fi # Чтение третьего нормального аргумента if ; then echo "The third table name is $3" fi
Управляющая конструкция if-then-else
Для того, чтобы программа смогла сообщить и о результатах успешного поиска, и о неудаче, воспользуемся конструкцией . Вот как она устроена:
if команда then команды else команды fi
Если первая команда возвратит ноль, что означает её успешное выполнение, условие окажется истинным и выполнение не пойдёт по ветке else. В противном случае, если будет возвращено что-то, отличающееся от нуля, что будет означать неудачу, или ложный результат, будут выполнены команды, расположенные после else.
#!/bin/bash user=anotherUser if grep $user /etc/passwd then echo "The user $user Exists" else echo "The user $user doesn’t exist" fi
Создание, перемещение и удаление
Используйте команду mkdir для создания директории. Не забудьте указать имя:
mkdir dir1
Новая директория будет создана в той директории, где вы находитесь в данный момент, но вы также можете прописать какой-то другой путь для создания новой директории:
mkdir /home/users/dir1
Для создания файла вам нужно ввести команду touch и название будущего файла:
touch file1
В этом случае прописать путь, где нужно создать файл, тоже возможно:
touch /home/users/dir1/file1
Для перемещения директорий и файлов используется команда mv, после которой вы пишете название директории или файла, который хотите переместить, а затем место, куда хотите переместить:
mv file2 /home/users/dir2 mv dir1 /home/users/dir3
Обратите внимание, что команда mv также используется для переименования, поэтому если при отсутствии директории dir2 вы напишете такую команду:
mv dir1 dir2
то директория dir1 будет переименована в директорию dir2. Этот пример справедлив и для файлов, которым вы можете давать другие названия при помощи команды mv.
Для удаления файлов следует использовать команду rm, а для удаления директорий rmdir. Если вы хотите удалить каталог, используйте команду rm с ключами -rf:
rm -rf /home/users/
Еще одно действие, которое вы можете использовать, — это копирование при помощи команды cp. Синтаксис у этой команды такой же, как и у предыдущих, — вы просто пишете, что и куда хотите скопировать. Для копирования директории обязательно нужно использовать ключ -r, при этом если конечная директория (dir2) не существует, то она будет создана при копировании:
cp -r dir1 dir2
Двойные скобки
Результат выполнения команды можно легко сохранить в переменную.
На основе этого механизма можно выполнять арифметические действия. Достаточно вместо одной пары скобок использовать две.
Рассмотрим примеры в скрипте
expansion_example.sh
Разберём этот скрипт:
Строка 4 — Базовый синтаксис. Можно ставить пробелы без использования кавычек.
Строка 7 — Работает и без пробелов.
Строка 10 — Можно использовать переменные без $ перед ними.
Строка 13 — А можно и с $
Строка 16 — Увеличение переменной на 1. Символ $ не нужен.
Строка 19 — Увеличение переменной на 3. Это краткая форма записи b = b + 3.
Строка 19 — В отличие от других способов символ * не нужно экранировать.
./expansion_example.sh
981112131620
Двойные скобки дают довольно много свободы в форматировании кода.
Они доступны в Bash по умолчанию и их эффективность немного выше. Хотя заметить разницу на современных компьютерах будет непросто.
Общие слова и замечания
Большинство продемонстрированных клавиш стандартны для «командной строки Linux», но часть из этих комбинаций специфичны для bash (поэтому и пометил это в заголовке). На текущий момент BASH – наиболее распространенный командный интерпретатор, используемый по умолчанию в большинстве Linux-дистрибутивов. В других командных интерпретаторах или, проще говоря, shell’ах (рекомендую попробовать zsh и fish) могут быть небольшие отличия в работе. Также часть комбинаций прописана в «настройках по умолчанию» (например, в файле /etc/inputrc или в /etc/bashrc), которые тоже могут различаться в разных дистрибутивах. И бывает, что некоторые клавиши могут быть настроены и перехватываться графической оболочкой, в которой запущен командный интерпретатор.
Часть демонстрируемых клавиш относятся к «настройкам терминала». А часть – клавиши из командного интерпретатора BASH, и их можно посмотреть, почитав мануал по bash’у (огромный текст – пользуйтесь поиском):
♯
^^^ На приведенном фрагменте из мануала: Запись «(C-r)» означает , а «M->» означает .
Для демонстраций нажатых клавиш использую утилиту «screenkey».
При этом стоит упомянуть, что по умолчанию bash использует emacs-режим редактирования командной строки и поэтому многие комбинации клавиш пришли из редактора emacs. Для знающих редактор vi, могу порекомендовать переключить (добавив «set -o vi» в ~/.bashrc) bash в vi-режим редактирования и пользоваться привычными комбинациями из vi.
Что такое bash
Bash расшифровывается как Bourne again shell (что можно перевести как «Еще одна оболочка Борна»), название частично заимствованно от более ранней версии командной оболочки UNIX, которая называлась просто Bourne shell («Оболочка Борна» – по фамилии разработчика Стивена Борна).
Bash позволяет интерактивно взаимодействовать с компьютером, вводя определенные команды и получая на них соответствующий отклик. Также этот командный процессор позволяет выполнять скрипты (команды из файла), может производить автодополнение названий файлов и директорий, допускает использование переменных, операторов ветвления и цикла.
Далее в статье будут приведены самые простые и необходимые для работы в bash команды, которые помогут вам сориентироваться и начать самостоятельно использовать командную строку для своих задач, но сначала необходимо перейти к интерфейсу командной строки.
Пользовательские переменные Bash
В сценариях командного интерпретатора Bash можно не только использовать переменные среды, но также создавать и включать собственные. Задание переменных позволяет сохранять данные и использовать их во время работы скрипта, что делает его более интерактивным.
Пользовательские переменные Bash Linux могут быть названы любой текстовой строкой длиной до 20 символов, состоящей из букв, цифр и символа подчёркивания. В названии учитывается регистр букв, поэтому переменная Var1 не является переменной var1. Новички в области написания сценариев часто забывают об этой особенности, отчего и допускают трудно диагностируемые ошибки.
Присвоение значения переменной Bash выполняется с помощью знака равенства (=). Слева и справа от знака не должно быть разделяющих символов по типу пробела. Это правило также часто забывается неофитами. Вот пример присваивания значений переменным:
Ключевой особенностью интерпретатора Bash является автоматическое определение типа данных, используемого для представления значения переменных. После их определения сценарий сохраняет значения этих переменных на протяжении всего времени работы программы и уничтожает после её завершения.
Приглашения
Bash имеет четыре строки приглашения, каждая из которых может быть настроена.
- — основное приглашение, которое отображается перед каждой командой; по этой причине модифицируется чаще всего.
- — второе приглашение, отображается, если команде требуются дополнительные данные для ввода (например, в случае многострочных команд).
- — используется довольно редко. Отображается при работе встроенной команды Bash , выводящей интерактивное меню. В отличие от остальных приглашений, не раскрывает . Обычно все изменения применяются непосредственно в скрипте, содержащем , а не в файле .
- — также используется редко. При отладке скриптов показывает уровни вложенности — первый символ приглашения повторяется столько раз, сколько на данный момент задействовано уровней.
Настройка конкретного приглашения подразумевает присваивание (обычно в файле ) необходимой строки в переменную, например:
PS2='> '
Переменные среды Bash
Командный интерпретатор Bash поддерживает переменные среды, которые отслеживают различную системную информацию:
- Имя системы;
- Имя пользователя, зарегистрированного в системе;
- Идентификатор пользователя (UID);
- Исходный (домашний) каталог пользователя по умолчанию и т.п.
Для ознакомления с полным списком локальных переменных среды используется команда set.
Результат:
Значения этих переменных Bash можно использовать в сценариях, для чего необходимо указать имя переменной с предшествующим ей знаком доллара ($).
Пример работы скрипта:
Переменные окружения Bash $USER, $UID и $HOME использовались для отображения запрашиваемой информации о текущем зарегистрированном пользователе.
Обратите внимание: переменные среды в командах echo заменяются их текущими значениями при выполнении программы. Кроме того, переменные, заключённые в кавычках, и вне их интерпретируются правильно
Однако в таком методе есть некоторый недостаток: при попытке отобразить какое-то денежное значение в долларовом эквиваленте необходимо добавить перед знаком доллара обратный слэш для его экранирования, чтобы интерпретатор не посчитал следующую за ним цифру именем переменной, принимающей параметр скрипта по указанному номеру.
В первой строке, где отображается неправильная цена, интерпретатор воспринял $ как знак начала переменной 1, которая считала первый параметр запущенной программы. Поскольку параметр ничего не содержал, то ничего и не было отображено вместо $1.
Пример-1: Распечатать все значения аргументов командной строки
Создайте файл bash со следующим сценарием, чтобы распечатать значения аргументов командной строки, используя цикл for без команды shift и цикл while с командой shift. Значение каждого аргумента будет сохранено в переменной, значение при выполнении цикла for , и эта переменная будет напечатана позже. Начали переменный используются в то время как и цикл, чтобы прочитать каждое значение аргумента при помощи команды shift и завершают цикл, когда все аргументы командной строки печатается. Переменная счетчика i, была использована в сценарии для отображения номера аргумента. Если во время выполнения не указан аргумент командной строки, то для первого аргумента будет установлена пустая строка, и ничего не будет напечатано.
#! /bin/bash # Печатать значения аргументов командной строки, используя цикл for и while # Установить счетчик i=1 echo "Значения аргументов без команды shift:" # Повторите все значения, используя цикл for for value in"$@" do echo "Аргумента нет. $i = $value" ((i++)) done # Повторная инициализация счетчика i=1 # Установите необязательный аргумент start=${1:-""} echo "Значения аргументов с помощью команды shift:" # Повторите все значения, используя цикл while while ; do echo "Argument no. $i = $start" # Сдвиньте каждый аргумент на 1 shift start=$1 ((i++)) done
Вывод:
Согласно следующему выводу, указанный выше сценарий был выполнен с тремя значениями аргументов командной строки. Значения аргументов напечатаны два раза , используя для цикла и во время цикла с командой shift.
Сравнение строк
В сценариях можно сравнивать и строковые значения.
Операторы сравнения выглядят довольно просто, однако у операций сравнения строк есть определённые особенности, которых мы коснёмся ниже. Вот список операторов.
str1 = str2 # Проверяет строки на равенство, возвращает истину, если строки идентичны. str1 != str2 # Возвращает истину, если строки не идентичны. # операторы «>» и «<» необходимо экранировать с помощью обратной косой черты, str1 \< str2 # Возвращает истину, если str1 меньше, чем str2. str1 \> str2 # Возвращает истину, если str1 больше, чем str2. -n str1 # Возвращает истину, если длина str1 больше нуля. -z str1 # Возвращает истину, если длина str1 равна нулю. #!/bin/bash user ="likegeeks" if then echo "The user $user is the current logged in user" fi
Сравнение чисел
В скриптах можно сравнивать числовые значения. Ниже приведён список соответствующих команд.
Сравнения пишем в обязательно пробелы в скобках
# eq - equal # ge - greater equal # gt - greater than # le - less equal # lt - less than # ne - not equal n1 -eq n2 # Возвращает истинное значение, если n1 равно n2. n1 -ge n2 # Возвращает истинное значение, если n1 больше или равно n2. n1 -gt n2 # Возвращает истинное значение, если n1 больше n2. n1 -le n2 # Возвращает истинное значение, если n1 меньше или равно n2. n1 -lt n2 # Возвращает истинное значение, если n1 меньше n2. n1 -ne n2 # Возвращает истинное значение, если n1 не равно n2. val1=6 if then echo "The test value $val1 is greater than 5" else echo "The test value $val1 is not greater than 5" fi
Let
let это встроенная функция bash, которая позволяет производить базовые арифметические операции.
Используется следующим образом:
Рассмотрим примеры в скрипте
let_example.sh
Разберём команды по очереди:
Строка 4 — Это простейшая форма записи без кавычек.
Помните, что если вычисление идёт без кавычек — ставить пробелы нельзя
Строка 7 — Если поставить кавычки — можно пользоваться пробелом для лучшей читаемости.\
Строка 10 — Увеличиваем значение на 1. Это аналог «a = a + 1».
Строка 16 — В выражение можно включить и другие переменные.
./let_example.sh 11
99102041
Таблица основных операторов
Оператор | Операция |
---|---|
+, -, \*, / | Сложение, вычитание, умножение, деление |
var++ | Увеличение переменной на 1 |
var— | Уменьшение переменной на 1 |
% | Модуль: возвращает остаток от деления |