Есть ли способ проверить, есть ли ошибка при выполнении команды?
Пример:
test1=`sed -i "/:@/c connection.url=jdbc:oracle:thin:@$ip:1521:$dataBase" $search`
valid $test1
function valid () {
if $test -eq 1; then
echo "OK"
else echo "ERROR"
fi
}
Я уже пробовал это, но, похоже, это не так за работой. Я не знаю, как это сделать.
Возвращаемое значение сохраняется в $?. 0 указывает на успех, другие указывают на ошибку.
some_command
if [ $? -eq 0 ]; then
echo OK
else
echo FAIL
fi
Как и любое другое текстовое значение, вы можете сохранить его в переменной для будущего сравнения:
some_command
retval=$?
do_something $retval
if [ $retval -ne 0 ]; then
echo "Return code was not zero but $retval"
fi
Для возможных операторов сравнения, см. man test.
Возвращаемое значение сохраняется в $?. 0 указывает на успех, другие указывают на ошибку.
some_command
if [ $? -eq 0 ]; then
echo OK
else
echo FAIL
fi
Как и любое другое текстовое значение, вы можете сохранить его в переменной для будущего сравнения:
some_command
retval=$?
do_something $retval
if [ $retval -ne 0 ]; then
echo "Return code was not zero but $retval"
fi
Для возможных операторов сравнения, см. man test.
Возвращаемое значение сохраняется в $?. 0 указывает на успех, другие указывают на ошибку.
some_command
if [ $? -eq 0 ]; then
echo OK
else
echo FAIL
fi
Как и любое другое текстовое значение, вы можете сохранить его в переменной для будущего сравнения:
some_command
retval=$?
do_something $retval
if [ $retval -ne 0 ]; then
echo "Return code was not zero but $retval"
fi
Для возможных операторов сравнения, см. man test.
Возвращаемое значение сохраняется в $?. 0 указывает на успех, другие указывают на ошибку.
some_command
if [ $? -eq 0 ]; then
echo OK
else
echo FAIL
fi
Как и любое другое текстовое значение, вы можете сохранить его в переменной для будущего сравнения:
some_command
retval=$?
do_something $retval
if [ $retval -ne 0 ]; then
echo "Return code was not zero but $retval"
fi
Для возможных операторов сравнения, см. man test.
Возвращаемое значение сохраняется в $?. 0 указывает на успех, другие указывают на ошибку.
some_command
if [ $? -eq 0 ]; then
echo OK
else
echo FAIL
fi
Как и любое другое текстовое значение, вы можете сохранить его в переменной для будущего сравнения:
some_command
retval=$?
do_something $retval
if [ $retval -ne 0 ]; then
echo "Return code was not zero but $retval"
fi
Для возможных операторов сравнения, см. man test.
Возвращаемое значение сохраняется в $?. 0 указывает на успех, другие указывают на ошибку.
some_command
if [ $? -eq 0 ]; then
echo OK
else
echo FAIL
fi
Как и любое другое текстовое значение, вы можете сохранить его в переменной для будущего сравнения:
some_command
retval=$?
do_something $retval
if [ $retval -ne 0 ]; then
echo "Return code was not zero but $retval"
fi
Для возможных операторов сравнения, см. man test.
Возвращаемое значение сохраняется в $?
. 0 указывает на успех, другие указывают на ошибку.
some_command, если [$? -eq 0]; затем echo OK else echo FAIL fi
Как и любое другое текстовое значение, вы можете сохранить его в переменной для будущего сравнения:
some_command retval = $? do_something $ retval, если [$ retval -ne 0]; then echo «Код возврата не был равен нулю, но $ retval» fi
Для возможных операторов сравнения см. man test .
Возвращаемое значение сохраняется в $?
. 0 указывает на успех, другие указывают на ошибку.
some_command, если [$? -eq 0]; затем echo OK else echo FAIL fi
Как и любое другое текстовое значение, вы можете сохранить его в переменной для будущего сравнения:
some_command retval = $? do_something $ retval, если [$ retval -ne 0]; then echo «Код возврата не был равен нулю, но $ retval» fi
Для возможных операторов сравнения см. man test .
Возвращаемое значение сохраняется в $?
. 0 указывает на успех, другие указывают на ошибку.
some_command, если [$? -eq 0]; затем echo OK else echo FAIL fi
Как и любое другое текстовое значение, вы можете сохранить его в переменной для будущего сравнения:
some_command retval = $? do_something $ retval, если [$ retval -ne 0]; then echo «Код возврата не был равен нулю, но $ retval» fi
Для возможных операторов сравнения см. man test .
Возвращаемое значение сохраняется в $?
. 0 указывает на успех, другие указывают на ошибку.
some_command, если [$? -eq 0]; затем echo OK else echo FAIL fi
Как и любое другое текстовое значение, вы можете сохранить его в переменной для будущего сравнения:
some_command retval = $? do_something $ retval, если [$ retval -ne 0]; then echo «Код возврата не был равен нулю, но $ retval» fi
Для возможных операторов сравнения см. man test .
else
и fi
вам нужно поставить ;
: `if ...; тогда ...; еще ...; фи
– Lekensteyn
7 March 2011 в 18:36
[$? ]
(или, что эквивалентно, test $?
) не работает, потому что $?
оценивает число (0, 1 и т. д.), которое не является нулевым. См. [D0] docs для теста : & quot; Если EXPRESSION опущено, 'test' возвращает false. Если EXPRESSION является единственным аргументом, «test» возвращает false, если аргумент имеет значение null и true в противном случае. & Quot;
– Lekensteyn
25 March 2016 в 22:31
Если вам нужно только знать, была ли команда успешной или неудачной, не утруждайте себя тестированием $?, просто проверьте команду напрямую. Например:
if some_command; then
printf 'some_command succeeded\n'
else
printf 'some_command failed\n'
fi
И присвоение вывода переменной не меняет возвращаемое значение (ну, если оно не ведет себя иначе, когда stdout не является конечно конечно).
if output=$(some_command); then
printf 'some_command succeded, the output was «%s»\n' "$output"
fi
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals объясняет if более подробно.
Итак, что-то вроде:
cd /nonexistant
if [ $? -ne 0 ]
then
echo failed
else
echo success!
fi
для большинства случаев, проще использовать & amp; ; & амп; построить цепочку команд, которые должны зависеть друг от друга. Таким образом, cd /nonexistant && echo success! не будет эхом удаваться, потому что команда прерывается до & amp; & amp ;. Следствием этого является ||, где cd /nonexistant || echo fail будет эхо неудачно, потому что cd не удалось. (это становится полезным, если вы используете что-то вроде || exit, что закончит скрипт, если предыдущая команда не удалась.)
Для проверки ошибок ваших команд:
execute [INVOKING-FUNCTION] [COMMAND]
execute () {
error=$($2 2>&1 >/dev/null)
if [ $? -ne 0 ]; then
echo "$1: $error"
exit 1
fi
}
исправление ошибок в Lean production: [ ! d4] Сделать ошибки невозможными по дизайну Сделать шаги наименьшими элементами Finish по одному Сделать это очевидным для любого
Следует отметить, что тип подхода if...then...fi и && / || относится к состоянию выхода, возвращаемому командой, которую мы хотим проверить (0 при успехе); однако некоторые команды не возвращают ненулевой статус выхода, если команда не выполнена или не может обрабатывать ввод. Это означает, что обычные подходы if и && / || не будут работать для этих конкретных команд.
Например, в Linux GNU file все еще выходит с 0, если он получил несуществующий файл в качестве аргумента и find не смогли найти указанный пользователем файл.
$ find . -name "not_existing_file"
$ echo $?
0
$ file ./not_existing_file
./not_existing_file: cannot open `./not_existing_file' (No such file or directory)
$ echo $?
0
В таких случаях одним из возможных способов справиться с ситуацией является чтение stderr / stdin, например те, которые возвращаются командой file, или анализируют вывод команды, как в find. Для этих целей можно использовать оператор case.
$ file ./doesntexist | while IFS= read -r output; do
> case "$output" in
> *"No such file or directory"*) printf "%s\n" "This will show up if failed";;
> *) printf "%s\n" "This will show up if succeeded" ;;
> esac
> done
This will show up if failed
$ find . -name "doesn'texist" | if ! read IFS= out; then echo "File not found"; fi
File not found
(Это ответ моего собственного ответа на соответствующий вопрос на unix.stackexchange.com)
Для проверки ошибок ваших команд:
execute [INVOKING-FUNCTION] [COMMAND]
execute () {
error=$($2 2>&1 >/dev/null)
if [ $? -ne 0 ]; then
echo "$1: $error"
exit 1
fi
}
исправление ошибок в Lean production: [ ! d4] Сделать ошибки невозможными по дизайну Сделать шаги наименьшими элементами Finish по одному Сделать это очевидным для любого
Если вам нужно только знать, была ли команда успешной или неудачной, не утруждайте себя тестированием $?, просто проверьте команду напрямую. Например:
if some_command; then
printf 'some_command succeeded\n'
else
printf 'some_command failed\n'
fi
И присвоение вывода переменной не меняет возвращаемое значение (ну, если оно не ведет себя иначе, когда stdout не является конечно конечно).
if output=$(some_command); then
printf 'some_command succeded, the output was «%s»\n' "$output"
fi
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals объясняет if более подробно.
Следует отметить, что тип подхода if...then...fi и && / || относится к состоянию выхода, возвращаемому командой, которую мы хотим проверить (0 при успехе); однако некоторые команды не возвращают ненулевой статус выхода, если команда не выполнена или не может обрабатывать ввод. Это означает, что обычные подходы if и && / || не будут работать для этих конкретных команд.
Например, в Linux GNU file все еще выходит с 0, если он получил несуществующий файл в качестве аргумента и find не смогли найти указанный пользователем файл.
$ find . -name "not_existing_file"
$ echo $?
0
$ file ./not_existing_file
./not_existing_file: cannot open `./not_existing_file' (No such file or directory)
$ echo $?
0
В таких случаях одним из возможных способов справиться с ситуацией является чтение stderr / stdin, например те, которые возвращаются командой file, или анализируют вывод команды, как в find. Для этих целей можно использовать оператор case.
$ file ./doesntexist | while IFS= read -r output; do
> case "$output" in
> *"No such file or directory"*) printf "%s\n" "This will show up if failed";;
> *) printf "%s\n" "This will show up if succeeded" ;;
> esac
> done
This will show up if failed
$ find . -name "doesn'texist" | if ! read IFS= out; then echo "File not found"; fi
File not found
(Это ответ моего собственного ответа на соответствующий вопрос на unix.stackexchange.com)
Итак, что-то вроде:
cd /nonexistant
if [ $? -ne 0 ]
then
echo failed
else
echo success!
fi
для большинства случаев, проще использовать & amp; ; & амп; построить цепочку команд, которые должны зависеть друг от друга. Таким образом, cd /nonexistant && echo success! не будет эхом удаваться, потому что команда прерывается до & amp; & amp ;. Следствием этого является ||, где cd /nonexistant || echo fail будет эхо неудачно, потому что cd не удалось. (это становится полезным, если вы используете что-то вроде || exit, что закончит скрипт, если предыдущая команда не удалась.)
Для проверки ошибок ваших команд:
execute [INVOKING-FUNCTION] [COMMAND]
execute () {
error=$($2 2>&1 >/dev/null)
if [ $? -ne 0 ]; then
echo "$1: $error"
exit 1
fi
}
исправление ошибок в Lean production: [ ! d4] Сделать ошибки невозможными по дизайну Сделать шаги наименьшими элементами Finish по одному Сделать это очевидным для любого
Если вам нужно только знать, была ли команда успешной или неудачной, не утруждайте себя тестированием $?, просто проверьте команду напрямую. Например:
if some_command; then
printf 'some_command succeeded\n'
else
printf 'some_command failed\n'
fi
И присвоение вывода переменной не меняет возвращаемое значение (ну, если оно не ведет себя иначе, когда stdout не является конечно конечно).
if output=$(some_command); then
printf 'some_command succeded, the output was «%s»\n' "$output"
fi
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals объясняет if более подробно.
Следует отметить, что тип подхода if...then...fi и && / || относится к состоянию выхода, возвращаемому командой, которую мы хотим проверить (0 при успехе); однако некоторые команды не возвращают ненулевой статус выхода, если команда не выполнена или не может обрабатывать ввод. Это означает, что обычные подходы if и && / || не будут работать для этих конкретных команд.
Например, в Linux GNU file все еще выходит с 0, если он получил несуществующий файл в качестве аргумента и find не смогли найти указанный пользователем файл.
$ find . -name "not_existing_file"
$ echo $?
0
$ file ./not_existing_file
./not_existing_file: cannot open `./not_existing_file' (No such file or directory)
$ echo $?
0
В таких случаях одним из возможных способов справиться с ситуацией является чтение stderr / stdin, например те, которые возвращаются командой file, или анализируют вывод команды, как в find. Для этих целей можно использовать оператор case.
$ file ./doesntexist | while IFS= read -r output; do
> case "$output" in
> *"No such file or directory"*) printf "%s\n" "This will show up if failed";;
> *) printf "%s\n" "This will show up if succeeded" ;;
> esac
> done
This will show up if failed
$ find . -name "doesn'texist" | if ! read IFS= out; then echo "File not found"; fi
File not found
(Это ответ моего собственного ответа на соответствующий вопрос на unix.stackexchange.com)
Итак, что-то вроде:
cd /nonexistant
if [ $? -ne 0 ]
then
echo failed
else
echo success!
fi
для большинства случаев, проще использовать & amp; ; & амп; построить цепочку команд, которые должны зависеть друг от друга. Таким образом, cd /nonexistant && echo success! не будет эхом удаваться, потому что команда прерывается до & amp; & amp ;. Следствием этого является ||, где cd /nonexistant || echo fail будет эхо неудачно, потому что cd не удалось. (это становится полезным, если вы используете что-то вроде || exit, что закончит скрипт, если предыдущая команда не удалась.)
Для проверки ошибок ваших команд:
execute [INVOKING-FUNCTION] [COMMAND]
execute () {
error=$($2 2>&1 >/dev/null)
if [ $? -ne 0 ]; then
echo "$1: $error"
exit 1
fi
}
исправление ошибок в Lean production: [ ! d4] Сделать ошибки невозможными по дизайну Сделать шаги наименьшими элементами Finish по одному Сделать это очевидным для любого