Intereting Posts
Добавление заголовка в исходящую электронную почту с постфиксным Что такое JID (идентификатор задания) и всегда ли он меньше PID? Миграция от thunderbird до sylpheed при сохранении структуры папок Как прочитать команду оболочки вслух и понять ее? Удаление двойных кавычек и подстановка запятой внутри него Невозможно получить всплывающие меню, чтобы что-либо сделать в графических интерфейсах приложений KDE / QT в Ubuntu (сеанс Gnome) Как ввести тайм-аут для сценариев оболочки? Простой ограниченный scp Настройка ad-hoc в Debian с помощью DHCP? Режим символьного набора openssl s_client Получить дату следующей субботы с определенной даты Внешние устройства хранения, не указанные в сценарии init, запущены генерировать ссылки страниц с добавочной переменной Менеджер входа в SLIM Заставляет окно Urxvt потерять эффект прозрачности / непрозрачности эталонная проблема при использовании sed

Как ввести условие для проверки 0 или более 0 в случае

Я пытаюсь использовать случай для запуска этой функции

if [[ $input -gt 0 || $input -eq 0 ]]; 

Можно ли ввести случай, чтобы проверить вход для большего, чем 0 или равный 0, или даже 0 и меньше 0, в случае.

Если нужно обрабатывать только целые числа и -0 не нужно обрабатывать правильно, то следующие работы:

 case "$input" in ''|*[!0-9-]*|[0-9-]*-*) echo "invalid input" ;; [0-9]*) echo "input >= 0" ;; -[1-9]*) echo "input < 0" ;; *) echo "invalid input" ;; esac 

Но обычно лучше использовать, if .. then .. elif ... then .. else .. fi конструкции для разграничения случаев с более сложными выражениями, чем case с сопоставлением с образцом.

Этот примерный сценарий sh проверяет, что переменная является целым числом.

 #!/bin/sh num=$1 if [ $num -eq $num ] 2> /dev/null then case 1 in $(($num < 0)) ) echo $num is negative.;; $(($num <= 100)) ) echo $num is between 0 and 100.;; $(($num <= 1000)) ) echo $num is between 100 and 1000.;; * ) echo $num is greater than 1000.;; esac else echo $num is not a number. fi 

Мы проверяем переменную на число с помощью оператора -eq . Нам нужно подавить его вывод на stderr если он не является числом.

Если переменная содержит целое число, case затем оценивает диапазоны в выложенной форме. Выражения $(( some comparison )) либо будут оцениваться как «true» (1) или «false» (0); таким образом, вы можете проверить любой список диапазонов.

 [ "$input" -gt -1 ] || exit 

…или…

 case ${input:?NULL} in (?*[!0-9]*|[!-0-9]*|[!0-9]) ! : ;; (-*[!0]*) echo \<0 ;; (*[!0]*) echo \>1 ;; (0*) echo 0 ;; esac 
 case $([[ $input =~ ^-?[0-9]+$ ]] && [[ $input -gt 0 || $input -eq 0 ]] ; echo $?) in 0) echo "good" ;; 1) echo "bad" ;; *) echo "weird" ;; esac 

Если вам не нравится сложность внутри дела, по крайней мере соответствие регулярных выражений работает хорошо и просто.