- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
VK приобрела 70% в структуре компании-разработчика red_mad_robot
Которая участвовала в создании RuStore
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Как проверить является ли переменная не пустой и числом, при этом пока оба условия не удовлетворены ввод должен быть повторен? По отдельности - легко! А, если вместе проверять - дичь какая-то...
Если я правильно понял ваш вопрос, то вам нужна конструкция вроде этой:
re='^[0-9]+$'
if ! [[ $your_number =~ $re ]] && [ !-z $your_number ]; then
echo "error: Not a number" >&2; exit 1
fi
При этом, "re" - ваше регулярное выражение, задающее целочисленные номера
"!-z" - проверяет переменную на пустое значение (восклицательный знак - отрицание, т.е. переменная должна быть не пустой)
adm.unix, я попробовал, в итоге примерно та же ошибка что и у меня: !-z: ожидается унарный оператор. Что ему нужно не очень понятно. Хотя проверка просто на пустую строку работает идеально. После && начинаются проблемы.
Хм, а у меня отрабатывает нормально. А вывод ошибки можете показать? Какая у вас версия bash?
adm.unix, 4.4.12.
Синтаксис подправил, ошибка исчезла, моя ошибка. Но все равно не работает. Не реагирует ни на какие ошибки, просто выполняет программу (при правильном вводе). Если убрать все перед &&, то на пустую строку проверят нормально.
Ваш код поместил в цикл:
#!/bin/bash
re='^[0-9]+$'
echo "ввести первое значение"
read var1
while [ -z $var1 ] && [[ $var1 =~ $re ]]; do
echo "error: Not a number" >&2; exit 1
read var1
done