আমি কোনও ব্যবহারকারীর উপস্থিতি আছে কিনা তা পরীক্ষা করতে একটি স্ক্রিপ্ট তৈরি করতে চাই। আমি নীচের যুক্তি ব্যবহার করছি:
# 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
উপরের শর্তটি কেন সর্বদা সত্য বলে মূল্যায়ন করে এবং বলে যে ব্যবহারকারীর উপস্থিতি রয়েছে?
কোথায় আমি ভুল যাচ্ছি?
হালনাগাদ:
সমস্ত প্রতিক্রিয়া পড়ার পরে, আমি আমার স্ক্রিপ্টে সমস্যাটি পেয়েছি। সমস্যাটি ছিল আমি getent
আউটপুটটিকে পুনর্নির্দেশের পথে । সুতরাং আমি সমস্ত পুনঃনির্দেশের জিনিসগুলি সরিয়ে এনে getent
লাইনটিকে দেখতে এমন দেখাচ্ছে:
getent passwd $user > /dev/null
এখন আমার স্ক্রিপ্ট ভাল কাজ করছে।
getent
এবং আপনার if
বিবৃতিটির মধ্যে কোনও "প্রতিধ্বনি" ডিবাগ বিবৃতি নেই ? এটি আপনার কল নয়, $?
এর প্রস্থান স্থিতি পরীক্ষা করতে echo
পারে getent
।
2>&1
পরিবর্তে বোঝাতে চাইছেন 2&>1
।
$1
সেট না করা থাকে তবে যদি বিবৃতিটি সত্য হয়ে যায়। আমার পরীক্ষাকার্যের থেকে, সমাধান মোড়ানো হবে $1
উদ্ধৃতি চিহ্ন মধ্যে: getent passwd "$1" > /dev/null 2&>1
।
$?
করার সময়test
কমান্ডের রিটার্ন কোড পাবেন get নীচে উত্তর দেখুন।