Мне дали сценарий для модификации. Он использует /bin/sh, и я не могу это изменить.

Я хочу проверить, является ли аргумент целым числом, в частности, 1 или 2.

Как мне это сделать и учесть, что параметр либо отсутствует, либо является строкой, а также недопустимым целым числом?

-2
Mawg says reinstate Monica 24 Окт 2019 в 11:08
Можете ли вы добавить больше контекста? Как вы сейчас проверяете аргументы?
 – 
RomanPerekhrest
24 Окт 2019 в 11:12
Звучит как домашнее задание. Что вы пробовали, над каким произведением вам нужна помощь/объяснение?
 – 
Lambert
24 Окт 2019 в 11:31
Какое представление этих целых чисел вы хотите разрешить? (0x1, +1, 001, 1.0, 1e0, 0x2p-1, 2 - 1, 18446744073709551617? Или только буквальный односимвольный 1?)
 – 
Stéphane Chazelas
24 Окт 2019 в 12:10
"How do you currently check the arguments?" - аргумент добавляется и должен быть проверен. Представьте только как 1 или 2. Не домашнее задание. Работа - а на Python не пускают :-(
 – 
Mawg says reinstate Monica
24 Окт 2019 в 12:49

2 ответа

Лучший ответ

Чтобы проверить, является ли аргумент скрипта 1 или 2, вы можете просто использовать оператор case.

В приведенном ниже коде предполагается, что вы хотите проверить $1:

case $1 in
    [12])
        # $1 is 1 or 2
        ;;
    *)
        # $1 is not 1 and not 2
esac

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

Вы также можете использовать явный оператор if:

if [ "$1" = '1' ] || [ "$1" = '2' ]; then
    # $1 is 1 or 2
else
    # $1 is not 1 and not 2
fi
2
Kusalananda 24 Окт 2019 в 12:41

Проверьте ссылку ниже, чтобы проверить, что значение аргумента является целым числом.

https://stackoverflow.com/questions/2210349/test-whether-string-is-a-valid-integer

И чтобы проверить отсутствие переменной, скажем, вы назначаете свой первый аргумент переменной

var=$1

 if [ ! -z "$var" ]; then
    echo "value is present"
 else
    echo "value is not present"
 fi 
-1
manchanda 24 Окт 2019 в 11:29
1
Нет необходимости проверять, что данный аргумент является целым числом, так как аргумент легко проверить как строку (есть только две допустимые строки, 1 и 2) .
 – 
Kusalananda
24 Окт 2019 в 12:36