বাশ স্ক্রিপ্টিং-এ গ্রেপ কমান্ড


0
grepstr()
{
 grep "$1 $2" $TMP/"ORACLE_SID"_dbmode.txt > /dev/null 2>$1
}
  1. উপরের আদেশটির অর্থ কী?
  2. কি $1এবং $2? কেন এটি প্রয়োজনীয়?
  3. ব্যবহার $1এবং এর জন্য কোন বিকল্প আছে $2?

উত্তর:


3

কোডটির মতো দেখতে কি ঠিক এটিই হয়?

যেমনটি এটি, এটি একটি ফাংশন যা দুটি যুক্তি গ্রহণ করে, ধরা যাক তারা 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"লেখকের উদ্দেশ্য ছিল।


0

$1এবং $2পরামিতি হয়। আপনার স্নিপেট ফাংশন সংজ্ঞায়িত করছে grepstr

উদাহরণস্বরূপ, চলমান

grepstr first second

আসলে কমান্ড চালায়

grep "first second" $TMP/"ORACLE_SID"_dbmode.txt

এবং আউটপুটটিকে পুনর্নির্দেশ করে /dev/null(যা বার্তা ডুবানো, সেখানে রাখা সমস্ত কিছুই অদৃশ্য হয়ে যায়)।

মূলত, যখন আপনি স্ক্রিপ্ট (অথবা ফাংশন) চালানোর জন্য, $1, $2, $3(ইত্যাদি) পরামিতি আপনার দেওয়া হয়। -zউদাহরণস্বরূপ, প্যারামিটারটি সেট করা আছে কিনা তা আপনি পরীক্ষা করতে পারেন if [ -z $3 ]; then ...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.