Я хочу создать script, чтобы проверить, существует ли пользователь. Я использую следующую логику:
# getent passwd test > /dev/null 2&>1
# echo $?
0
# getent passwd test1 > /dev/null 2&>1
# echo $?
2
Итак, если пользователь существует, то у нас есть успех, иначе пользователь не существует. Я поставил выше команду в bash script, как показано ниже:
#!/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
Теперь мой script всегда говорит, что пользователь существует независимо от того, что:
# sh passwd.sh test
yes the user exists
# sh passwd.sh test1
yes the user exists
# sh passwd.sh test2
yes the user exists
Почему вышеупомянутое условие всегда оценивается как TRUE и говорит, что пользователь существует?
Где я иду не так?
UPDATE:
После прочтения всех ответов я нашел проблему в своем script. Проблема заключалась в том, что я перенаправлял вывод getent
. Поэтому я удалил все материалы перенаправления и сделал строку getent
следующим образом:
getent passwd $user > /dev/null
Теперь мой script работает нормально.