এই সিরিজের প্রথম প্রবন্ধে, আপনি একটি খুব ছোট, এক-লাইন ব্যাশ স্ক্রিপ্ট তৈরি করেছেন এবং শেল স্ক্রিপ্ট তৈরি করার কারণগুলি এবং কেন সেগুলি সংকলিত প্রোগ্রামগুলির পরিবর্তে সিস্টেম অ্যাডমিনিস্ট্রেটরের জন্য সবচেয়ে কার্যকর বিকল্প অনুসন্ধান করেছেন। দ্বিতীয় নিবন্ধে, আপনি একটি মোটামুটি সহজ টেমপ্লেট তৈরি করার কাজ শুরু করেছেন যা আপনি অন্যান্য ব্যাশ প্রোগ্রামগুলির জন্য একটি সূচনা পয়েন্ট হিসাবে ব্যবহার করতে পারেন, তারপর এটি পরীক্ষা করার উপায়গুলি অন্বেষণ করেছেন৷
এই সিরিজের চারটি নিবন্ধের এই তৃতীয়টি ব্যাখ্যা করে কিভাবে একটি সাধারণ সাহায্য ফাংশন তৈরি এবং ব্যবহার করতে হয়। আপনার সাহায্য সুবিধা তৈরি করার সময়, আপনি ফাংশনগুলি ব্যবহার করা এবং -h-এর মতো কমান্ড-লাইন বিকল্পগুলি কীভাবে পরিচালনা করবেন সে সম্পর্কেও শিখবেন। .
কেন সাহায্য?
এমনকি মোটামুটি সাধারণ ব্যাশ প্রোগ্রামগুলিতে কিছু ধরণের সহায়তা সুবিধা থাকা উচিত, এমনকি এটি মোটামুটি প্রাথমিক হলেও। আমার লেখা অনেক ব্যাশ শেল প্রোগ্রাম এত কম ব্যবহৃত হয় যে আমি আমার প্রয়োজনীয় কমান্ডের সঠিক সিনট্যাক্স ভুলে যাই। অন্যগুলো এতই জটিল যে আমি যখন ঘন ঘন ব্যবহার করি তখনও আমাকে বিকল্প এবং যুক্তি পর্যালোচনা করতে হয়।
একটি অন্তর্নির্মিত সহায়তা ফাংশন থাকার ফলে আপনি কোডটি পরীক্ষা না করেই সেই জিনিসগুলি দেখতে পারবেন। একটি ভাল এবং সম্পূর্ণ সাহায্য সুবিধাও প্রোগ্রাম ডকুমেন্টেশনের একটি অংশ৷
ফাংশন সম্পর্কে
শেল ফাংশন হল ব্যাশ প্রোগ্রাম স্টেটমেন্টের তালিকা যা শেল পরিবেশে সংরক্ষণ করা হয় এবং কমান্ড লাইনে তাদের নাম টাইপ করে অন্য যেকোনো কমান্ডের মতোই চালানো যেতে পারে। আপনি কোন প্রোগ্রামিং ভাষা ব্যবহার করছেন তার উপর নির্ভর করে শেল ফাংশনগুলি পদ্ধতি বা সাবরুটিন হিসাবেও পরিচিত হতে পারে।
ফাংশনগুলিকে স্ক্রিপ্টে বা কমান্ড-লাইন ইন্টারফেস (CLI) থেকে তাদের নাম ব্যবহার করে ডাকা হয়, ঠিক যেমন আপনি অন্য কোনো কমান্ডের জন্য চান। একটি CLI প্রোগ্রাম বা একটি স্ক্রিপ্টে, ফাংশনের কমান্ডগুলি কার্যকর হয় যখন সেগুলিকে কল করা হয়, তারপরে প্রোগ্রাম প্রবাহের ক্রমটি কলিং সত্তায় ফিরে আসে এবং সেই সত্তার প্রোগ্রাম স্টেটমেন্টগুলির পরবর্তী সিরিজ কার্যকর হয়৷
একটি ফাংশনের সিনট্যাক্স হল:
FunctionName(){program statements}
CLI এ একটি সাধারণ ফাংশন তৈরি করে এটি অন্বেষণ করুন। (ফাংশনটি শেল পরিবেশে সঞ্চিত থাকে শেল ইন্সট্যান্সের জন্য যেখানে এটি তৈরি করা হয়।) আপনি hw নামে একটি ফাংশন তৈরি করতে যাচ্ছেন , যার অর্থ হল "হ্যালো ওয়ার্ল্ড।" CLI তে নিম্নলিখিত কোডটি লিখুন এবং Enter টিপুন . তারপর hw লিখুন যেমন আপনি অন্য কোনো শেল কমান্ড করবেন:
[student@testvm1 ~]$ hw(){ echo "Hi there kiddo"; }
[student@testvm1 ~]$ hw
Hi there kiddo
[student@testvm1 ~]$
ঠিক আছে, তাই আমি স্ট্যান্ডার্ড "হ্যালো ওয়ার্ল্ড" স্টার্টারে একটু ক্লান্ত। এখন, বর্তমানে সংজ্ঞায়িত সমস্ত ফাংশন তালিকাভুক্ত করুন। তাদের অনেকগুলি আছে, তাই আমি শুধু নতুন hw দেখাচ্ছি৷ ফাংশন যখন এটিকে কমান্ড লাইন থেকে বা একটি প্রোগ্রামের মধ্যে কল করা হয়, তখন একটি ফাংশন তার প্রোগ্রাম করা কাজ সম্পাদন করে এবং তারপরে প্রস্থান করে এবং কলিং এন্টিটি, কমান্ড লাইন বা পরবর্তী ব্যাশ প্রোগ্রাম স্টেটমেন্টে কলিং স্টেটমেন্টের পরে একটি স্ক্রিপ্টে নিয়ন্ত্রণ ফিরিয়ে দেয়:পি>
[student@testvm1 ~]$ declare -f | less
<snip>
hw ()
{
echo "Hi there kiddo"
}
<snip>
সেই ফাংশনটি সরান কারণ আপনার আর এটির প্রয়োজন নেই। আপনি এটি আনসেট দিয়ে করতে পারেন কমান্ড:
[student@testvm1 ~]$ unset -f hw ; hw
bash: hw: command not found
[student@testvm1 ~]$
হেল্প ফাংশন তৈরি করা
হ্যালো খুলুন একটি সম্পাদকে প্রোগ্রাম করুন এবং নীচে হ্যালো-এ সহায়তা ফাংশন যোগ করুন প্রোগ্রাম কোড কপিরাইট বিবৃতির পরে কিন্তু প্রতিধ্বনি "হ্যালো ওয়ার্ল্ড!" আগে৷ বিবৃতি এই হেল্প ফাংশনটি প্রোগ্রামের একটি সংক্ষিপ্ত বিবরণ, একটি সিনট্যাক্স ডায়াগ্রাম এবং উপলব্ধ বিকল্পগুলির সংক্ষিপ্ত বিবরণ প্রদর্শন করবে। এটি পরীক্ষা করতে সহায়তা ফাংশনে একটি কল যোগ করুন এবং কিছু মন্তব্য লাইন যা ফাংশন এবং প্রোগ্রামের প্রধান অংশের মধ্যে একটি ভিজ্যুয়াল সীমানা প্রদান করে:
################################################################################
# Help #
################################################################################
Help()
{
# Display Help
echo "Add description of the script functions here."
echo
echo "Syntax: scriptTemplate [-g|h|v|V]"
echo "options:"
echo "g Print the GPL license notification."
echo "h Print this Help."
echo "v Verbose mode."
echo "V Print software version and exit."
echo
}
################################################################################
################################################################################
# Main program #
################################################################################
################################################################################
Help
echo "Hello world!"
এই হেল্প ফাংশনে বর্ণিত বিকল্পগুলি আমার লেখা প্রোগ্রামগুলির জন্য সাধারণ, যদিও এখনও কোডে নেই। এটি পরীক্ষা করার জন্য প্রোগ্রামটি চালান:
[student@testvm1 ~]$ ./hello
Add description of the script functions here.
Syntax: scriptTemplate [-g|h|v|V]
options:
g Print the GPL license notification.
h Print this Help.
v Verbose mode.
V Print software version and exit.
Hello world!
[student@testvm1 ~]$
যেহেতু আপনি সাহায্য প্রদর্শন করার জন্য কোন যুক্তি যোগ করেননি শুধুমাত্র যখন আপনার প্রয়োজন হবে, প্রোগ্রামটি সর্বদা সাহায্য প্রদর্শন করবে। যেহেতু ফাংশনটি সঠিকভাবে কাজ করছে, শুধুমাত্র -h তখন সাহায্য প্রদর্শন করতে কিছু যুক্তি যোগ করতে পড়ুন আপনি যখন কমান্ড লাইনে প্রোগ্রামটি চালু করেন তখন বিকল্পটি ব্যবহার করা হয়।
হ্যান্ডলিং বিকল্প
একটি ব্যাশ স্ক্রিপ্টের কমান্ড-লাইন বিকল্পগুলি পরিচালনা করার ক্ষমতা যেমন -h প্রোগ্রাম পরিচালনা করতে এবং এটি যা করে তা সংশোধন করার জন্য কিছু শক্তিশালী ক্ষমতা দেয়। -h এর ক্ষেত্রে বিকল্প, আপনি প্রোগ্রামটি টার্মিনাল সেশনে হেল্প টেক্সট প্রিন্ট করতে চান এবং তারপর প্রোগ্রামের বাকি অংশ না চালিয়ে প্রস্থান করতে চান। কমান্ড লাইনে প্রবেশ করা বিকল্পগুলি প্রক্রিয়া করার ক্ষমতা যখন ব্যবহার করে ব্যাশ স্ক্রিপ্টে যোগ করা যেতে পারে কমান্ড (দেখুন ব্যাশের সাথে কীভাবে প্রোগ্রাম করবেন:লুপস যখন সম্পর্কে আরও জানতে ) getops এর সাথে একত্রে এবং কেস কমান্ড।
গেটপস কমান্ড কমান্ড লাইনে নির্দিষ্ট করা যেকোনো এবং সমস্ত বিকল্প পড়ে এবং সেই বিকল্পগুলির একটি তালিকা তৈরি করে। নীচের কোডে, যখন $options পরিবর্তনশীল সেট করে বিকল্পের তালিকার মধ্য দিয়ে কমান্ড লুপ করে প্রতিটির জন্য. মামলা বিবৃতিটি প্রতিটি বিকল্পকে পালাক্রমে মূল্যায়ন করতে এবং সংশ্লিষ্ট স্তবকের বিবৃতিগুলি কার্যকর করতে ব্যবহৃত হয়। যখন বিবৃতি বিকল্পগুলির তালিকার মূল্যায়ন চালিয়ে যাবে যতক্ষণ না সেগুলি সমস্ত প্রক্রিয়া করা হয় বা এটি একটি প্রস্থান বিবৃতির সম্মুখীন হয়, যা প্রোগ্রামটি বন্ধ করে দেয়৷
"হ্যালো ওয়ার্ল্ড!" প্রতিধ্বনিত হওয়ার ঠিক আগে সাহায্য ফাংশন কলটি মুছে ফেলার বিষয়ে নিশ্চিত হন৷ বিবৃতি যাতে প্রোগ্রামের মূল অংশটি এখন এইরকম দেখায়:
################################################################################
################################################################################
# Main program #
################################################################################
################################################################################
################################################################################
# Process the input options. Add options as needed. #
################################################################################
# Get the options
while getopts ":h" option; do
case $option in
h) # display Help
Help
exit;;
esac
done
echo "Hello world!"
-h-এর কেস বিকল্পে প্রস্থান বিবৃতির শেষে ডবল সেমিকোলনটি লক্ষ্য করুন . প্রতিটি বিকল্পের শেষ বর্ণনা করার জন্য এই কেস স্টেটমেন্টে যোগ করা প্রতিটি বিকল্পের জন্য এটি প্রয়োজন।
পরীক্ষা
পরীক্ষা এখন একটু জটিল। আপনার প্রোগ্রামটি কীভাবে সাড়া দেয় তা দেখতে আপনাকে বিভিন্ন বিকল্পের একটি সংখ্যা দিয়ে পরীক্ষা করতে হবে - এবং কোন বিকল্প নেই। প্রথমত, এটি "হ্যালো ওয়ার্ল্ড!" প্রিন্ট করে তা নিশ্চিত করতে কোনো বিকল্প ছাড়াই পরীক্ষা করুন। যেমনটি করা উচিত:
[student@testvm1 ~]$ ./hello
Hello world!
এটি কাজ করে, তাই এখন যুক্তি পরীক্ষা করুন যা সহায়তা পাঠ্য প্রদর্শন করে:
[student@testvm1 ~]$ ./hello -h
Add description of the script functions here.
Syntax: scriptTemplate [-g|h|t|v|V]
options:
g Print the GPL license notification.
h Print this Help.
v Verbose mode.
V Print software version and exit.
এটি প্রত্যাশিত হিসাবে কাজ করে, তাই আপনি যখন কিছু অপ্রত্যাশিত বিকল্প প্রবেশ করেন তখন কী ঘটে তা দেখতে কিছু পরীক্ষা করে দেখুন:
[student@testvm1 ~]$ ./hello -x
Hello world!
[student@testvm1 ~]$ ./hello -q
Hello world!
[student@testvm1 ~]$ ./hello -lkjsahdf
Add description of the script functions here.
Syntax: scriptTemplate [-g|h|t|v|V]
options:
g Print the GPL license notification.
h Print this Help.
v Verbose mode.
V Print software version and exit.
[student@testvm1 ~]$
প্রোগ্রামটি কেবলমাত্র কোনও ত্রুটি তৈরি না করে নির্দিষ্ট প্রতিক্রিয়া ছাড়াই কোনও বিকল্পকে উপেক্ষা করে। কিন্তু শেষ এন্ট্রিটি লক্ষ্য করুন (-lkjsahdf সহ বিকল্পগুলির জন্য):কারণ একটি h আছে৷ বিকল্পগুলির তালিকায়, প্রোগ্রামটি এটিকে স্বীকৃতি দেয় এবং সহায়তা পাঠ্যটি মুদ্রণ করে। এই পরীক্ষাটি দেখিয়েছে যে প্রোগ্রামটির ভুল ইনপুট পরিচালনা করার ক্ষমতা নেই এবং যদি কোনো সনাক্ত করা হয় তবে প্রোগ্রামটি বন্ধ করে দেওয়া যায়৷
আপনি কেস স্টেটমেন্টে অন্য একটি কেস স্তবক যোগ করতে পারেন যাতে কোনো বিকল্পের সাথে সুস্পষ্ট মিল নেই। এই সাধারণ কেসটি এমন কিছুর সাথে মিলবে যার জন্য আপনি একটি নির্দিষ্ট ম্যাচ প্রদান করেননি। \?-এর ক্যাচ-অল ম্যাচ সহ কেস স্টেটমেন্ট এখন এইরকম দেখাচ্ছে শেষ কেস হিসাবে। যেকোন অতিরিক্ত নির্দিষ্ট ক্ষেত্রে অবশ্যই এই চূড়ান্তের আগে থাকতে হবে:
while getopts ":h" option; do
case $option in
h) # display Help
Help
exit;;
\?) # incorrect option
echo "Error: Invalid option"
exit;;
esac
done
আগের মত একই বিকল্প ব্যবহার করে আবার প্রোগ্রাম পরীক্ষা করুন এবং দেখুন এটি এখন কিভাবে কাজ করে।
আপনি যেখানে আছেন
৷আপনি কমান্ড-লাইন বিকল্প এবং একটি সাহায্য পদ্ধতি প্রক্রিয়া করার ক্ষমতা যোগ করে এই নিবন্ধে একটি ভাল পরিমাণ সম্পন্ন করেছেন। আপনার ব্যাশ স্ক্রিপ্ট এখন এইরকম দেখাচ্ছে:
#!/usr/bin/bash
################################################################################
# scriptTemplate #
# #
# Use this template as the beginning of a new program. Place a short #
# description of the script here. #
# #
# Change History #
# 11/11/2019 David Both Original code. This is a template for creating #
# new Bash shell scripts. #
# Add new history entries as needed. #
# #
# #
################################################################################
################################################################################
################################################################################
# #
# Copyright (C) 2007, 2019 David Both #
# [email protected] #
# #
# This program is free software; you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation; either version 2 of the License, or #
# (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with this program; if not, write to the Free Software #
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #
# #
################################################################################
################################################################################
################################################################################
################################################################################
# Help #
################################################################################
Help()
{
# Display Help
echo "Add description of the script functions here."
echo
echo "Syntax: scriptTemplate [-g|h|t|v|V]"
echo "options:"
echo "g Print the GPL license notification."
echo "h Print this Help."
echo "v Verbose mode."
echo "V Print software version and exit."
echo
}
################################################################################
################################################################################
# Main program #
################################################################################
################################################################################
################################################################################
# Process the input options. Add options as needed. #
################################################################################
# Get the options
while getopts ":h" option; do
case $option in
h) # display Help
Help
exit;;
\?) # incorrect option
echo "Error: Invalid option"
exit;;
esac
done
echo "Hello world!"
প্রোগ্রামটির এই সংস্করণটি খুব পুঙ্খানুপুঙ্খভাবে পরীক্ষা করতে ভুলবেন না। র্যান্ডম ইনপুট ব্যবহার করুন এবং দেখুন কি হয়. ড্যাশ (-) ব্যবহার না করেই আপনার বৈধ এবং অবৈধ বিকল্পগুলি পরীক্ষা করার চেষ্টা করা উচিত ) সামনে।
পরের বার
এই নিবন্ধে, আপনি একটি হেল্প ফাংশন যোগ করেছেন সেইসাথে কমান্ড-লাইন বিকল্পগুলিকে বেছে বেছে প্রদর্শন করার জন্য প্রক্রিয়া করার ক্ষমতা। প্রোগ্রামটি একটু বেশি জটিল হয়ে উঠছে, তাই পরীক্ষা আরও গুরুত্বপূর্ণ হয়ে উঠছে এবং সম্পূর্ণ হওয়ার জন্য আরও পরীক্ষার পথের প্রয়োজন৷
পরবর্তী নিবন্ধটি ভেরিয়েবল শুরু করার এবং প্রোগ্রামটি সঠিক সেটের শর্তের অধীনে চালানো হবে তা নিশ্চিত করার জন্য কিছুটা বিচক্ষণতা যাচাই করার দিকে নজর দেবে৷
সম্পদ
- ব্যাশের সাথে কীভাবে প্রোগ্রাম করবেন:সিনট্যাক্স এবং টুলস
- ব্যাশের সাথে কীভাবে প্রোগ্রাম করবেন:লজিক্যাল অপারেটর এবং শেল সম্প্রসারণ
- ব্যাশের সাথে কীভাবে প্রোগ্রাম করবেন:লুপস
প্রবন্ধগুলির এই সিরিজটি আংশিকভাবে ডেভিড বোথের তিন-অংশের Linux স্ব-অধ্যয়ন কোর্সের ভলিউম 2, অধ্যায় 10-এর উপর ভিত্তি করে, Linux-এর ব্যবহার এবং পরিচালনা—জিরো থেকে SysAdmin।