Я пытаюсь проверить, является ли переменная точно двумя числами, но я, может казаться, не понимаю это.
Как Вы делаете регулярные выражения проверки (regex) в KornShell (ksh)?
Я попробовал:
if [[ $month =~ "[0-9]{2}" ]]
if [[ $month = _[0-9]{2}_ ]]
Я не смог найти любые документы о нем.
Понимание?
case $month in
[0-9][0-9]) echo "ok";;
*) echo "no";;
esac
должны работать.
Если вам нужен полный поиск по регулированию REGEXP, вы можете использовать Exep
, как это:
if echo $month | egrep -q '^[0-9]{2}$'
then
echo "ok"
else
echo "no"
fi
Откуда я составлял, это, скорее всего, проверяет числовые месяцы:
if (( $month >= 1 && $month <= 12 ))
или
[[ $month =~ ^([1-9]|1[012])$ ]]
или включить ведущий ноль для однозначных месяцев:
[[ $month =~ ^(0[1-9]|1[012])$ ]]
ksh не использует регулярные выражения; Он использует проще, но все еще довольно полезный язык называется «шаблоны раковины». Ключевыми идеями являются
[0-9]
или [Chly]
соответствовать любому символу в классе. .
не является специальным персонажем; Это соответствует только .
. ?
соответствует любому одному символу. *
соответствует любой последовательности символов. ^
и заканчивается $
. Глобабийские узоры не такие мощные, как обычные выражения, но они намного проще читают, и они очень удобны для сопоставления имена файлов и простых слов. Корпус
конструкция - мой любимый для совпадения, но есть другие.
Как уже отмечалось ALOK, вы, вероятно, хотите
case $number in
[0-9][0-9]) success ;;
*) failure;;
esac
, хотя, возможно, вы можете предпочесть не совпадать с двумязначным числом с начальным нулем, поэтому предпочитаю [1-9] [0-9]
.
Вы также можете попробовать это
$ month=100
$ [[ $month == {1,2}([0-9]) ]] && echo "ok" || echo "no"
no
$ [[ $month == [0-9][0-9] ]] && echo "ok" || echo "no"
no
$ month=10
$ [[ $month == {1,2}([0-9]) ]] && echo "ok" || echo "no"
ok
$ [[ $month == [0-9][0-9] ]] && echo "ok" || echo "no"
ok