Ответ 1
Вы можете выбрать:
if [[ $? -ne 0 ]]; then # -ne: not equal
if ! [[ $? -eq 0 ]]; then # -eq: equal
if [[ ! $? -eq 0 ]]; then
!
инвертирует возврат следующего выражения соответственно.
Я новичок в bash, и я застрял в попытке свести на нет следующую команду:
wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -eq 0 ]]; then
echo "Sorry you are Offline"
exit 1
Это условие if возвращает true, если я подключен к Интернету. Я хочу, чтобы это произошло наоборот, но размещение !
в любом месте не работает.
Вы можете выбрать:
if [[ $? -ne 0 ]]; then # -ne: not equal
if ! [[ $? -eq 0 ]]; then # -eq: equal
if [[ ! $? -eq 0 ]]; then
!
инвертирует возврат следующего выражения соответственно.
лучше
if ! wget -q --spider --tries=10 --timeout=20 google.com
then
echo 'Sorry you are Offline'
exit 1
fi
Если вы чувствуете себя ленивым, здесь приведен краткий метод обработки условий с использованием ||
(или) и &&
(и) после операции:
wget -q --tries=10 --timeout=20 --spider http://google.com || \
{ echo "Sorry you are Offline" && exit 1; }
Вы можете использовать неравное сравнение -ne
вместо -eq
:
wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -ne 0 ]]; then
echo "Sorry you are Offline"
exit 1
Поскольку вы сравниваете числа, вы можете использовать арифметическое выражение, которое позволяет упростить обработку параметров и сравнение:
wget -q --tries=10 --timeout=20 --spider http://google.com
if (( $? != 0 )); then
echo "Sorry you are Offline"
exit 1
fi
Обратите внимание, что вместо -ne
вы можете просто использовать !=
. В арифметическом контексте нам даже не нужно добавлять $
к параметрам, т.е.
var_a=1
var_b=2
(( var_a < var_b )) && echo "a is smaller"
работает отлично. Однако это не относится к специальному параметру $?
.
Конструкция (( ... ))
доступна в Bash, но не требуется спецификация оболочки POSIX (упоминается как возможное расширение, хотя).
Все, что сказано, лучше избегать $?
вообще, на мой взгляд, как в Коул ответить и Стивен ответить.