আমি কোন স্ট্রিংয়ের সাথে কোনও ভেরিয়েবলের তুলনা করব (এবং তারা মেলে যদি কিছু করে)?
আমি কোন স্ট্রিংয়ের সাথে কোনও ভেরিয়েবলের তুলনা করব (এবং তারা মেলে যদি কিছু করে)?
উত্তর:
if [ "$x" = "valid" ]; then
echo "x has the value 'valid'"
fi
আপনি কিছু যখন তারা মিলছে না কি করতে চান তাহলে, প্রতিস্থাপন =
সঙ্গে !=
। স্ট্রিং অপারেশন এবং পাটিগণিতের অপারেশনগুলি সম্পর্কে তাদের নিজ নিজ ডকুমেন্টেশনে আরও পড়তে পারেন ।
$x
?আপনি আশেপাশের উদ্ধৃতিগুলি চান $x
, কারণ এটি খালি থাকলে, আপনার বাশ স্ক্রিপ্টটি নীচের মত দেখতে একটি সিনট্যাক্স ত্রুটির মুখোমুখি হয়েছে:
if [ = "valid" ]; then
==
অপারেটরের অ-মানক ব্যবহারদ্রষ্টব্য যে বাশ এর ==
সাথে সমতার জন্য ব্যবহার করতে দেয় [
তবে এটি মানক নয় ।
প্রথম ক্ষেত্রেটি ব্যবহার করুন যার চারপাশে উদ্ধৃতিগুলি al $x
চ্ছিক:
if [[ "$x" == "valid" ]]; then
বা দ্বিতীয় কেসটি ব্যবহার করুন:
if [ "$x" = "valid" ]; then
[ "$1" == "on" ]
। এটিকে ["$ 1" = "অন"] এ পরিবর্তন করা সমস্যার সমাধান করেছে।
=
এবং দুটি নয়।
[ $x -eq "valid" ]
। -eq
পূর্ণসংখ্যার জন্য তুলনা অপারেটর, স্ট্রিং নয়।
["x$yes" == "xyes"]
এটি ভেরিয়েবল এবং স্ট্রিং উভয়কে একটি দিয়ে উপস্থাপিত করে x
? এটি কি পুরানো সময়ের প্রতীক বা কিছু পরিস্থিতিতে এটি সত্যই প্রয়োজন?
অথবা, যদি আপনার আর কোনও ধারা প্রয়োজন না হয়:
[ "$x" == "valid" ] && echo "x has the value 'valid'"
echo
ব্যর্থ হতে পারে এটি সাধারণত একটি খারাপ ধারণা ।
[ "$X" == "valid" ] || ( echo invalid && false ) && echo "valid"
।
{ echo invalid && false; }
চেয়ে বেশি দক্ষ ( echo invalid && false )
, কারণ এটি একটি অপ্রয়োজনীয় সাবস্কেলের জন্য অর্থ প্রদান করা এড়ানো যায়।
a="abc"
b="def"
# Equality Comparison
if [ "$a" == "$b" ]; then
echo "Strings match"
else
echo "Strings don't match"
fi
# Lexicographic (greater than, less than) comparison.
if [ "$a" \< "$b" ]; then
echo "$a is lexicographically smaller then $b"
elif [ "$a" \> "$b" ]; then
echo "$b is lexicographically smaller than $a"
else
echo "Strings are equal"
fi
মন্তব্য:
if
এবং [
এবং ]
গুরুত্বপূর্ণ>
এবং <
পুনঃনির্দেশ অপারেটর তাই স্ট্রিং সহ \>
এবং \<
যথাক্রমে এটিকে এড়িয়ে যান।$a
প্রকৃতপক্ষে " "
স্ট্রিং আক্ষরিক মানের অংশ হিসাবে এটি ঘিরে ছিল , সুতরাং $b
মানগুলি তুলনা করতে আমাকে পালানোর চরিত্রটি ব্যবহার করতে হয়েছিল। দৌড়ানোর পরে আমি এটি খুঁজে পেতে সক্ষম হয়েছি bash -x ./script.sh
, -x পতাকা আপনাকে প্রতিটি সম্পাদনের মান দেখতে দেয় এবং ডিবাগিংয়ে সহায়তা করে।
ওয়াইল্ডকার্ড ব্যবহারের সাথে স্ট্রিংগুলির তুলনা করতে
if [[ "$stringA" == *$stringB* ]]; then
# Do something here
else
# Do Something here
fi
"
ওয়াইল্ডকার্ডের চারপাশে নিখোঁজ হওয়াটিও নোট করুন । (
$stringB
নয় উদ্ধৃত করা (এবং প্রসঙ্গক্রমে, বাম দিকে উদ্ধৃত করা দরকার নেই): if [[ $stringA = *"$stringB"* ]]; then
।
এক মন্তব্যে আমার একমত হতে হবে:
[ "$x" == "valid" ] && echo "valid" || echo "invalid"
এটি দেখতে একে একে হুম, অবিচ্ছিন্ন ...
এটি একটি ভাষা হিসাবে সাধারণ নিদর্শনগুলি ব্যবহার করে;
এবং ভাষা শিখার পরে।
এটি একটি সাধারণ যৌক্তিক প্রকাশ, একটি বিশেষ অংশ সহ: লজিক অপারেটরদের অলস মূল্যায়ন।
[ "$x" == "valid" ] && echo "valid" || echo "invalid"
প্রতিটি অংশ একটি যৌক্তিক প্রকাশ; প্রথমটি সত্য বা মিথ্যা হতে পারে, অন্য দুটি সত্যই সত্য।
(
[ "$x" == "valid" ]
&&
echo "valid"
)
||
echo "invalid"
এখন, যখন এটি মূল্যায়ন করা হয়, প্রথমটি পরীক্ষা করা হয়। যদি এটি মিথ্যা হয় তবে লজিকের দ্বিতীয় অপারেন্ডের চেয়ে এবং &&
এটি প্রাসঙ্গিক নয়। প্রথমটি সত্য নয়, সুতরাং এটি প্রথম হতে পারে না এবং দ্বিতীয়টি যাইহোক, সত্য হতে পারে।
এখন, এক্ষেত্রে লজিকের প্রথম দিকটি বা ||
মিথ্যা, তবে অন্য পক্ষ - তৃতীয় অংশটি সত্য হলে এটি সত্য হতে পারে।
সুতরাং তৃতীয় অংশটি মূল্যায়ন করা হবে - প্রধানত একটি পার্শ্ব প্রতিক্রিয়া হিসাবে বার্তা লিখতে। (এটি 0
সত্যের জন্য ফলাফল রয়েছে , যা আমরা এখানে ব্যবহার করি না)
অন্যান্য কেসগুলি একই, তবে সহজ - এবং - আমি প্রতিশ্রুতি দিই! হয় - হতে পারে - পড়া সহজ!
(আমার কাছে এটি নেই, তবে আমি মনে করি ধূসর দাড়িযুক্ত ইউনিক্সের অভিজ্ঞ ব্যক্তি এতে অনেক সাহায্য করে))
... && ... || ...
সাধারণত (সমস্ত এই সময়ের জন্য দুঃখিত বৃদ্ধলোক ইউনিক্স ঝুনা, আপনি চলেছি ভুল) উপর ভ্রূকুটি যেমন শব্দার্থগতভাবে সমতূল্য না হয় if ... then ... else ...
। চিন্তা করবেন না, এটি একটি সাধারণ ক্ষতি ।
... && ... || ...
একটি নিখুঁতভাবে বৈধ প্যাটার্ন এবং একটি সাধারণ বাশ প্রতিমা। এটির ব্যবহার পূর্বের জ্ঞানকে নির্দেশ করে (যা দর্শকদের মধ্যে যদি প্রাথমিকভাবে থাকে তবে এটি মনে রাখা ভাল) তবে ওপিতে চুল রয়েছে যাতে তারা কীভাবে খোলা ম্যানহোলের কভারগুলি এড়ানো যায় তা প্রমাণ করার জন্য hair
আপনি ব্যবহারের ক্ষেত্রে / এস্যাক ব্যবহার করতে পারেন
case "$string" in
"$pattern" ) echo "found";;
esac
|
আগে প্যাটার্ন দ্বারা পৃথক করতে পারেন )
। in
বিবৃতি সমতূল্য then
মধ্যে if
বিবৃতি। আপনি তর্ক করতে পারেন এটি নিদর্শনগুলির তালিকার উপরে কাজ করে, যেখানে প্রতিটি লিস্টের পাইথন থেকে আগত হলে কী করা উচিত তার নিজস্ব ঘোষণা রয়েছে। পছন্দ না substring in string
, বরং for item in list
। *
আপনি যদি কোনও else
শর্ত চান তবে আপনার সর্বশেষ বিবৃতি হিসাবে একটি ব্যবহার করুন । এটি প্রথম এনকাউন্টারে ফিরে আসে।
নিম্নলিখিত স্ক্রিপ্টটি "টেস্টনথিস" নামক একটি ফাইল থেকে রেখায় পড়ে এবং তারপরে প্রতিটি লাইনকে একটি সাধারণ স্ট্রিং, একটি বিশেষ অক্ষর এবং একটি নিয়মিত প্রকাশের সাথে একটি স্ট্রিংয়ের সাথে তুলনা করে। যদি এটি মেলে না, তবে স্ক্রিপ্টটি লাইনটি মুদ্রণ করবে, অন্যথায় নয়।
বাশে স্পেস এত গুরুত্বপূর্ণ। সুতরাং নিম্নলিখিতটি কাজ করবে:
[ "$LINE" != "table_name" ]
তবে নিম্নলিখিতগুলি এটি করবে না:
["$LINE" != "table_name"]
সুতরাং দয়া করে যেমন ব্যবহার করুন:
cat testonthis | while read LINE
do
if [ "$LINE" != "table_name" ] && [ "$LINE" != "--------------------------------" ] && [[ "$LINE" =~ [^[:space:]] ]] && [[ "$LINE" != SQL* ]]; then
echo $LINE
fi
done
bash
নয় কারণ [
এটি আসলে একটি বাহ্যিক বাইনারি (যেমন which [
ফলন হিসাবে কিছু /usr/bin/[
)
ইনপুটটিতে কেবল কয়েকটি বৈধ এন্ট্রি থাকলে আমি সম্ভবত রেজিএক্সএক্স ম্যাচগুলি ব্যবহার করব। যেমন কেবলমাত্র "শুরু" এবং "স্টপ" বৈধ ক্রিয়া।
if [[ "${ACTION,,}" =~ ^(start|stop)$ ]]; then
echo "valid action"
fi
নোট করুন যে আমি $ACTION
ডাবল কমা ব্যবহার করে ভেরিয়েবলটি ছোট করে আছি । এছাড়াও মনে রাখবেন যে এটি খুব বেশি বয়সী বাশ সংস্করণগুলিতে কাজ করবে না।
বাশ 4+ উদাহরণ। দ্রষ্টব্য: শব্দের মধ্যে শূন্যস্থান ইত্যাদি থাকাতে কোট ব্যবহার না করা সমস্যার কারণ হয়ে দাঁড়াবে Always
এখানে বাশ 4+ এর কয়েকটি উদাহরণ রয়েছে:
উদাহরণ 1, স্ট্রিংয়ে 'হ্যাঁ' পরীক্ষা করুন (সংবেদনশীল ক্ষেত্রে):
if [[ "${str,,}" == *"yes"* ]] ;then
উদাহরণ 2, স্ট্রিংয়ে 'হ্যাঁ' পরীক্ষা করুন (সংবেদনশীল ক্ষেত্রে):
if [[ "$(echo "$str" | tr '[:upper:]' '[:lower:]')" == *"yes"* ]] ;then
উদাহরণ 3, স্ট্রিংয়ে 'হ্যাঁ' পরীক্ষা করুন (কেস সেনসিটিভ):
if [[ "${str}" == *"yes"* ]] ;then
উদাহরণ 4, স্ট্রিংয়ে 'হ্যাঁ' পরীক্ষা করুন (কেস সংবেদনশীল):
if [[ "${str}" =~ "yes" ]] ;then
5 উদাহরণ, সঠিক মিল (সংবেদনশীল কেস):
if [[ "${str}" == "yes" ]] ;then
উদাহরণ 6, সঠিক মিল (সংবেদনশীল কেস):
if [[ "${str,,}" == "yes" ]] ;then
উদাহরণ 7, সঠিক মিল:
if [ "$a" = "$b" ] ;then
উপভোগ করুন।
if [ "$a"="$b" ]
বা এটি কাজ করে না ... সমান চারপাশে স্পেস থাকতে পারে না