আর একটি উপায় তাদের অবহেলা করা হয়:
: ${PACKAGENAME:?'$PACKAGENAME variable is empty!'} #emits error and exits
[ -z "${PACKAGENAME#kakadu-v6_4-00902C}" ] || { #if var - str not empty do block
echo '$PACKAGENAME is not kakadu-v6_4-00902C'
exit 1
} >&2
উপরের ব্লকটি প্রথমে পরীক্ষা করে যদি "$PACKAGENAME"
এর কোনও মান থাকে তবে, এবং তা না থাকলে এটি ত্রুটি সহ প্রস্থান করে এবং প্রতিধ্বনিত ?'this'}
হয়stderr
। যদি এর প্যারেন্ট শেলটি এখনও বিদ্যমান থাকে তবে পরীক্ষাটি পাস হয়ে গেছে এবং এটি যদি আপনার 'কাকাডু ...' স্ট্রিংটি ভেরিয়েবলের থেকে -z
খালি স্ট্রিংয়ের ফলে সরিয়ে দেয় তবে পরবর্তী পরীক্ষাগুলি । যদি এটি না হয়, তবে এটি আবার একটি ত্রুটি বের করে এবং শেলটি থেকে বেরিয়ে যায়। যদি আপনার শেলটি এখনও অবধি ব্লক কার্যকর হওয়ার পরে এই মুহুর্তে উপস্থিত থাকে তবে অন্যথায় তা হয় না।
সম্ভবত এই ধরণের জিনিসটি একটি ফাংশনে সর্বোত্তমভাবে প্রয়োগ করা হয়। ভালো লেগেছে:
argeq() ( i= : ${2?^MERR: not enough parameters!} #$#>=2 || quit w/ err ^M == \r
z() { return $((${#1}>0)) ; } #return 1 if ${#1}>0 else 0
until z "${2+?}" $((i=i+1)) #until $2 is not set...
do ! z "$1" && z "${1#"$2"}" || #$1 != '' && $1 - $2 == '' or...
exit $((i${1:++1})) #exit $? == failed arg count
shift ; done #shift away one param ; continue loop
)
এই ফাংশনটি দিয়ে আপনি যতটা আর্গুমেন্ট আপনার সিস্টেমকে অনুমতি দেবে তা সরবরাহ করতে পারেন। যদি আপনি 2 এর চেয়ে কম সরবরাহ করেন তবে এটি 1 ফিরে আসবে এবং এতে একটি বার্তা প্রেরণ করবেstderr
। আপনি যদি 2 বা ততোধিক যুক্তি সরবরাহ করেন তবে এটি সমস্ত স্ট্রিং হিসাবে বিবেচনা করবে এবং 0 টি যদি সমস্ত অভিন্ন হয় এবং শূন্য না হয় তবে 0টি ফিরে আসবে এটি আর্গুমেন্ট নম্বরটি ফিরিয়ে দেবে যা প্রথমে চেকটি ব্যর্থ করে।
আপনার ক্ষেত্রে এটি ব্যবহার করা যেতে পারে:
{
PACKAGENAME='kakadu-v6_4-00902C'
argeq "$PACKAGENAME" kakadu-v6_4-00902C &&
echo "kakadu-v6_4-00902C == $PACKAGENAME" ||
echo failure
! argeq "${PACKAGENAME#*-}" kakadu-v6_4-00902C &&
echo "kakadu-v6_4-00902C != ${PACKAGENAME#*-}" ||
echo failure
}
###OUTPUT###
kakadu-v6_4-00902C == kakadu-v6_4-00902C
kakadu-v6_4-00902C != v6_4-00902C
আরও প্রদর্শন করতে আমি অন্য একটি ফাংশন লিখব:
aeqecho() { i=$((i+1)) #inc for line#
argeq "$@" && echo "$i : yay" || #allswell or
! e=$? ${2+:} return || #save $?; ! exclusive || to drop ERRs
echo "$i : shite - arg$e failed" #report failure
}
ডেমো:
{ i= s=string
aeqecho $s #1
aeqecho $s $s #2
aeqecho "$s $s" #3
aeqecho "$s $s" "${s} string" #4
aeqecho "${s}1" $s string #5
aeqecho "" "" "" #6
aeqecho "" "$s" $s #7
aeqecho 1 "${s#$s}1" $((2-1)) #8
aeqecho $s $s $s $s $s $s $s $s $s $s $s $s stng #9
aeqecho $s $s $s $s $s $s $s $s $s $s $s $s string #10
}
আউটপুট:
ERR: not enough parameters!
2 : yay
ERR: not enough parameters!
4 : yay
5 : shite - arg2 failed
6 : shite - arg1 failed
7 : shite - arg1 failed
8 : yay
9 : shite - arg13 failed
10 : yay
-eq
পূর্ণসংখ্যার জন্য সত্য, আপনি একটি স্ট্রিং বা রেজেক্সের জন্য পরীক্ষা করতে চান (==
বা=~
): mywiki.wooledge.org/BashGuide/TestsAndConditionals