Я очистил ваш код:
- Я использую
=
вместо ==
для строк равных. Более новые версии Bash будут использовать одну из них. Однако в более ранней версии тесты ==
и ]]
проходили только *1007*, а иногда просто не выполняли то, что вы ожидаете.
- Объедините ваши операторы
if
с синтаксисом , либо [ ... ] && [ ... ]
, либо с синтаксисом [ ... -a ... ]
. Это упростит вашу логику. [[ ... && ... ]]
.
- Используйте
elif
вместо того, чтобы помещать предложение if
в предложение else
. Опять же, это упрощает ваш синтаксис.
- Удалены выходы. Вся логическая структура теперь выполняет только одно из четырех условий. Нет необходимости для выхода в этом контенте.
- Где установлен
$Check
? Это переменная, установленная вне вашей программы? Если это так, убедитесь, что он был экспортирован , чтобы он был определен в под-оболочках и сценариях оболочки.
После того, как я внес изменения, скрипт, похоже, заработал. Мне пришлось установить $Check
перед запуском скрипта, и мне пришлось отключить команду plutil
, так как у меня ее нет в моей системе, но логика работает.
Главное, что вы можете сделать, это установить set -xv
при запуске сценария оболочки. Это включает отладку. -x
распечатывает командную строку после развертывания и показывает, что было установлено. -v
показывает, что командная строка выполняется как написано.
Например:
$ set -v
$ ls f*
ls f*
foo.txt foobar.txt
$ set -x
ls f*
ls foo.txt foobar.txt
foo.txt foobar.txt
Чтобы отключить отладку, просто сделайте set +xv
. Фактически, вы можете сделать set -xv
и set +xv
в разделах длинного сценария оболочки, где у вас возникают проблемы. Таким образом, вы не перегружены отладочной информацией.
Вот ваша программа:
#! /bin/bash
#set -xv
if [[ "$1" == "-online" ]]; then
if [[ "$Check" == "com.company.package1" ]]; then
plutil -key settingsOfflineMode -value 0 -type bool /the/dir/ect/ory/com.company.package1 &> /dev/null
echo "Bool Changed online1"
elif [[ "$Check" == "com.company.package2" ]]; then
plutil -key settingsOfflineMode -value 0 -type bool /the/dir/ect/ory/com.company.package2 &> /dev/null ////EDITED TO com.company.package2
echo "Bool Changed online2"
fi
elif [[ "$1" == "-offline" ]]; then
if [[ "$Check" == "com.company.package1" ]]; then
plutil -key settingsOfflineMode -value 0 -type bool /the/dir/ect/ory/com.company.package1 &> /dev/null
echo "Bool Changed offline1"
elif [[ "$Check" == "com.company.package2" ]]; then
plutil -key settingsOfflineMode -value 0 -type bool /the/dir/ect/ory/com.company.package2 &> /dev/null //EDITED TO com.company.package2
echo "Bool Changed offline2"
fi
fi