Как упростить этот код оболочки bash - PullRequest
0 голосов
/ 17 февраля 2012

Это мой код

if  grep -q $lines scanHistory;then
    echo -n ''
else
    if grep -q $lines waiting;then
        echo -n ''
    else
        Download $lines
        echo "---$lines was download successfully"
    fi
fi

мои цели таковы, что если $ line не может быть найдена как в scanHistory, так и в ожидании, тогда запустите Download.

Я пытался создать этот кодболее просто, и напишите , если , как

, если grep -qv $ lines scanHistory && grep -qv $ Ожидающие строки;затем

....

но не удалось ....

Ответы [ 4 ]

5 голосов
/ 17 февраля 2012

попробовать:

if ! grep -q $lines scanHistory && ! grep -q $lines waiting; then ...

Первоначальная попытка использования grep -v не удалась, потому что grep -v успешно выполняется, если какая-либо строка ввода не соответствует шаблону.

1 голос
/ 17 февраля 2012

Может быть, вы хотите

  if ! ( grep -q $lines scanHistory || grep -q $lines waiting ) ; then

  ....

Проблема в том, что -v не работает так, как вы думаете

Когда вы grep nonexistant file, вы получаете 1, оно не нашло его, но когда вы grep -v nonexistant file, код возврата равен 0, потому что все остальные строки в file DID отрицательное совпадение 'не существуют.

Надеюсь, это поможет.

0 голосов
/ 17 февраля 2012

Использование операторов короткого замыкания bash && и ||:

grep -q $lines scanHistory || 
  grep -q $lines waiting || 
  Download $lines &&
  echo "---$lines was download successfully"

Его можно поставить одной строкой, как показано ниже, но приведенное выше более читабельно:

grep -q $lines scanHistory || grep -q $lines waiting || Download $lines && echo "---$lines was download successfully"
0 голосов
/ 17 февраля 2012
    grep -q -e "$lines" scanHistory -e "$lines" waiting
    if [ $? -ne 0 ] # Check if the above command is a success or not, if not run downlaod.
    then
        <run_Download>
    fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...