Условные операторы знакомы каждому кто хоть раз пытался писать программы и используются во всех языках программирования.
if-then-else
На примере разберемся с операторами сравнения
#!/bin/bash
onepar=$1 #в переменную onepar засовываем первый параметр скрипта
twopar=$2 #в переменную twopar засовываем второй параметр скрипта
if [[ "$onepar" -eq "$twopar" ]] #if обозначает слово ЕСЛИ. И у нас получается Если $onepar равен (используется оператор сравнения -eq) $twopar. В фигурных скобках мы обозначаем то что надо сравнить.
then #То выполняем действие.
echo «Равны» #Выводим сообщение о том что они действительно равны.
exit 0 # выходим из скрипта без ошибки
else # если же они не равны
echo «Не равны» #Выполняем действие.
fi #обозначаем окончание условия.
Результат выполнения скрипта
tisg@tisg:~$ ./start.sh 1 1
Равны
tisg@tisg:~$ ./start.sh 1 2
Не равны
В этом примере мы использовали структуру if-then-else. Посмотрим как она выглядит.
if [команда или несколько команд возвращающих код возврата]
then
[если выражение после команды if верно выполнить команду.]
else
[если выражение после if не верно выполнить другую команду.]
fi #обозначаем конец условия
Вот список наиболее используемых операторов сравнения
Файлы
-a file
истинно если файл существует.
-d file
истинно если файл существует и является директорией.
-f file
истинно если файл существует и является обычным файлом.
-r file
истинно если файл существует и доступен для чтения.
-s file
истинно если файл существует и его размер больше 0.
-w file
истинно если файл существует и доступен для записи.
-x file
истинно если файл существует и является исполняемым.
file1 -nt file2
истинно если файл file1 новее чем file2 или file1 (в соответствии со временем последнего изменения) существует, а file2 нет.
file1 -ot file2
истинно если файл file1 старше чем file2 или file2 существует, а file1 нет.
file1 -ef file2
истинно если оба файла ссылаются на одно и то же устройство или инод.
Строки
-z string
истинно если строка имеет нулевую длину.
-n string
истинно если длина строки не нулевая.
string1 = string2
string1 -eq string2
истинно если строки равны.
string1 != string2
string1 -ne string2
истинно если не равны.
string1 < string2
string1 -lt string2
истинно если строка 1 стоит в алфавитном порядке перед строкой 2.
string1 > string2
string1 -gt string2
истинно если строка 1 стоит в алфавитном порядке после строки 2.
-a,(&&) #логическое «И»
-o,(||) # логическое «ИЛИ»
Пример:
#!/bin/bash
myvar=$1 #Привсваиваем переменной первый параметр
if [ -z "$myvar" ] #проверяем не пустой ли он
then #Если пустой
echo «Введите первый параметр» #Выводим текст
else #Если не пустой
echo $myvar #Выводим этот параметр
fi #Заканчиваем условие
Работа скрипта:
tisg@ubuntu:~$ ./start.sh
Введите первый параметр
tisg@ubuntu:~$ ./start.sh 5
5
Если нужно сравнить одну переменную с большим количеством параметров идеально подойдет оператор case
Пример:
#!/bin/bash
echo «Выберите редатор для запуска:» #выводим меню
echo «1 Запустить nano»
echo «2 Запустить vi»
echo «3 Запустить gedit gui»
echo «4 Выход»
read doing #читаем в переменную $doing то что выбарает пользователь
case $doing in
1)
/usr/bin/nano # если $doing содержит 1, то запустить nano
;;
2)
/usr/bin/vi # если $doing содержит 2, то запустить vi
;;
3)
/usr/bin/gedit # если $doing содержит 3, то запустить gedit gui
;;
4)
exit 0
;;
*) #если пользователь ввёл неподходящую цифру выполнять следуещее действие
echo «Введено неправильное действие»
esac #окончание оператора case.
Источник: http://ubuntu-russian.ru
Автор: Cлоны_они_повсюду