grepstr()
{
grep "$1 $2" $TMP/"ORACLE_SID"_dbmode.txt > /dev/null 2>$1
}
- উপরের আদেশটির অর্থ কী?
- কি
$1
এবং$2
? কেন এটি প্রয়োজনীয়? - ব্যবহার
$1
এবং এর জন্য কোন বিকল্প আছে$2
?
grepstr()
{
grep "$1 $2" $TMP/"ORACLE_SID"_dbmode.txt > /dev/null 2>$1
}
$1
এবং $2
? কেন এটি প্রয়োজনীয়?$1
এবং এর জন্য কোন বিকল্প আছে $2
?উত্তর:
কোডটির মতো দেখতে কি ঠিক এটিই হয়?
যেমনটি এটি, এটি একটি ফাংশন যা দুটি যুক্তি গ্রহণ করে, ধরা যাক তারা arg1
এবং arg2
।
তারপরে এটি ডাকা একটি ফাইল পড়ে ORACLE_SID_dbmode.txt
এবং প্রতিটি লাইন প্রিন্ট করে যার মধ্যে রয়েছে arg1 arg2
(এর মধ্যে একটি জায়গার সাথে একসাথে যোগদান), এবং একটি ফাইলটিতে ত্রুটি বার্তাগুলি সংরক্ষণ করে arg1
।
এটি বেশ বিভ্রান্তিকর, সুতরাং আমি মনে করি এটি আসল কোড নয়।
আমি ভাবতে পারি এটি আসলে এটি:
grepstr()
{
grep "$1" "$2" $TMP/"$ORACLE_SID"_dbmode.txt >/dev/null 2>&1
}
পরিবর্তন করুন:
"$1 $2"
হয়ে "$1" "$2"
ORACLE_SID
হয়ে $ORACLE_SID
2>$1
হয়ে 2>&1
যদি তা হয় তবে এটি দুটি উপায়ে ব্যবহার করা যেতে পারে:
grepstr options string_or_pattern
উদাহরণ স্বরূপ:
grepstr -i something
এটি মুদ্রণ (নিচে দেখুন) ফাইলে কোন লাইন করতে হবে "$ORACLE_SID"_dbmode.txt
যে স্ট্রিং অন্তর্ভুক্ত something
, Something
, SOMETHING
, ইত্যাদি
-i
অর্থ সংবেদনশীল এবং কেবল একটি উদাহরণ; যে কোনও বিকল্প ব্যবহার করা যেতে পারে।
(এছাড়াও, প্রযুক্তিগতভাবে something
কোনও স্ট্রিং নয়, তবে একটি প্যাটার্ন, উদাহরণস্বরূপ [0-9]
কোনও সংখ্যার সাথে মেলে)।
দ্বিতীয় উপায়টি হ'ল:
grepstr string_or_pattern filename
যে ক্ষেত্রে এটা string_or_pattern মিলে কোনো লাইন প্রিন্ট হবে filename
বা "$ORACLE_SID"_dbmode.txt
।
এটি সম্ভবত কম মনে হয় তবে কোডটি কীভাবে ব্যবহৃত হয় তার উপর নির্ভর করে এটি সম্ভব।
এটি এ জাতীয় নামেও ডাকা যেতে পারে:
grepstr option1 option2
তবে এটি স্ট্যান্ডার্ড ইনপুট (যেমন ডিফল্টরূপে কীবোর্ড) থেকে পড়তে পারে এবং এতে যে কোনও লাইন মুদ্রণ করা "$ORACLE_SID"_dbmode.txt
হত যা "$ORACLE_SID"_dbmode.txt
কোনও ফাইলের নামের মতো দেখায় , যা বোঝায় না তা প্রায় নয় , ম্যাচের জন্য স্ট্রিং বা প্যাটার্ন নয়।
যদি আমার অনুমান সঠিক হয়, কোডটি >/dev/null 2>$1
পরিবর্তে এটি নয় >/dev/null 2>&1
, যার অর্থ আউটপুট এবং ত্রুটির বার্তা মুদ্রিত হয় না।
>/dev/null
এর অর্থ হ'ল গ্রেপের মানক আউটপুট (অর্থাত্ ম্যাচিং লাইনগুলি) প্রেরণ করা হচ্ছে /dev/null
যা একটি বিশেষ ফাইল যা অপারেটিং সিস্টেমটি কেবল উপেক্ষা করে।
2>&1
এর পরে >/dev/null
ত্রুটি বার্তাগুলিও সেখানে যায়।
সুতরাং যদি আউটপুটটি গুরুত্বপূর্ণ না grepstr
হয় তবে সম্ভবত তাকে বলা হয়:
if grepstr...
বা এই মত:
grepstr...
if [ $? -ne 0 ]
কোনও মিল থাকলে কেবল কিছু কোড কার্যকর করতে to
আপনার প্রশ্নের অন্য অংশের উত্তরে, হ্যাঁ, এটিতে পরিবর্তন করা যেতে পারে
grepstr()
{
grep "$@" $TMP/"$ORACLE_SID"_dbmode.txt > /dev/null 2>&1
}
"$@"
বিস্তৃতি "$1" "$2" "$3"...
(যেমন প্রদান করা হয় অর্থাত হিসাবে অনেক আর্গুমেন্ট)।
আমি মনে করি যে উপায়টি আরও ভাল হবে, কারণ এটি আরও নমনীয় হবে।
অন্যদিকে, যদি এটির জন্য যদি দুটি কারণে যুক্তি প্রয়োজন হয় তবে আমি ভাবতে পারি না, তবে সম্ভবত "$1" "$2"
লেখকের উদ্দেশ্য ছিল।
$1
এবং $2
পরামিতি হয়। আপনার স্নিপেট ফাংশন সংজ্ঞায়িত করছে grepstr
।
উদাহরণস্বরূপ, চলমান
grepstr first second
আসলে কমান্ড চালায়
grep "first second" $TMP/"ORACLE_SID"_dbmode.txt
এবং আউটপুটটিকে পুনর্নির্দেশ করে /dev/null
(যা বার্তা ডুবানো, সেখানে রাখা সমস্ত কিছুই অদৃশ্য হয়ে যায়)।
মূলত, যখন আপনি স্ক্রিপ্ট (অথবা ফাংশন) চালানোর জন্য, $1
, $2
, $3
(ইত্যাদি) পরামিতি আপনার দেওয়া হয়। -z
উদাহরণস্বরূপ, প্যারামিটারটি সেট করা আছে কিনা তা আপনি পরীক্ষা করতে পারেন if [ -z $3 ]; then ...
।