Linux Shell Script Недопустимый номер - PullRequest
0 голосов
/ 29 февраля 2012

Я пытаюсь выяснить количество вхождений шаблона в файл со следующим кодом:

#!/bin/sh

var='grep -c 'abc' file1'

if [ "$var" -lt 10 ]; then
     echo "less than 10"
fi

Я получаю сообщение об ошибке: Неверный номер: grep -c abc file1

Может кто-нибудь, пожалуйста, помогите.

Спасибо.

Ответы [ 4 ]

3 голосов
/ 29 февраля 2012

Используйте обратные метки (`) вместо апострофов ('):

#!/bin/sh

var=`grep -c 'abc' file1`

if [ "$var" -lt 10 ]; then
     echo "less than 10"
fi
1 голос
/ 29 февраля 2012

Вы использовали одиночную кавычку, а не обратную черту, поэтому для вашей переменной var фактически задан строковый литерал, а не результат этой команды.Вы бы увидели, что если вы сначала отобразите переменную:

pax$ var='grep -c 'abc' file1'
pax$ echo "[$var]"
[grep -c abc file1]

Версия обратного ключа будет:

var=`grep -c 'abc' file1`

Но я хотел бы предложить использовать bash, где это возможно длясценарии.Вам будет сложно найти основной дистрибутив, у которого его нет по умолчанию, и некоторые считают его более мощным, чем другие оболочки.На самом деле, в некоторых системах /bin/sh равен bash.

Если вы можете пойти по этому пути, то конструкция $() обычно является лучшей идеей, так как вы можете вкладывать их безболь:

var=$(grep -c 'abc' file1)
1 голос
/ 29 февраля 2012

Возможно, вам нужны обратные кавычки (`), а не одинарные кавычки ('). i.e.:

var=`grep -c 'abc' file1`
0 голосов
/ 29 февраля 2012

Попробуйте опубликовать следующее, чтобы получить лучший ответ:

  • grep --version
  • bash --version, если ваша оболочка Bash или сообщите нам, какую оболочку вы используете.
  • используйте grep в бэк-тиках или как показано ниже
  • [[ более универсален в Bash, чем [.

Наконец, на моем компьютере работает следующеебез ошибок:

#!/bin/bash
var=$(grep -c "abc" file1)
if [[ "$var" -lt 10 ]]
then
    echo "less than 10"
fi

Исполнение:

user@machine:~$ cat file1
abc
abcd
abcde
abcdef
user@machine:~$ 
user@machine:~$ ./t.sh 
less than 10
user@machine:~$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...