ユーザーが存在するかどうかを確認するスクリプトを作成したいと思います。私は以下のロジックを使用しています:
# getent passwd test > /dev/null 2&>1
# echo $?
0
# getent passwd test1 > /dev/null 2&>1
# echo $?
2
したがって、ユーザーが存在する場合は成功し、そうでない場合はユーザーは存在しません。私は以下のようにbashスクリプトに上記のコマンドを入れました:
#!/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
上記の条件が常にTRUEと評価され、ユーザーが存在すると言うのはなぜですか?
どこが間違っているのですか?
アップデート:
すべての回答を読んだ後、スクリプトに問題が見つかりました。getent
問題は、出力をリダイレクトする方法でした。だから私はすべてのリダイレクトのものを削除し、getent
行を次のように見せました:
getent passwd $user > /dev/null
これで、スクリプトは正常に機能しています。