Сценарий оболочки: [слишком много аргументов - PullRequest
0 голосов
/ 03 марта 2019

Может кто-нибудь объяснить, почему мое if утверждение не работает?

if [ [ $# -ge 2 ] && [ [ grep -o "$2" $1 | wc -l ] -gt 0  ] ]

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Как уже отмечали другие, у вас неверные скобки, но я все равно написал бы этот код как отдельные тесты, чтобы вы могли предоставить значимые сообщения об ошибках, например:

(( $# >= 2 ))     || { printf '$# is too small\n' >&2; exit 1; }
grep -q "$2" "$1" || { printf 'grep found nothing\n' >&2; exit 1; }

или что бы то ни былопытаюсь выразить.Что бы ты ни делал - будь проще ...

0 голосов
/ 03 марта 2019

Заменить:

[ [ $# -ge 2 ] && [ [ grep -o "$2" $1 | wc -l ] -gt 0  ] ]

На:

[ $# -ge 2 ] && grep -q "$2" "$1"

В этой команде:

  • [ $# -ge 2 ] проверяет, есть ли 2 илибыло предоставлено больше параметров

  • && логично и

  • grep -q "$2" "$1" возвращает значение true, если шаблон $2 появляется в файле $1.Опция -q говорит grep, чтобы он молчал и просто установил код выхода, который будет искать команда if.

Пример:

Рассмотрим каталог с этим файлом:

$ cat input.txt
a pattern here

Давайте установим параметры такими, какими они были бы в сценарии оболочки:

$ set -- input.txt pattern

Теперь давайте запустим нашу команду:

$ if [ $# -ge 2 ] && grep -oq "$2" $1; then echo yes; fi
yes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...