История изменений
Исправление 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