У меня есть следующий скрипт, который должен существовать, если пользователь не существует.
#check if user currently exists on system
if id $User > /dev/null 2>&1
then
#user exists no need to exit program
echo "blah blah, what a waste of space"
else
echo "This user does NOT exists. Please create that user before using this script.\n"
exit
fi
Моя проблема в том, что в идеале я хотел бы поместить «не», если это первое утверждение if, чтобы я мог урезать свое выражение if, else. В идеале я хотел бы что-то вроде этого:
if !(id $User > /dev/null 2>&1)
then
echo "This user does NOT exists. Please create that user before using this script.\n"
exit
fi
«Не» пишется !
, без пунктуации и пробела после него.
if ! id "$user_name" > /dev/null 2>&1
then
echo 1>&2 "This user does NOT exists. Please create that user before using this script.\n"
exit 1
fi
Ваше предложение на самом деле сработает, но скобки создают подоболочку для запуска одной команды id
, что является излишним.
Другие изменения:
"$user_name"
USER
, которая является именем текущего в пользователя. Имена переменных чувствительны к регистру, но людей не так много. В сценариях оболочки есть оператор , а не , и это !
, но вы используете его не совсем корректно.
Поставьте пробел между оператором !
и его операндом и оставьте скобки. Это должно работать для всех оболочек в стиле POSIX , включая bash
и sh
/ dash
.
if ! id $User > /dev/null 2>&1
then
echo "This user does NOT exists. Please create that user before using this script.\n"
exit
fi
Вы можете использовать скобки для группировки, если хотите, хотя в этом случае это не нужно. Создается новый подоболочек для выполнения выражения в скобках. Оператор !
должен все еще иметь пробел между ним и символом (
. (Пробелы вокруг скобок необязательны.)
if ! (id $User > /dev/null 2>&1)
then
echo "This user does NOT exists. Please create that user before using this script.\n"
exit
fi
См. Прекрасный ответ Жиля , для некоторых хороших альтернатив и стилевых рекомендаций. (Также, спасибо Жилю за некоторые исправления относительно использования скобок.)
На вопросы как этот отвечают в "Усовершенствованном Руководстве по созданию сценариев Bash"
- который видим и доступен для скачивания по http://www.tldp.org/guides.html