Здесь показаны различия между двумя версиями данной страницы.
|
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> | ||