Я пишу сценарий оболочки, где мне нужно передать аргумент при выполнении. Мой вопрос заключается в том, как проверить, соответствует ли аргумент заданному шаблону. Пример:

./script.sh 1 - 9

В этом примере 1 - 9 - это только один аргумент, а шаблон - "%s - %s" . Как проверить, соответствует ли шаблон. Спасибо за совет

1 ответ1

0

Три основные программы, которые я использую в сценариях оболочки: sed, grep и awk. Крутая вещь в каждом из них - регулярные выражения. В оболочке $ @ - это все позиционные параметры, поэтому вы можете отобразить $ @ и передать его в awk или grep.

echo $@ | awk '/\S+ - \S+/ {print}'

С помощью grep вы можете проверить возвращаемое значение, $?:

$ echo 1 - 9 | egrep '\S+ - \S+'
1 - 9
$ echo $?
0
$ echo  - 9 | egrep '\S+ - \S+'
$ echo $?
1

Проверьте возвращаемое значение с помощью теста:

ARGS="$@"
MATCH=$(echo "$ARGS" | egrep '^\S+ - \S+')
if [ $? = 0 ]
then
  echo "good match"
fi

Или используя MATCH выше:

if [ -n "$MATCH" ]
then
  echo "good match"
fi

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .