Написание простого скрипта оболочки на VPS (часть 3)

Ни в одном из полнофункциональных скриптов и языков программирования не обойтись без условных операторов. Третья часть руководства посвящена операторам bash-оболочки if и else и их использованию. Данная статья предполагает, инструкции первого руководства выполнены, а значит папка скрипта оболочки уже настроена.

Команда if

Условные операторы используются для выполнения определенных действий в случае, если условие истинно или ложно. В скриптах оболочки это за это отвечает команда if. За ней следует выражение, которое нужно проверить. Такое выражение также может быть кодом завершения выполнения команды, математическим выражением, и т.п. При работе с кодом завершения команда очень проста:

if ls folder
then
echo "Folder exists"
fi

Если папка существует, будет запущена команда echo, поскольку команда ls выведет код завершения 0 в случае, если утверждение верно. Соответственно, если папки не существует, текст не будет выведен. После любого выражения с командой if нужно использовать then; чтобы закончить выражение, используйте fi. К примеру, если команда используется не для работы с кодом завершения, а для проверки математических выражений, нужно также использовать команду test. В скриптах оболочки существуют следующие операторы сравнения:

-eq or Is equal to
-ne or Is not equal to
-lt or Is less than
-le or Is less than or equal to
-gt or Is greater than
-ge or Is greater than or equal to

Команду test можно написать двумя способами:

if test 4 -gt 3

или

if [ 4 -gt 3]

Оба варианта работают абсолютно одинаково и тоже требуют использования then и fi. Например:

if [ 20 -lt 10 ]
then
echo "What?"
fi

Конечно, результат «What?» никогда не будет выведен, поскольку 20 всегда больше 10.

Команда else

Что делать, чтобы отобразить сообщение пользователю, если оператор if сообщает, что условие ложно? Команда else, как следует из названия, работает противоположным команде if способом.

if [ 20 -lt 10 ]
then
echo "What?"
else
echo "No, 20 is greater than 10."
fi

Кроме математических выражений можно также сравнивать строки с командами if/else. Для этого используется немного другой синтаксис, но все они по-прежнему работают с командами test или «[ ]». Базовый синтаксис:

string = string   or string equals string
string != string  or string does not equal string
string            or string is not null or not defined
-n string         or string is not null and exists
-z string         or string is null and exists

Таким же образом можно узнать свойства файла:

-s file    tests for a file that is not empty
-f file    tests if the file exists and is not a folder
-d folder  tests if it's a folder and not a file
-w file    tests if the file is writable
-r file    tests if the file is read-only
-x file    tests if the file is executable

Вложенные условные операторы if

Выражения с if можно помещать в другие выражения, таким образом создавая так называемые вложенные операторы if. В качестве примера ниже приведен отрывок из файла read, который упоминался в предыдущем руководстве.

#!/bin/bash
echo "Input which file you want created"
read file
if [ -f $file ]
then
echo "The file already exists"
else
touch $file
if [ -w $file ]
then
echo "The file was created and is writable"
else
echo "The file was created but isn't writable"
fi
fi

Пример скрипта

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

touch ~/bin/filebackup3
chmod +x ~/bin/filebackup3
nano ~/bin/filebackup3

Отредактируйте его:

#!/bin/bash
#Backup script 3.0
#Description: makes a copy of any given file at the backup folder
#Author: Your Name
#Date: 9/29/2013
#Request the backup folder from the user:
echo -e "\e[47m\e[1m\e[32mFile Backup Utility\n\e[39m\e[0m\e[47mPlease input your backup folder:"
read BACKUPFOLDER
#The script will make sure the folder exists
if [ -d $BACKUPFOLDER ]
then
echo "You backup folder exists and will be used."
else
mkdir $BACKUPFOLDER
if [ -d $BACKUPFOLDER ]
then
echo "Backup folder created successfully."
else
echo -e "I do not have the rights to create your backup folder.\nThis script will now exit."
exit 1
#exit 1 is a command that exits the script with an error code
fi
fi
#Request files to be backed up:
echo -e "\e[30mWhich files do you want backed up?\e[39m\e[49m"
read FILES
if [ -n $FILES ]
then
cp -a $FILES $BACKUPFOLDER
else
echo "File does not exist."
fi

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

Заключение

Условные операторы способны значительно упростить  скрипт оболочки, потому очень важно уметь продуктивно их использовать.

Читайте также:

Tags: