сценарий bash :, если условие множественного ИЛИ не работает должным образом

shutdown задает время выключения системы. Его можно использовать для остановки, выключения питания -или перезагрузки машины.

shutdown -h

эквивалентно :shutdown --poweroff, просто это означает POWEROFF.

другой рукой

shutdown -H

или

shutdown --halt

указывает аппаратному обеспечению остановить все функции ЦП, но оставляет его включенным. Вы можете использовать его, чтобы привести систему в состояние, при котором вы можете выполнять техническое обслуживание на низком уровне. Обратите внимание, что в некоторых случаях это полностью выключает систему. Ниже приведены примеры остановки

0
11.12.2020, 09:15
2 ответа

Мне кажется, что скрипт bash работает правильно. Вы работаете как abc, что означает, что первый тест неверен(abcравен abc), поэтому оценка продолжается до следующего теста, который является истинным(abcне равен xyz), и скрипт завершает работу, потому что вы получить false || true || true, который равен true.

Если вы хотите «Запустить оставшийся сценарий», если пользователь является одним из abc, xyz, pqr, вы должны использовать ИЛИ с ==и поменять местами условия ifи elseили оставить это то же самое и использовать И.

Так что либо что-то вроде этого:

if [ "$(whoami)" != "abc" ] && [ "$(whoami)" != "xyz" ] && [ "$(whoami)" != "pqr" ]
then
    exit 1
else
    echo "Run remaining script"
fi

или:

if [ "$(whoami)" == "abc" ] || [ "$(whoami)" == "xyz" ] || [ "$(whoami)" == "pqr" ]
then
    echo "Run remaining script"
else
    exit 1
fi
2
28.04.2021, 23:02

Альтернативой этой строке if может быть:

case "$(whoami)" in
   abc|xyz|pqr)  : # we do nothing here, 
                 ;; # and exit the case
   *)            exit 1  # for all other values (*) : we exit 1, terminating the script
                 ;;
esac
# here, we only continue if the case before had abc, xyz or pqr
...
2
28.04.2021, 23:02

Теги

Похожие вопросы