2009-11-07 6 views
1

Я пытаюсь проверить ввод с помощи и regex.Here задать расширенное это строка из сценария (с-оболочка):Как задать расширенную значения_переменную Unix сценарий оболочки

echo $1 | egrep '^[0-9]+$' 
if ($status == 0) then 
set numvar = $1 
else 
    echo "Invalid input" 
    exit 1 
endif 

Если эхо I конвейера его задать расширенную работает, но также печатает переменную на экране, и это то, что мне не нужно.

ответ

4

Чтобы просто подавить вывод можно перенаправить его в нулевое устройство.

echo $1 | egrep '^[0-9]+$' >/dev/null 
if ($status == 0) then 
set numvar = $1 
else 
    echo "Invalid input" 
    exit 1 
endif 

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

Кроме того, если вы используете csh, статус не хранится в $? не в $status

+1

Я использовал параметр -c, как вы предложили, и я также установил новую переменную, которая будет использоваться в выражении if. set temp = 'echo $ 1 | egrep -c '^ [0-9] + $' ' if ($ temp! = 0) then – Mike55

+1

В csh статус выхода действительно хранится в' $ status' –

+0

Я добавил разъяснение о csh и добавлю csh. –

0

вы можете использовать AWK

$ echo "1234" | awk '{print $1+0==$1?"ok":"not ok"}' 
ok 
$ echo "123d4" | awk '{print $1+0==$1?"ok":"not ok"}' 
not ok 
+0

Спасибо, но я бы предпочел egrep, только потому, что я не знаю awk. Я, вероятно, дам это в будущем, но пока у меня нет времени, чтобы узнать это. – Mike55

3

grep имеет -q вариант, который подавляет вывод

Итак:

egrep -q '^[0-9]+$' 
+1

На странице руководства написано: «Переносимые сценарии оболочки должны избегать ссылок -q и -s и должны перенаправлять стандартный и вывод ошибок на/dev/null вместо. (-s указывается POSIX.)« –

+0

@Dennis - Вы правы насчет проблема переносимости. Фактически оба параметра -s и -q задаются POSIX. Опция -q действует так, как я ее здесь использую, опция -s подавляет сообщения об ошибках. См. Http://www.gnu.org/software/grep/manual/html_node/General-Output-Control.html#General-Output-Control –

+1

портативные сценарии оболочки, вероятно, не будут записаны в csh –

Смежные вопросы