Здесь показаны различия между двумя версиями данной страницы.
linux:bash-if [2015/04/27 12:07] |
linux:bash-if [2021/02/11 09:20] (текущий) |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ===== Bash - проверки ===== | ||
+ | Отсюда: http://wiki.hasanov.ru/ubuntu/bash_input | ||
+ | === Проверка UID === | ||
+ | <code> | ||
+ | UID_ROOT=0 | ||
+ | |||
+ | if [ "$UID" -ne "$UID_ROOT" ] | ||
+ | then | ||
+ | echo "Для работы требуются права root" | ||
+ | exit 1 | ||
+ | fi | ||
+ | </code> | ||
+ | === Проверка входящих параметров === | ||
+ | == Проверка на существование == | ||
+ | <code> | ||
+ | if [ -z "$1" ] | ||
+ | then | ||
+ | echo "Значение не задано" | ||
+ | exit 1 | ||
+ | fi | ||
+ | </code> | ||
+ | |||
+ | == Обязательно присутствие двух параметров == | ||
+ | <code> | ||
+ | if [[ -z "$1" || -z "$2" ]] | ||
+ | then | ||
+ | echo "Значение не задано" | ||
+ | exit 1 | ||
+ | fi | ||
+ | </code> | ||
+ | |||
+ | == Проверки файлов и каталогов == | ||
+ | |||
+ | == Проверка на существование директории == | ||
+ | |||
+ | <code> | ||
+ | if [ ! -d "$DIR" ]; then | ||
+ | echo "Директория не верна" | ||
+ | exit 1 | ||
+ | fi | ||
+ | </code> | ||
+ | |||
+ | == Проверка на существование файла == | ||
+ | <code> | ||
+ | if [ ! -e "$FILE" ]; then | ||
+ | echo "Файл не найден" | ||
+ | exit 1 | ||
+ | fi | ||
+ | </code> | ||
+ | |||
+ | == Директория существует и доступна для записи == | ||
+ | <code> | ||
+ | if ! [[ -d "$FTPDIR" && -w "$FTPDIR" ]]; then | ||
+ | echo "Директория не верна или отсутствуют права для записи" | ||
+ | exit 1 | ||
+ | fi | ||
+ | </code> | ||
+ | |||
+ | === Прочее === | ||
+ | |||
+ | == Проверка существования файла, а также есть есть права на чтение и выполнение. ==\\ | ||
+ | Если условия не выполняются, то выполнится exit\\ | ||
+ | <code> | ||
+ | test -x /usr/sbin/ || exit 1 | ||
+ | </code> | ||
+ | |||
+ | == Проверка существования пользователя == | ||
+ | <code> | ||
+ | grep "^$username:" /etc/passwd >/dev/null | ||
+ | if [ $? -ne 0 ]; then | ||
+ | echo "Пользователь не найден" | ||
+ | exit 1 | ||
+ | fi | ||
+ | </code> | ||
+ | |||
+ | ===== То же самое - но проще ===== | ||
+ | Отсюда: http://ru.najomi.org/_nix/bash/comparsion\\ | ||
+ | \\ | ||
+ | ==== Сравнения чисел ==== | ||
+ | <code> | ||
+ | [ A -eq B ] # равно | ||
+ | [ A -ne B ] # не равно | ||
+ | [ A -gt B ] | ||
+ | [ A -lt B ] | ||
+ | [ A -ge B ] | ||
+ | [ A -le B ] | ||
+ | (( A < B )) | ||
+ | (( A <= B )) | ||
+ | (( A > B )) | ||
+ | (( A >= B )) | ||
+ | </code> | ||
+ | ==== Сравнения строк ==== | ||
+ | <code> | ||
+ | [ A = B ] | ||
+ | [ A == B ] | ||
+ | [ A != B ] | ||
+ | [ A \< B ] | ||
+ | [ A \> B ] | ||
+ | [ -z A ] # строка пустая? | ||
+ | [ -n A ] # строка не пустая? | ||
+ | </code> | ||
+ | ==== Сравнения файлов ==== | ||
+ | <code> | ||
+ | -e Файл существует | ||
+ | -f Обычный файл | ||
+ | -s Ненулевой размер файла | ||
+ | -d Является каталогом | ||
+ | -b Является блочным устройством (cdrom) | ||
+ | -c Является символьным устройство | ||
+ | -p Является каналом | ||
+ | -h Является символической ссылкой | ||
+ | -L Является символической ссылкой | ||
+ | -S Является сокетом | ||
+ | -t 0 Является stdin | ||
+ | -t 1 Является stdout | ||
+ | -r Доступен для чтения | ||
+ | -w Доступен для записи | ||
+ | -x Доступен для исполнения | ||
+ | -g Есть sgid | ||
+ | -u Есть suid | ||
+ | -k Есть sticky bit | ||
+ | -O Я — владелец? | ||
+ | -G Моя группа — владелец? | ||
+ | -N Файл был модифицирован после чтения? | ||
+ | F1 -nt F2 F1 новее чем F2? | ||
+ | F1 -ot F2 F1 старее чем F2? | ||
+ | F1 -ef F2 F1 является жесткой ссылкой F2? | ||
+ | </code> | ||
+ | ==== Сопоставляем файл с регулярным выражением ==== | ||
+ | <code> | ||
+ | if [[ $file =~ ^[0-9]+\.jpg$ ]] ; then | ||
+ | echo $file; | ||
+ | else | ||
+ | echo '!' $file; | ||
+ | fi | ||
+ | </code> | ||
+ | |||
+ | ===== Операнды ===== | ||
+ | * && - логическое "И" | ||
+ | * || - логичекое "или" | ||
+ | **Замечание** - чтобы использовать операнды, скобки должны быть двойные <nowiki>[[ ... ]]</nowiki> | ||
+ | Пример: | ||
+ | <code> | ||
+ | if [ "$1" != 'help' ] || ["$1" != 'auto'] || [ "$1" != 'toftp' ] || [ "$1" != 'tolocal' ] || [ "$1" != '' ] | ||
+ | then | ||
+ | echo "" | ||
+ | echo "Неверный параметр $1" | ||
+ | exit 1 | ||
+ | else | ||
+ | param=$1 | ||
+ | fi; | ||
+ | </code> |