Bir kullanıcının var olup olmadığını kontrol etmek için bir komut dosyası oluşturmak istiyorum. Aşağıdaki mantığı kullanıyorum:
# getent passwd test > /dev/null 2&>1
# echo $?
0
# getent passwd test1 > /dev/null 2&>1
# echo $?
2
Eğer kullanıcı varsa, o zaman başarımız olur, aksi takdirde kullanıcı yoktur. Ben bash komut dosyasında yukarıdaki komutu aşağıdaki gibi koydum:
#!/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
Şimdi, betiğim her zaman kullanıcının ne olursa olsun var olduğunu söylüyor:
# sh passwd.sh test
yes the user exists
# sh passwd.sh test1
yes the user exists
# sh passwd.sh test2
yes the user exists
Yukarıdaki koşul neden daima DOĞRU olarak değerlendirilir ve kullanıcının var olduğunu söyler?
Nerede yanlış gidiyorum?
GÜNCELLEME:
Tüm yanıtları okuduktan sonra, senaryomda sorunu buldum. Sorun getentçıktıyı yeniden yönlendirme şeklimdi. Bu yüzden tüm yeniden yönlendirme öğelerini kaldırdım ve getentsatırı şu şekilde yaptım :
getent passwd $user > /dev/null
Şimdi senaryom iyi çalışıyor.
getentve ifbeyanı? Bu , çağrınızın değil $?, çıkış durumunun kontrol edilmesine neden olur . echogetent
2>&1bunun yerine demek istediğini düşünüyorum 2&>1.
$1ayarlanmazsa, if ifadesi true değerini döndürür. Benim test itibaren, çözüm sarmak olacaktır $1çift tırnak: getent passwd "$1" > /dev/null 2&>1.
$?dönüş kodunu alırsınıztest. Aşağıdaki cevaba bakınız.