আমাদের চলমান ইউনিক্স সেড এবং ইউনিক্স আওক সিরিজের অনুরূপ, আমরা ব্যাশ স্ক্রিপ্টিংয়ের উপর বেশ কয়েকটি নিবন্ধ পোস্ট করব, যা ব্যবহারিক উদাহরণ সহ সমস্ত ব্যাশ স্ক্রিপ্টিং কৌশলগুলিকে কভার করবে।
শেল একটি প্রোগ্রাম, যা ব্যবহারকারীর কমান্ড ব্যাখ্যা করে। কমান্ডগুলি হয় সরাসরি ব্যবহারকারীর দ্বারা প্রবেশ করা হয় বা শেল স্ক্রিপ্ট নামে একটি ফাইল থেকে পড়ে৷
শেলকে একটি ইন্টারেক্টিভ শেল বলা হয়, যখন এটি সরাসরি ব্যবহারকারীর কাছ থেকে ইনপুট পড়ে৷
শেলকে একটি নন-ইন্টারেক্টিভ শেল বলা হয়, যখন এটি একটি ফাইল থেকে কমান্ড পড়ে এবং এটি কার্যকর করে। এই ক্ষেত্রে, শেল একটি স্ক্রিপ্ট ফাইলের প্রতিটি লাইন উপরে থেকে নীচে পড়ে, এবং প্রতিটি কমান্ড এমনভাবে চালায় যেন এটি সরাসরি ব্যবহারকারী দ্বারা টাইপ করা হয়েছে।
বিল্ট ইন শেল ভেরিয়েবল $- এর মান প্রিন্ট করুন, শেলটি ইন্টারেক্টিভ না অ-ইন্টারেক্টিভ কিনা তা জানতে।
# echo $- himBH
দ্রষ্টব্য:$- ভেরিয়েবলে একটি "i" থাকে যখন শেল ইন্টারেক্টিভ হয় .
ইউনিক্সের বিভিন্ন ধরণের শেল রয়েছে। Bourne shell (sh), Bourne again shell (bash), C shell (csh), Korn shell (ksh), Tenex C শেল (tcsh)। নিচের মত করে একটি নির্দিষ্ট শেল কোথায় অবস্থিত তা খুঁজে বের করতে কোনটি বা কোথায় ইউনিক্স কমান্ড ব্যবহার করুন।
# which bash /bin/bash # whereis bash bash: /bin/bash /usr/share/man/man1/bash.1.gz
আপনি শেলের নাম টাইপ করে শেলগুলির মধ্যে স্যুইচ করতে পারেন। উদাহরণস্বরূপ, C শেলে স্যুইচ করতে csh টাইপ করুন।
<কেন্দ্র> কেন্দ্র>শেল স্ক্রিপ্ট লেখা ও সম্পাদন
উদাহরণ 1. হ্যালো ওয়ার্ল্ড ব্যাশ স্ক্রিপ্ট
- আপনার প্রিয় সম্পাদক ব্যবহার করে একটি ফাইলে নিম্নলিখিত দুটি লাইন টাইপ করে একটি স্ক্রিপ্ট তৈরি করুন৷
- আপনি ফাইলের জন্য যেকোনো নাম বেছে নিতে পারেন। ফাইলের নাম ইউনিক্স বিল্ট-ইন কমান্ডের মতো হওয়া উচিত নয়।
- স্ক্রিপ্ট সর্বদা দুটি অক্ষর দিয়ে শুরু হয় ‘#!’ যাকে বলা হয় সে-ব্যাং। এটি নির্দেশ করে যে ফাইলটি একটি স্ক্রিপ্ট, এবং ফাইলের বাকি প্রথম লাইন দ্বারা নির্দিষ্ট করা ইন্টারপ্রেটার (/bin/bash) ব্যবহার করে কার্যকর করা উচিত।
- নিচে দেখানো স্ক্রিপ্টটি চালান। শেল স্ক্রিপ্ট চালানোর ক্ষেত্রে আপনার যদি কোনো সমস্যা হয়, তাহলে শেল স্ক্রিপ্ট এক্সিকিউশন টিউটোরিয়াল পড়ুন
- আপনি যখন "bash helloworld.sh" কমান্ডটি চালান, তখন এটি নন-ইন্টারেক্টিভ শেল শুরু করে এবং এটিতে একটি আর্গুমেন্ট হিসাবে ফাইলের নাম পাস করে।
- প্রথম লাইনটি অপারেটিং সিস্টেমকে বলে যে স্ক্রিপ্টটি চালানোর জন্য কোন শেলটি তৈরি করতে হবে৷
- উপরের উদাহরণে, ব্যাশ ইন্টারপ্রেটার যা স্ক্রিপ্টকে ব্যাখ্যা করে এবং উপরে থেকে নীচের দিকে একের পর এক কমান্ড চালায়।
- এমনকি আপনি স্ক্রিপ্টটি চালাতে পারেন, লিডিং "ব্যাশ" ছাড়াই:
- "chmod u+x helloworld.sh" কমান্ডটি ব্যবহার করে আপনাকে (ব্যবহারকারী) এটি চালানোর অনুমতি দেওয়ার জন্য স্ক্রিপ্টের অনুমতি পরিবর্তন করুন।
- স্ক্রিপ্ট ধারণকারী ডিরেক্টরি PATH এনভায়রনমেন্ট ভেরিয়েবলে অন্তর্ভুক্ত করা উচিত। অন্তর্ভুক্ত না হলে, আপনি স্ক্রিপ্টের নিখুঁত পথ নির্দিষ্ট করে স্ক্রিপ্ট চালাতে পারেন।
- ইকো হল একটি কমান্ড যা আমরা যে আর্গুমেন্ট দিই তা সহজভাবে আউটপুট করে। এটি ভেরিয়েবলের মান প্রিন্ট করতেও ব্যবহৃত হয়।
$ cat helloworld.sh #!/bin/bash echo Hello World
$ bash helloworld.sh Hello World
ব্যাশ-স্টার্টআপ ফাইলগুলি
যেমনটি আমরা .bash_profile এবং সম্পর্কিত ফাইলগুলির নিবন্ধের জন্য আমাদের এক্সিকিউশন সিকোয়েন্সে আগে আলোচনা করেছি, যখন ব্যাশকে একটি ইন্টারেক্টিভ শেল হিসাবে ব্যবহার করা হয়, এটি প্রথমে /etc/profile থেকে কমান্ডগুলি পড়ে এবং কার্যকর করে। যদি /etc/profile বিদ্যমান না থাকে, তাহলে এটি প্রদত্ত ক্রমে ~/.bash_profile, ~/.bash_login এবং ~/.profile থেকে কমান্ডগুলি পড়ে এবং কার্যকর করে। এই আচরণকে বাধা দিতে শেলটি শুরু হলে –noprofile বিকল্পটি ব্যবহার করা যেতে পারে।
সাধারণত আপনার bash_profile ~/.bashrc চালায়। আপনি যদি চান, আপনি একটি স্বাগত বার্তা প্রদর্শন করতে পারেন. আপনি যখন প্রথম লগ ইন করেন তখনই এটি চলে৷ আপনি যা চান তা আপনি ভেরিয়েবল রপ্তানি করতে পারেন, এবং আপনি শেল খোলার পরে চলমান এবং উপলব্ধ উপনামগুলি সেট করতে পারেন৷ যখন একটি লগইন শেল প্রস্থান করে, তখন Bash ~/.bash_logout ফাইল থেকে কমান্ড পড়ে এবং কার্যকর করে।
উদাহরণ 2. লগইন করার সময় একটি স্বাগত বার্তা প্রিন্ট করুন
আপনার bash_profile ফাইলে নিম্নলিখিত বিষয়বস্তু টাইপ করুন। ফাইলটি না থাকলে, নিচের বিষয়বস্তু সহ একটি ফাইল তৈরি করুন।
$ cat ~/.bash_profile hname=`hostname` echo "Welcome on $hname."
আপনি যখন একটি ইন্টারেক্টিভ শেলে লগইন করবেন, আপনি নিচের মত স্বাগত বার্তা দেখতে পাবেন।
login as: root root@dev-db's password: Welcome on dev-db
উদাহরণ 3. সিস্টেম সম্পর্কিত তথ্য মুদ্রণ করুন
আপনি যখন একটি ইন্টারেক্টিভ শেলে লগইন করেন, আপনি সার্ভারে ইনস্টল করা কার্নেলের নাম, ব্যাশ সংস্করণ, সার্ভারে আপটাইম এবং সময় দেখাতে পারেন৷
$cat ~/.bash_profile hname=`hostname` echo "Welcome on $hname." echo -e "Kernel Details: " `uname -smr` echo -e "`bash --version`" echo -ne "Uptime: "; uptime echo -ne "Server time : "; date
আপনি যখন একটি ইন্টারেক্টিভ শেল চালু করেন, তখন এটি নীচে দেখানো বার্তাটি প্রিন্ট করে।
login as: root root@dev-db's password: Welcome on dev-db Kernel Information: Linux 2.6.18-128 x86_64 GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc. Uptime: 11:24:01 up 21 days, 13:15, 3 users, load average: 0.08, 0.18, 0.11 Server time : Tue Feb 22 11:24:01 CET 2010
উদাহরণ 4. শেষ লগইন বিবরণ প্রিন্ট করুন
যদি একাধিক ব্যবহারকারী একই লগইনের সাথে একই মেশিন ব্যবহার করে, তাহলে যে মেশিন থেকে শেষ লগইন হয়েছিল তার মতো বিবরণ এবং তারা যে সময়ে লগইন করেছিল তা সবচেয়ে দরকারী বিবরণ হবে। এই উদাহরণটি একটি ইন্টারেক্টিভ শেল শুরু করার সময় শেষ লগইন বিবরণ প্রিন্ট করে।
$ cat ~/.bash_profile hname=`hostname` echo "Welcome on $hname."echo -e "Kernel Details: " `uname -smr` echo -e "`bash --version`" echo -ne "Uptime: "; uptime echo -ne "Server time : "; datelastlog | grep "root" | awk {'print "শেষ লগইন থেকে :"$3
প্রিন্ট করুন "শেষ লগইন তারিখ এবং সময়:",$4,$5,$6,$7,$8,$9;}'
স্টার্ট আপের সময়, আপনি নীচে দেখানো বার্তাটি পাবেন৷login as: root root@dev-db's password: Welcome on dev-dbKernel Information: Linux 2.6.18-128 x86_64 GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc. Uptime: 11:24:01 up 21 days, 13:15, 3 users, load average: 0.08, 0.18, 0.11 Server time : Tue Feb 22 11:24:01 CET 2010শেষ লগইন থেকে :শশিকলা-ল্যাপটপ
শেষ লগইন তারিখ ও সময়:মঙ্গল ফেব্রুয়ারী 22 11:24:01 +0100 2010
উদাহরণ 5. ভেরিয়েবল রপ্তানি করুন এবং স্টার্ট-আপের সময় উপনাম সেট করুন
আপনার .bashrc এবং .bash_profile ফাইলগুলিতে আপনি যে সবচেয়ে সাধারণ কমান্ডগুলি ব্যবহার করবেন তা হল এক্সপোর্ট এবং উপনাম কমান্ড৷
একটি উপনাম কেবল একটি পাঠ্যের একটি অংশকে অন্যটির জন্য প্রতিস্থাপন করছে। আপনি যখন একটি উপনাম চালান, তখন এটি কেবল আপনি যা টাইপ করেছেন তার পরিবর্তে উপনামটি কী সমান। উদাহরণস্বরূপ, আপনি যদি রঙের সাথে ফাইল/ফোল্ডার তালিকাভুক্ত করার জন্য ls কমান্ডের জন্য একটি উপনাম সেট করতে চান তবে নিম্নলিখিতগুলি করুন:
alias ls 'ls --color=tty'আপনি যদি এই কমান্ডটি স্টার্ট-আপ ফাইলগুলির মধ্যে একটিতে যোগ করেন, আপনি ls কমান্ড চালাতে পারেন, যেখানে এটি স্বয়ংক্রিয়ভাবে ls –color=tty কমান্ড দিয়ে প্রতিস্থাপিত হবে।
এক্সপোর্ট কমান্ড একটি পরিবেশ পরিবর্তনশীল সেট করতে ব্যবহৃত হয়। বিভিন্ন পরিবেশ ভেরিয়েবল সিস্টেম, বা অন্যান্য অ্যাপ্লিকেশন দ্বারা ব্যবহৃত হয়. এগুলি কেবল প্যারামিটার সেট করার একটি উপায় যা যেকোনো অ্যাপ্লিকেশন/স্ক্রিপ্ট পড়তে পারে। আপনি যদি এক্সপোর্ট কমান্ড ছাড়া একটি ভেরিয়েবল সেট করেন, তবে সেই ভেরিয়েবলটি শুধুমাত্র সেই নির্দিষ্ট প্রক্রিয়ার জন্য বিদ্যমান থাকে।
নীচের উদাহরণে, এটি পরিবেশ পরিবর্তনশীল HISTSIZE রপ্তানি করছে। যে লাইনটি # দিয়ে শুরু হচ্ছে সেটি একটি মন্তব্য লাইন।
$ cat /etc/profile alias ls 'ls --color=tty' # Setup some environment variables. export HISTSIZE=1000 PATH=$PATH:$HOME/bin:/usr/bin:/bin/usr:/sbin/etc export PATH export SVN_SH=${SVN_RSH-ssh}