मैं यह जांचने के लिए एक स्क्रिप्ट बनाना चाहता हूं कि क्या कोई उपयोगकर्ता मौजूद है। मैं नीचे दिए गए तर्क का उपयोग कर रहा हूं:
# 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
उपरोक्त स्थिति हमेशा TRUE होने का मूल्यांकन क्यों करती है और कहती है कि उपयोगकर्ता मौजूद है?
मुझसे कहां गलती हो रही है?
अपडेट करें:
सभी प्रतिक्रियाओं को पढ़ने के बाद, मुझे अपनी स्क्रिप्ट में समस्या मिली। समस्या यह थी कि मैं getentआउटपुट को रीडायरेक्ट कर रहा था । इसलिए मैंने सभी पुनर्निर्देशन सामग्री को हटा दिया और getentलाइन को इस तरह बनाया :
getent passwd $user > /dev/null
अब मेरी स्क्रिप्ट ठीक काम कर रही है।
getentऔर आपके ifस्टेटमेंट के बीच कोई "इको" डिबग स्टेटमेंट नहीं है ? यह आपके कॉल करने के लिए नहीं, $?के बाहर निकलने की स्थिति की जाँच करने का कारण होगा । echogetent
2>&1बजाय इसका मतलब है 2&>1।
$1सेट नहीं किया गया है, तो यदि कथन सही है। मेरे परीक्षण से, समाधान रैप करने के लिए किया जाएगा $1दोहरे उद्धरण में: getent passwd "$1" > /dev/null 2&>1।
$?करते हैं तो आपकोtestकमांड का रिटर्न कोड मिलता है । नीचे उत्तर देखें।