অন্য যে কোনও সাধারণ কমান্ডের মতো, [ ... ]বা testএর আর্গুমেন্টগুলির মধ্যে ফাঁকা স্থান প্রয়োজন।
if [ "$#" -ne 1 ]; then
echo "Illegal number of parameters"
fi
অথবা
if test "$#" -ne 1; then
echo "Illegal number of parameters"
fi
পরামর্শ
বাশ-এ থাকাকালীন [[ ]]পরিবর্তিত ব্যবহারটি পছন্দ করুন কারণ এটি শব্দটির বিভাজন এবং পথের নামটি তার ভেরিয়েবলগুলিতে প্রসারিত করে না যে কোনও অভিব্যক্তির অংশ না থাকলে উদ্ধৃতি আবশ্যক হতে পারে না।
[[ $# -ne 1 ]]
এটিতে আরও কিছু বৈশিষ্ট্য রয়েছে যেমন আনকোটেড কন্ডিশন গ্রুপিং, প্যাটার্ন ম্যাচিং (এর সাথে বর্ধিত প্যাটার্ন মেলানো extglob) এবং রেজেক্স ম্যাচিং।
নিম্নলিখিত উদাহরণটি আর্গুমেন্ট বৈধ কিনা তা পরীক্ষা করে। এটি একটি একক তর্ক বা দুটি অনুমতি দেয়।
[[ ($# -eq 1 || ($# -eq 2 && $2 == <glob pattern>)) && $1 =~ <regex pattern> ]]
বিশুদ্ধ গাণিতিক এক্সপ্রেশন জন্য ব্যবহার (( ))কিছু এখনও ভালো হতে পারে, কিন্তু তারা এখনও সম্ভব [[ ]]চাই তার গাণিতিক অপারেটর সঙ্গে -eq, -ne, -lt, -le, -gt, অথবা -geএকটি একক পংক্তি আর্গুমেন্ট হিসাবে অভিব্যক্তি স্থাপন দ্বারা:
A=1
[[ 'A + 1' -eq 2 ]] && echo true ## Prints true.
আপনার যদি এটির অন্যান্য বৈশিষ্ট্যগুলির সাথে একত্রিত করার প্রয়োজন হয় তবে এটি সহায়ক হবে [[ ]]।
স্ক্রিপ্ট থেকে প্রস্থান করা হচ্ছে
এটিতে অবৈধ পরামিতিগুলি পাস করার পরে স্ক্রিপ্টটি প্রস্থান করাও যৌক্তিক। ইতিমধ্যে এ প্রস্তাব করা হয়েছে মন্তব্য দ্বারা ekangas কিন্তু কেউ এই উত্তর সম্পাদিত সঙ্গে এটি আছে -1, যেমন ফিরে মান তাই আমি ভাল হিসাবে এটা সঠিক করতে পারে।
-1যদিও বাশ দ্বারা আর্গুমেন্ট হিসাবে স্বীকৃত exitতা স্পষ্টভাবে নথিভুক্ত নয় এবং সাধারণ পরামর্শ হিসাবে ব্যবহার করা ঠিক নয়। 64এটি সর্বাধিক প্রথাগত মান হিসাবে এটি সংজ্ঞায়িত করা sysexits.hহয় #define EX_USAGE 64 /* command line usage error */। বেশিরভাগ সরঞ্জামগুলিও অবৈধ যুক্তিগুলিতে lsফিরে আসে 2। আমি 2আমার স্ক্রিপ্টগুলিতে ফিরে আসতাম তবে ইদানীং আমি আর সত্যিকারের যত্ন নিই না এবং কেবল 1সমস্ত ত্রুটিতে ব্যবহার করি । তবে আসুন 2এখানে কেবল রাখুন কারণ এটি সবচেয়ে সাধারণ এবং সম্ভবত ওএস-নির্দিষ্ট নয়।
if [[ $# -ne 1 ]]; then
echo "Illegal number of parameters"
exit 2
fi
তথ্যসূত্র
test। এটি একটি স্ট্যান্ডার্ড ইউনিক্স কমান্ডের নাম, আপনি এটি ছায়া দিতে চান না।