BASH проверить, является ли argv числом от 0 до 100

В Debian 9 и 10 с Xfce все, что мне нужно было сделать, это добавить это в/etc/lightdm/lightdm.conf:

[Seat:*]
autologin-user=david

Несмотря на то, что говорят другие ответы, мой пользователь не должен быть в группе autologin, и мне не нужно было ничего делать с PAM.

(Источник:https://wiki.debian.org/LightDM#Enable_autologin)

1
02.08.2018, 19:31
2 ответа
if [ "$1" -lt 1 ] || [ "$1" -gt 100 ]; then
    echo 'error (out of range)' >&2
    exit 1
fi

Это предполагает, что вещь в $1на самом деле является целым числом. Вы можете проверить это заранее с помощью

case "$1" in
    ("" | *[!0-9]*)
        echo 'error (not a positive decimal integer number)' >&2
        exit 1
esac

Это вызовет exit, если $1содержит что-либо, кроме десятичных цифр, или пусто.

Сочетание этих:

case "$1" in
    ("" | *[!0-9]*)
        echo 'error (not a positive decimal integer number)' >&2
        exit 1
        ;;
    *)
        if [ "$1" -lt 1 ] || [ "$1" -gt 100 ]; then
            echo 'error (out of range)' >&2
            exit 1
        fi
esac

Но делать одно за другим может выглядеть лучше:

case "$1" in
    ("" | *[!0-9]*)
        echo 'error (not a positive decimal integer number)' >&2
        exit 1
esac

if [ "$1" -lt 1 ] || [ "$1" -gt 100 ]; then
    echo 'error (out of range)' >&2
    exit 1
fi

Имейте в виду, что [арифметические операторы всегда рассматривают числа как десятичные, даже если они начинаются с 0, в то время как арифметические расширения оболочки в оболочках POSIX рассматривают числа, начинающиеся с 0, как восьмеричные (0100 равно 100 для [, но 64 для$((...))).

2
27.01.2020, 23:31

Используйте арифметику вместо регулярного выражения:

if ! (( num >= 0 && num <= 100 ))

(Это предполагает, что num является числовым. Если вам также нужно убедиться, что $num является числовым, используйте регулярное выражение.)

0
27.01.2020, 23:31

Теги

Похожие вопросы