Я хочу создать скрипт, чтобы проверить, существует ли пользователь. Я использую логику ниже:Проверьте, существует ли пользователь
# getent passwd test > /dev/null 2&>1
# echo $?
0
# getent passwd test1 > /dev/null 2&>1
# echo $?
2
Таким образом, если пользователь существует, то мы имеем успех, иначе пользователь не существует. Я поставил выше команды в сценарий Баш, как показано ниже:
#!/bin/bash
getent passwd $1 > /dev/null 2&>1
if [ $? -eq 0 ]; then
echo "yes the user exists"
else
echo "No, the user does not exist"
fi
Теперь, мой сценарий всегда говорит о том, что пользователь не существует независимо от того, что:
# sh passwd.sh test
yes the user exists
# sh passwd.sh test1
yes the user exists
# sh passwd.sh test2
yes the user exists
Почему вышеуказанное условие всегда оценивают быть ИСТИНА и сказать, что пользователь существует?
Куда я иду не так?
UPDATE:
После прочтения всех ответов, я обнаружил, что проблема в моем сценарии. Проблема заключалась в том, что я перенаправлял вывод getent
. Поэтому я удалил все переназначения вещи и сделал вид getent
линии, как это:
getent passwd $user > /dev/null
Теперь мой скрипт работает отлично.
Я думаю, что когда вы используете '$?' Вы получите код возврата 'test' команды. См. Ответ ниже. – user000001
Это точный * код, который вы используете? Нет откликов «отголоски» между вызовом 'getent' и вашим оператором' if'? Это вызовет '$?', Чтобы проверить статус выхода 'echo', а не ваш вызов' getent'. – chepner
Да, я думаю, вы имеете в виду '2> & 1' вместо' 2 &> 1'. –