LINUX.ORG.RU

История изменений

Исправление Kroz, (текущая версия) :

выше посмотри... такой вариант не выполняется, пишет ошибку

Посмотрел. Не нашел. Если там, где ты берешь это в двойные кавычки, то посмотри внимательней на то, что я писал.

Итог:

$ echo "one
two
three" > file.txt

$ if grep 'two' file.txt 1>/dev/null ; then echo "Найдено" ; else echo "Не найдено"; fi                                        
Найдено

$ if grep 'five' file.txt 1>/dev/null ; then echo "Найдено" ; else echo "Не найдено"; fi
Не найдено

$ grep 'two' file.txt 1>/dev/null
$ if [[ "$?" -eq 0 ]] ; then echo "Найдено" ; else echo "Не найдено"; fi
Найдено

$ grep 'five' file.txt 1>/dev/null
$ if [[ "$?" -eq 0 ]] ; then echo "Найдено" ; else echo "Не найдено"; fi
Не найдено

$ if [[ "$( grep 'two' file.txt )" ]]; then echo "Найдено" ; else echo "Не найдено"; fi
Найдено

$ if [[ "$( grep 'five' file.txt )" ]]; then echo "Найдено" ; else echo "Не найдено"; fi
Не найдено
Ключевые моменты:
- по-максимуму используй кавычки
- внимательно смотри за одинарными и двойными кавычками. На всякий случай, если вдруг не знаешь, основное отличие - внутри двойных кавычек bash будет парсить строку перед тем как передать команде (например, раскрывать переменные), значение в одинарных кавычках всегда будет передаваться как есть.
- не используй обратные кавычки `..` ; вместо этого используй конструкцию $(..). Подробней о преимуществах здесь: http://unix.stackexchange.com/questions/118433/quoting-within-command-substit... . Да, и это не отменяет рекомендации заключать это еще и в двойные кавычки.
- используй [[..]] вместо [..] . Сейчас набегут умники с криками «башизм», но если у тебя нет чётких планов запускать скрипт на каких-нибудь рутерах, и до тех пор пока ты начинаешь файл с !/bin/bash (а не !/bin/sh) - это разумно. И было бы правильно изучить разницу между двумя этими конструкциями: http://stackoverflow.com/questions/3427872/whats-the-difference-between-and-i...
- Не используй конструкцию command1 && command2 || command3 вместо if-then-else-fi: она не всегда правильно отрабатывает. А вот конструкция command1 && command2 - хорошая лаконичная замена if-then-fi (без else) если у тебя одна команда в then-fi

/thread

Исправление Kroz, :

выше посмотри... такой вариант не выполняется, пишет ошибку

Посмотрел. Не нашел. Если там, где ты берешь это в двойные кавычки, то посмотри внимательней на то, что я писал.

Итог:

$ echo "one
two
three" > file.txt

$ if grep 'two' file.txt 1>/dev/null ; then echo "Найдено" ; else echo "Не найдено"; fi                                        
Найдено

$ if grep 'five' file.txt 1>/dev/null ; then echo "Найдено" ; else echo "Не найдено"; fi
Не найдено

$ grep 'two' file.txt 1>/dev/null
$ if [[ "$?" -eq 0 ]] ; then echo "Найдено" ; else echo "Не найдено"; fi
Найдено

$ grep 'five' file.txt 1>/dev/null
$ if [[ "$?" -eq 0 ]] ; then echo "Найдено" ; else echo "Не найдено"; fi
Не найдено

$ if [[ "$( grep 'two' file.txt )" ]]; then echo "Найдено" ; else echo "Не найдено"; fi
Найдено

$ if [[ "$( grep 'five' file.txt )" ]]; then echo "Найдено" ; else echo "Не найдено"; fi
Не найдено
Ключевые моменты:
- по-максимуму используй кавычки
- внимательно смотри за одинарными и двойными кавычками. На всякий случай, если вдруг не знаешь, основное отличие - внутри двойных кавычек bash будет парсить строку перед тем как передать команде (например, раскрывать переменные), значение в одинарных кавычках всегда будет передаваться как есть.
- не используй обратные кавычки `..` ; вместо этого используй конструкцию $(..). Подробней о преимуществах здесь: http://unix.stackexchange.com/questions/118433/quoting-within-command-substit...
- используй [[..]] вместо [..] . Сейчас набегут умники с криками «башизм», но если у тебя нет чётких планов запускать скрипт на каких-нибудь рутерах, и до тех пор пока ты начинаешь файл с !/bin/bash (а не !/bin/sh) - это разумно. И было бы правильно изучить разницу между двумя этими конструкциями: http://stackoverflow.com/questions/3427872/whats-the-difference-between-and-i...
- Не используй конструкцию command1 && command2 || command3 вместо if-then-else-fi: она не всегда правильно отрабатывает. А вот конструкция command1 && command2 - хорошая лаконичная замена if-then-fi (без else) если у тебя одна команда в then-fi

/thread

Исправление Kroz, :

выше посмотри... такой вариант не выполняется, пишет ошибку

Посмотрел. Не нашел. Если там, где ты берешь это в двойные кавычки, то посмотри внимательней на то, что я писал.

Итог:

$ echo "one
two
three" > file.txt

$ if grep 'two' file.txt 1>/dev/null ; then echo "Найдено" ; else echo "Не найдено"; fi                                        
Найдено

$ if grep 'five' file.txt 1>/dev/null ; then echo "Найдено" ; else echo "Не найдено"; fi
Не найдено

$ grep 'two' file.txt 1>/dev/null
$ if [[ "$?" -eq 0 ]] ; then echo "Найдено" ; else echo "Не найдено"; fi
Найдено

$ grep 'five' file.txt 1>/dev/null
$ if [[ "$?" -eq 0 ]] ; then echo "Найдено" ; else echo "Не найдено"; fi
Не найдено

$ if [[ "$( grep 'two' file.txt )" ]]; then echo "Найдено" ; else echo "Не найдено"; fi
Найдено

$ if [[ "$( grep 'five' file.txt )" ]]; then echo "Найдено" ; else echo "Не найдено"; fi
Не найдено


Ключевые моменты:
- по-максимуму используй кавычки
- внимательно смотри за одинарными и двойными кавычками. На всякий случай, если вдруг не знаешь, основное отличие - внутри двойных кавычек bash будет парсить строку перед тем как передать команде (например, раскрывать переменные), значение в одинарных кавычках всегда будет передаваться как есть.
- не используй обратные кавычки `..` ; вместо этого используй конструкцию $(..). Подробней о преимуществах здесь: http://unix.stackexchange.com/questions/118433/quoting-within-command-substit...
- используй [[..]] вместо [..] . Сейчас набегут умники с криками «башизм», но если у тебя нет чётких планов запускать скрипт на каких-нибудь рутерах, и до тех пор пока ты начинаешь файл с !/bin/bash (а не !/bin/sh) - это разумно. И было бы правильно изучить разницу между двумя этими конструкциями: http://stackoverflow.com/questions/3427872/whats-the-difference-between-and-i...
- Не используй конструкцию command1 && command2 || command3 вместо if-then-else-fi: она не всегда правильно отрабатывает. А вот конструкция command1 && command2 - хорошая лаконичная замена if-then-fi (без else) если у тебя одна команда в then-fi

/thread

Исправление Kroz, :

выше посмотри... такой вариант не выполняется, пишет ошибку

Посмотрел. Не нашел. Если там, где ты берешь это в двойные кавычки, то посмотри внимательней на то, что я написал.

$ echo "one
two
three" > file.txt

$ if grep 'two' file.txt 1>/dev/null ; then echo "Найдено" ; else echo "Не найдено"; fi                                        
Найдено

$ if grep 'five' file.txt 1>/dev/null ; then echo "Найдено" ; else echo "Не найдено"; fi
Не найдено

$ grep 'two' file.txt 1>/dev/null
$ if [[ "$?" -eq 0 ]] ; then echo "Найдено" ; else echo "Не найдено"; fi
Найдено

$ grep 'five' file.txt 1>/dev/null
$ if [[ "$?" -eq 0 ]] ; then echo "Найдено" ; else echo "Не найдено"; fi
Не найдено

$ if [[ "$( grep 'two' file.txt )" ]]; then echo "Найдено" ; else echo "Не найдено"; fi
Найдено

$ if [[ "$( grep 'five' file.txt )" ]]; then echo "Найдено" ; else echo "Не найдено"; fi
Не найдено


Ключевые моменты:
- по-максимуму используй кавычки
- внимательно смотри за одинарными и двойными кавычками. На всякий случай, если вдруг не знаешь, основное отличие - внутри двойных кавычек bash будет парсить строку перед тем как передать команде (например, раскрывать переменные), значение в одинарных кавычках всегда будет передаваться как есть.
- не используй обратные кавычки `..` ; вместо этого используй конструкцию $(..). Подробней о преимуществах здесь: http://unix.stackexchange.com/questions/118433/quoting-within-command-substit...
- используй [[..]] вместо [..] . Сейчас набегут умники с криками «башизм», но если у тебя нет чётких планов запускать скрипт на каких-нибудь рутерах, и до тех пор пока ты начинаешь файл с !/bin/bash (а не !/bin/sh) - это разумно. И было бы правильно изучить разницу между двумя этими конструкциями: http://stackoverflow.com/questions/3427872/whats-the-difference-between-and-i...
- Не используй конструкцию command1 && command2 || command3 вместо if-then-else-fi: она не всегда правильно отрабатывает. А вот конструкция command1 && command2 - хорошая лаконичная замена if-then-fi (без else) если у тебя одна команда в then-fi

/thread

Исходная версия Kroz, :

выше посмотри... такой вариант не выполняется, пишет ошибку

Посмотрел. Не нашел. Если там, где ты берешь это в двойные кавычки, то посмотри внимательней на то, что я написал.

$ echo "one
two
three" > file.txt

$ if grep 'two' file.txt 1>/dev/null ; then echo "Найдено" ; else echo "Не найдено"; fi                                        
Найдено

$ if grep 'five' file.txt 1>/dev/null ; then echo "Найдено" ; else echo "Не найдено"; fi
Не найдено

$ grep 'two' file.txt 1>/dev/null
$ if [[ "$?" -eq 0 ]] ; then echo "Найдено" ; else echo "Не найдено"; fi
Найдено

$ grep 'five' file.txt 1>/dev/null
$ if [[ "$?" -eq 0 ]] ; then echo "Найдено" ; else echo "Не найдено"; fi
Не найдено

$ if [[ "$( grep 'two' file.txt )" ]]; then echo "Найдено" ; else echo "Не найдено"; fi
Найдено

$ if [[ "$( grep 'five' file.txt )" ]]; then echo "Найдено" ; else echo "Не найдено"; fi
Не найдено


Ключевые моменты:
- по-максимуму используй кавычки
- внимательно смотри за одинарными и двойными кавычками. На всякий случай, если вдруг не знаешь, основное отличие - внутри двойных кавычек bash будет парсить строку перед тем как передать команде (например, раскрывать переменные), значение в одинарных кавычках всегда будет передаваться как есть.
- не используй обратные кавычки `..` ; вместо этого используй конструкцию $(..). Подробней о преимуществах здесь: http://unix.stackexchange.com/questions/118433/quoting-within-command-substit...
- используй [[..]] вместо [..] . Сейчас набегут умники с криками «башизм», но если у тебя нет чётких планов запускать скрипт на каких-нибудь рутерах, и до тех пор пока ты начинаешь файл с !/bin/bash (а не !/bin/sh) - это разумно. И было бы правильно изучить разницу между двумя этими конструкциями: http://stackoverflow.com/questions/3427872/whats-the-difference-between-and-i...

/thread