2011/9/10 Artem Chuprina <[email protected]>: >> > if printf "%s" "$1" | grep '^[1-9][0-9]*$' >/dev/null 2>&1 >> > then : >> > else exit 1 >> > fi >> >> Спасибо! К сожалению, расшифовать это мне не удалось. Каким образом >> оно упадёт, если в $1 _не только_ цифры? > > Если там не только цифры (причем начинающиеся не с 0) или даже пустая строка, > то регулярное выражение не удовлетворится, и grep завершится с кодом 1. А > поскольку он последний, то это будет код завершения всего pipeline, что после > if. Отсюда - ветка else, где exit 1. > > Или тебе чего расшифровать? Регулярное выражение?
Оно понятно что это не здесь... Ну не понимаю я регулярные выражения :( Впрочем, я вообще предпочитаю _читаемые_ языки. Из программистов в техписатели ушёл, когда C++ всех победил (Python тогда ещё не было, а Дельфи уже уходили). Однако спасибо - в данном случае просто заюзаем :) > А вообще для программирования на шелле существует довольно надежный способ > ломаться - надо включить опцию -e, например, сказав не > > #!/bin/sh > > а > > #!/bin/sh -e > > Тогда любая команда, завершившаяся неудачно (кроме команд, стоящих в условии > if или перед ||) будет приводить к тому, что в этом месте скрипт и завершится. Это да, но когда то, что требует в Питоне int(), в шелле требует regexp, а иначе даже не упадёт нормально, мне становится непросто :) > Intel - тоже Сильмарилл. Только сделанный не так... Представил себе двухядерный Сильмарилл. -- Yours, Mikhail Ramendik Unless explicitly stated, all opinions in my mail are my own and do not reflect the views of any organization

