Skip to main content

একটি বাশ-স্ক্রিপ্ট আর্গুমেন্ট পাস কিভাবে

নতুনেরা 4 শেল স্ক্রিপ্টিং টিউটোরিয়াল - একটি ব্যাশ-স্ক্রিপ্ট আর্গুমেন্ট প্রেরণ (জুন 2025)

নতুনেরা 4 শেল স্ক্রিপ্টিং টিউটোরিয়াল - একটি ব্যাশ-স্ক্রিপ্ট আর্গুমেন্ট প্রেরণ (জুন 2025)
Anonim

আপনি একটি ব্যাশ স্ক্রিপ্ট লিখতে পারেন যেমন এটি কমান্ড লাইন থেকে স্ক্রিপ্টটি কল করার সময় নির্দিষ্ট আর্গুমেন্টগুলি গ্রহণ করে। ইনপুট পরামিতি (আর্গুমেন্ট) এর মানগুলির উপর নির্ভর করে একটি স্ক্রিপ্টটি সামান্য ভিন্ন ফাংশন সম্পাদন করার সময় এই পদ্ধতিটি ব্যবহার করা হয়।

উদাহরণস্বরূপ, আপনার "stats.sh" নামক একটি স্ক্রিপ্ট থাকতে পারে যা একটি ফাইলের উপর একটি বিশেষ ক্রিয়াকলাপ সঞ্চালন করে, যেমন তার শব্দ গণনা করা। আপনি যদি অনেক স্ক্রিপ্টে সেই স্ক্রিপ্টটি ব্যবহার করতে সক্ষম হন তবে ফাইল নামটি একটি যুক্তি হিসাবে পাস করা ভাল, যাতে আপনি সমস্ত ফাইলগুলির প্রক্রিয়া করতে একই স্ক্রিপ্টটি ব্যবহার করতে পারেন। উদাহরণস্বরূপ, যদি ফাইলটির নাম প্রক্রিয়া করা হয় তবে "গান তালিকা" হয় তবে আপনি নিম্নোক্ত কমান্ড লাইনটি প্রবেশ করবেন:

sh stats.sh গান তালিকা

ভেরিয়েবলগুলি $ 1, $ 2, $ 3, ইত্যাদি ব্যবহার করে একটি স্ক্রিপ্টের ভিতরে আর্গুমেন্টগুলি অ্যাক্সেস করা হয়, যেখানে $ 1 প্রথম যুক্তিটি, দ্বিতীয় যুক্তিতে $ 2, ইত্যাদি উল্লেখ করে। এই নিম্নলিখিত উদাহরণে চিত্রিত করা হয়:

File1 = $ 1wc $ FILE1

পঠনযোগ্যতার জন্য, প্রথম যুক্তি ($ 1) এর মানের সাথে একটি বর্ণনামূলক নাম সহ একটি পরিবর্তনশীল বরাদ্দ করুন এবং তারপরে এই পরিবর্তনশীল ($ FILE1) শব্দ গণনা উপযোগ (wc) কল করুন।

যদি আপনার একটি আর্গুমেন্টের পরিবর্তনশীল সংখ্যা থাকে তবে আপনি "$ @" পরিবর্তনশীলটি ব্যবহার করতে পারেন যা সমস্ত ইনপুট পরামিতিগুলির একটি অ্যারে। এর অর্থ হল আপনি একটি জন্য-লুপ ব্যবহার করতে পারেন যথাযথভাবে প্রতিটি প্রক্রিয়া করতে, যেমন নিম্নোক্ত উদাহরণে বর্ণিত:

FILE1 এর জন্য "$ @"করাwc $ FILE1সম্পন্ন

কমান্ড লাইন থেকে আর্গুমেন্ট সহ এই স্ক্রিপ্টটি কিভাবে কল করবেন তার উদাহরণ এখানে দেওয়া হল:

sh stats.sh songlist1 songlist2 songlist3

যদি কোন যুক্তিটি স্পেস থাকে তবে আপনাকে একক উদ্ধৃতি দিয়ে এটি বন্ধ করতে হবে। উদাহরণ স্বরূপ:

sh stats.sh 'গান তালিকা 1' 'গান তালিকা 2' 'গান তালিকা 3'

প্রায়শই একটি স্ক্রিপ্ট লেখা হয় যে ব্যবহারকারী ফ্ল্যাগ ব্যবহার করে যে কোনো ক্রমে আর্গুমেন্টে পাস করতে পারে। পতাকা পদ্ধতি সঙ্গে, আপনি আর্গুমেন্ট কিছু ঐচ্ছিক করতে পারেন।

বলুন আপনার একটি স্ক্রিপ্ট রয়েছে যা নির্দিষ্ট প্যারামিটারের উপর ভিত্তি করে ডেটাবেস থেকে তথ্য পুনরুদ্ধার করে, যেমন "ব্যবহারকারীর নাম", "তারিখ" এবং "পণ্য" এবং একটি নির্দিষ্ট "বিন্যাসে" একটি প্রতিবেদন তৈরি করে। এখন আপনি আপনার স্ক্রিপ্ট লিখতে চান যাতে স্ক্রিপ্টটি কল করার সময় আপনি এই পরামিতিগুলিতে পাস করতে পারেন। এটি এইরকম হতে পারে:

makereport -u jsmith -p নোটবুক -10-10-2011-পিডিএফ

Bash "gatopts" ফাংশন সহ এই কার্যকারিতা সক্ষম করে। উপরের উদাহরণের জন্য, আপনি নিম্নরূপ getopts ব্যবহার করতে পারেন:

যখন আপনি getopts u: d: পি: f: বিকল্পকরাকেস "$ {বিকল্প}"মধ্যেআপনি) USER = $ {OPTARG} ;;ঘ) DATE = $ {OPTARG} ;;পি) পণ্য = $ {OPTARG} ;;f) FORMAT = $ OPTARG ;;esacসম্পন্ন

এটি একটি সময়-লুপ যা "GETOPTS" ফাংশন এবং তথাকথিত "অপটস্ট্রিং" ব্যবহার করে, এই ক্ষেত্রে "u: d: p: f:", আর্গুমেন্টগুলির মাধ্যমে পুনরাবৃত্তি করে। While-loop অপটস্ট্রিংয়ের মধ্য দিয়ে হেঁটে যায়, যার মধ্যে ফ্ল্যাগ রয়েছে যা আর্গুমেন্টগুলি পাস করতে ব্যবহার করা যেতে পারে এবং পরিবর্তনশীল "বিকল্প" এ প্রদত্ত যুক্তিযুক্ত মানটি বরাদ্দ করে। কেস-স্টেটমেন্ট তারপর একটি বৈশ্বিক পরিবর্তনশীলের জন্য পরিবর্তনশীল "বিকল্প" এর মান নির্ধারণ করে যা সমস্ত আর্গুমেন্ট পড়ার পরে ব্যবহার করা যেতে পারে।

অপটস্ট্রিংয়ের কলোনগুলি মানে সংশ্লিষ্ট পতাকাগুলির জন্য মানগুলি প্রয়োজনীয়। উপরের উদাহরণে সমস্ত পতাকা একটি কোলন অনুসরণ করে: "u: d: p: f:"। এর মানে হল, সমস্ত পতাকা একটি মান প্রয়োজন। উদাহরণস্বরূপ, "ডি" এবং "এফ" ফ্ল্যাগগুলি একটি মান থাকার প্রত্যাশিত ছিল না, তবে optstring "u: dp: f" হবে।

Optstring এর শুরুতে একটি কোলন, উদাহরণস্বরূপ ": u: d: p: f:", এর সম্পূর্ণ ভিন্ন অর্থ রয়েছে। এটি আপনাকে ফ্ল্যাগগুলিকে পরিচালনা করতে দেয় যা অপটস্ট্রিংয়ের মধ্যে প্রতিনিধিত্ব করা হয় না। সেই ক্ষেত্রে "বিকল্প" পরিবর্তনশীল মানটি "?" তে সেট করা আছে? এবং "OPTARG" এর মান অপ্রত্যাশিত পতাকাতে সেট করা হয়। ত্রুটিটির ব্যবহারকারীকে জানাতে আপনাকে একটি উপযুক্ত ত্রুটি বার্তা প্রদর্শন করতে দেয়।

একটি পতাকা দ্বারা পূর্বে না যে আর্গুমেন্ট getopts দ্বারা উপেক্ষা করা হয়। যদি স্ক্রিপ্টটি বলা হয় তবে অপটস্ট্রিংয়ের মধ্যে উল্লিখিত পতাকাগুলি সরবরাহ করা হয় না, তবে বিশেষ করে আপনার কোডটিতে এই ক্ষেত্রে পরিচালনা না করা পর্যন্ত কিছুই ঘটবে না। Getops দ্বারা পরিচালিত কোন আর্গুমেন্ট এখনও নিয়মিত $ 1, $ 2, ইত্যাদি ভেরিয়েবল সঙ্গে ধরা যেতে পারে।