Если у вас есть только небольшое количество чеков, вы можете использовать
[[$ SUUSER! = 'Root']] && {echo "Пожалуйста, запустите скрипт от имени root"; эхо-выход 1; }
Когда у вас много проверок, я бы использовал функцию die()
, как писал @erik_dannenberg.
не по теме: вы должны писать свои собственные переменные оболочки в нижнем регистре, например ${su_user}
.
Одной из причин предложенной вами функции является возможность показать, какой тест не пройден (сравните "${su_user}"
с root
). Когда вы хотите это, сделайте такую функцию, как
checkroot()
. Если вы хотите поддерживать всех обычных специальных символов, вы возьмете на себя много обязанностей.
Я пробовал что-то с поддержкой синтаксиса [ ... ]
. Вы видите, что не так с этим «решением»?
if_exit() { # incorrect function
# skip first '['
shift
# split line around ]
IFS="]" read -r testparams errormessage <<< "${@}"
if [ ${testparams} ] ; then
echo "Test [ ${testparams% } ] failed: ${errormessage# }"
# exit 1
fi
}
if_exit [ -f non_existing_file ] "file not existing"
su_user="root"
if_exit [ "${su_user}" \!= root ] "Please run the script as root"
echo "Another test with wrong user"
su_user="aeris"
if_exit [ "${su_user}" \!= root ] "Please run the script as root"
Хорошо выглядит, кроме восклицательного знака?
Сбой произойдет, когда su_user
будет пустым или имеет пробелы (su_user="I dont want to be tested"
).
Вы можете обойти эту проблему в функции if_exit()
, но продолжите встречать новые проблемы (например, пробелы в имени файла).
Вы можете найти исходный код test.c, но вам следует отказаться от своих хороших намерений и выбрать другое решение (die()
или compare_strings()
).