লিনাক্সে শেল স্ক্রিপ্ট লেখার সময় মনে রাখার জন্য কিছু সহজ টিপস নিচে দেওয়া হল।
শেল স্ক্রিপ্ট লিনাক্সে (এবং macOS-এ, এবং এখন উইন্ডোজেও WSL-র মাধ্যমে) ওয়ার্কফ্লো অটোমেট করার একটি বহুমুখী উপায়। শেল স্ক্রিপ্টিং সিনট্যাক্স এবং আচরণের কিছু विशेषতা রয়েছে, এবং স্ক্রিপ্টগুলো সহজ করার জন্য কিছু কার্যকর শর্টকাটও রয়েছে।
ব্যাশ স্ক্রিপ্টিং টিপস
এই টিপসগুলো ইন্টারনেটের বিভিন্ন উৎস থেকে সংগ্রহ করা এবং কিছু নিজের যোগ করা।
এরর থাকলেও ব্যাশ স্ক্রিপ্ট চালতে থাকবে!
এটি সমস্যা সৃষ্টি করতে পারে, বিশেষ করে ইউজার ইনপুট নেওয়ার সময় এবং ফাইল নিয়ে কাজ করার সময়। এই আচরণ রোধ করতে স্ক্রিপ্টের শুরুতে set কমান্ড যোগ করুন:
set -eu
-e স্ক্রিপ্টকে এরর হলে বন্ধ হওয়া বলে, আর -u সেট না করা ভেরিয়েবল থাকলে বন্ধ হওয়া বলে।
শেব্যাং (shebang) সবসময় যোগ করুন
স্ক্রিপ্টের প্রথম লাইনে শেব্যাং যোগ করুন:
#!/bin/sh
এটি সিস্টেমকে বলে কোন শেল দিয়ে স্ক্রিপ্টটি ইন্টারপ্রেট করতে হবে, যা কম্প্যাটিবিলিটির জন্য গুরুত্বপূর্ণ। ব্যাশের জন্য লেখা একটি স্ক্রিপ্ট Zsh-এ ভিন্ন আচরণ করতে পারে, কিন্তু শেব্যাং থাকলে সঠিক শেল দিয়ে ইন্টারপ্রেট হবে।
স্ক্রিপ্টে sudo ব্যবহার করবেন না
এটি অস্পষ্টতা সৃষ্টি করে এবং পাইপ ও রিডাইরেকশন ব্যবহার করার সময় সমস্যা হয়। এটি একটি নিরাপত্তা সমস্যাও। যদি স্ক্রিপ্টে রুট পারমিশন দরকার হয়, তবে পুরো স্ক্রিপ্টটি রুট হিসেবে বা sudo দিয়ে চালান।
স্ক্রিপ্ট রুট/সুডো হিসেবে চলছে কিনা চেক করুন
স্ক্রিপ্টের শুরুতে এই কমান্ড যোগ করুন যাতে রুট/সুডো সুবিধা আছে কিনা যাচাই করা যায়। এটি স্ক্রিপ্টকে শুরুতেই ব্যর্থ করবে যদি রুট পারমিশন না থাকে, পরে রুট প্রয়োজনীয় কমান্ড চালানোর সময় না।
# Check if running as root if ((EUID!=0 )); then printf "Please run as root" exit 1 fi
-y দিয়ে apt প্রম্পট এড়িয়ে যান
apt কমান্ডের শেষে -y যোগ করুন প্রম্পট এড়াতে এবং ইউজার ইনপুট ছাড়া স্ক্রিপ্ট চালাতে:
sudo apt install nano -y
বা
sudo apt upgrade -y
পাথগুলো কোটেশন মার্কে রাখুন!!!
ব্যাশ স্ক্রিপ্ট লিখতে পাথগুলো কোটেশন মার্কে রাখুন। এটি খুবই গুরুত্বপূর্ণ, এজন্য আমাদের একটি পুরো আর্টিকেল আছে।
কারেন্ট ওয়ার্কিং ডিরেক্টরি ঠিক করুন
CURR_DIR="$(dirname $0);" printf -- 'moving application to /opt/app.jar'; mv "${CURR_DIR}/application.jar" /opt/app.jar;
ইউজার ইনপুট থেকে ভেরিয়েবলের ডিফল্ট ভ্যালু সেট করুন
ইউজার ইনপুট নেওয়ার সময় ডিফল্ট ভ্যালু সেট করতে নিচের পদ্ধতি ব্যবহার করুন:
echo "Enter a value" read val val=${val:-"Default Value"}
যদি val ভেরিয়েবলটি পড়ার পর খালি থাকে, তবে ডিফল্ট ভ্যালু সেট হবে।
প্রচুর মাত্রায় কমেন্ট লিখুন
আপনার ভবিষ্যতের নিজের জন্য — আপনি কী করছেন এবং কেন করছেন তা ব্যাখ্যা করুন। কোডের উদ্দেশ্য স্পষ্ট রাখা একটি ভালো স্যানিটি চেক এবং ডিবাগিং-এ সাহায্য করে, এবং বিস্তারিত কমেন্টিং পরবর্তীতে কোডে ফিরে আসার সুবিধা দেয়।
প্রিন্ট করুন, প্রিন্ট করুন, প্রিন্ট করুন
যতটুকু সম্ভব কনসোলে তথ্য প্রিন্ট করুন, যাতে স্ক্রিপ্ট ক্র্যাশ করলে আপনি বুঝতে পারেন কোথায় ক্র্যাশ করেছে। ডিফল্টভাবে ব্যাশ স্ক্রিপ্টها ভার্বোস (verbose) নয়।
এক্সিট স্ট্যাটাস নির্গত করুন
যদি স্ক্রিপ্টটি এরর পায়, তবে নিশ্চিত করুন যে এটি উপযুক্ত এক্সিট কোড দিয়ে বন্ধ হচ্ছে, যাতে এটিকে কল করে অন্যান্য স্ক্রিপ্টها যথাযথভাবে প্রতিক্রিয়া জানাতে পারে।