জিএনইউ / লিনাক্সে শেল স্ক্রিপ্ট তৈরির সেরা অনুশীলন

সাধারণত আপনি যখন কাজ শুরু করেন জিএনইউ / লিনাক্স এবং / অথবা ইউনিক্স অপারেটিং সিস্টেমগুলির সাথে সার্ভারগুলির প্রশাসনিক অঞ্চল, একজন নিজেকে (মুখ) এমন পরিবেশে কাজ করতে দেখেন যেখানে সাধারণত একটি থাকে অন্যান্য প্রশাসকদের লিখেছেন শিড নির্ধারিত কাজগুলি unch এবং যে এক পর্যায়ে আমাদের অবশ্যই পরিচালনা (পরিচালনা) জন্য কোনও সমস্যার সমাধান করুন, সংস্থার নতুন প্রয়োজনীয়তা মেনে চলার জন্য উন্নতি এবং / বা নির্মূল করুন যেখানে সে কাজ করে। সুতরাং এটি আশ্চর্যের নয়, যে কোনও নতুন সিসএডমিন যে কোনও কর্মক্ষেত্রে, আপনাকে কয়েকটি বোঝার জটিল কাজটি করা হচ্ছে শেল লিপি অন্যদের দ্বারা নির্মিত পুরানো সিসএডমিন, যা ভালভাবে লিখিত হয় নি, বা যৌক্তিক বা লেখার কাঠামোতে রয়েছে, তা বোঝা সহজ নয়, বা সবচেয়ে খারাপ ক্ষেত্রে কমান্ড কমান্ড, অ্যাটিক্যাল, পুরাতন, অদক্ষ, বা একটি বিশ্রী এবং বিভ্রান্তিকর উপায়ে লেখা।

শেল স্ক্রিপ্টিং

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

অতএব, প্রকাশনা ব্যবহারিক সিরিজের পরে "শেল স্ক্রিপ্টিং শিখুন" যেখানে আমরা সাধারণ এবং বেসিক কমান্ডগুলি সহ কিছু খুব ব্যবহারিক স্ক্রিপ্টগুলি পরীক্ষা করি, আমরা এই নতুন সিরিজ নামে শুরু করব "জিএনইউ / লিনাক্সে শেল স্ক্রিপ্ট তৈরির সেরা অনুশীলন", যেখানে আমরা এর প্রতিটি সামান্য দিক এবং অনেক কিছুর কারণ সম্পর্কে পুরোপুরি মনোনিবেশ করব, তা হ'ল আমরা এমন কিছু টিপস কভার করব যা আমাদের আরও ভাল স্ক্রিপ্ট তৈরি করে তুলবে, তবে নিজের জন্য নয়, পরবর্তী ব্যক্তির জন্য (সিসএডমিন) যা করতে হবে তাদের পরিচালনা করুন। সুতরাং আমি কী কোড করি, কীভাবে এবং কেন, কেন এটি আর কাজ করে না তা নির্ধারণ করার ক্লান্তিকর এবং কঠিন কাজটি আপনাকেই করতে হবে না।

এই মধ্যে প্রথম (1 ম) পোস্ট এই নতুন সিরিজের "জিএনইউ / লিনাক্সের জন্য ভাল শেল স্ক্রিপ্টের জন্য সেরা অনুশীলন" আমরা কীতে যেতে হবে বা কী করা উচিত সে সম্পর্কে কথা বলব শেল স্ক্রিপ্ট শিরোনাম।

=======================================
শিরোনাম - শেল এর উদ্বোধন
=======================================

#! / পাথ / ব্যাখ্যা [প্যারামিটার-যুক্তি]

শীর্ষ লাইনটি বেসিক কাঠামো যার সাহায্যে জিএনইউ / লিনাক্সের জন্য শেল স্ক্রিপ্ট চাওয়া হয়েছে। এর উপাদানগুলি নিম্নরূপ বর্ণিত হতে পারে:

#! => শ-ব্যাং

শ-ব্যাং (#!) তৈরি করা স্ক্রিপ্টের শীর্ষে ক স্ক্রিপ্ট যা আমাদের অপারেটিং সিস্টেমকে বলে যে আমাদের ফাইলটি আদেশের একটি সেট যা তার পরে নির্দেশিত কমান্ড ইন্টারপ্রেটার দ্বারা খাওয়ানো হবে (ব্যাখ্যা করা হবে)। চরিত্রের জুটি #! আসলে, এটি একটি যাদু নম্বর দ্বি-বাইট, একটি বিশেষ চিহ্নিতকারী একটি ফাইল টাইপ নির্ধারণ করুন, এবং আমাদের ক্ষেত্রে, একটি এক্সিকিউটেবল শেল স্ক্রিপ্ট। সঙ্গে সঙ্গে শা-ব্যাংয়ের নাম আসে দোভাষীকে মৃত্যুদন্ড কার্যকর করার জন্য যে পথটি অবস্থিত তা অনুমিত সংক্ষেপকারীর নাম যুক্ত হয়। অন্য কথায়, এটি প্রোগ্রামটির পথ যা স্ক্রিপ্টের আদেশগুলি ব্যাখ্যা করে, তা সে দোভাষী, প্রোগ্রামিং ভাষা বা ইউটিলিটি হোক। এই শেলটি প্রথমে (শা-ব্যাংয়ের পরে লাইন) শুরু করে এবং কোনও মন্তব্য উপেক্ষা করে স্ক্রিপ্টের কমান্ডগুলি কার্যকর করে। কিছু শ-ব্যাং তারা হতে পারে:

#! / বিন / SH
#! / বিন / ব্যাশ
#! / usr / বিন / পার্ল
#! / usr / বিন / টিসিএল
#! / বিন / সেড -ফ
#! / usr / awk -f

উপরে বর্ণিত প্রতিটি লাইন (উদাহরণ হিসাবে) একটি পৃথক শেল আহ্বান করে। লাইন / বিন / SH, প্রার্থনা খোল ডিফল্টরূপে (একটি জিএনইউ / লিনাক্স অপারেটিং সিস্টেমের উপর চাপ দেওয়া) বা অন্যান্য অনুরূপ। ব্যবহার #! / বিন / SHএর ডিফল্ট মান বোর্ন শেল ইউএনআইএক্স-ভিত্তিক অপারেটিং সিস্টেমগুলির বেশিরভাগ বাণিজ্যিক রূপগুলিতে এটি স্ক্রিপ্ট তৈরি করে makes অন্য অপারেটিং সিস্টেমগুলিতে পোর্টেবল যা সঠিকভাবে লিনাক্স নয়, তবে এটি অনুরূপ বা এর উপর ভিত্তি করে বা ইউনিক্স, যদিও এটি BASH এর নির্দিষ্ট বৈশিষ্ট্যগুলি উত্সর্গ করে। তবে, ক্রম "#! / বিন / শ" আদর্শ অনুসারে POSIX sh মান.

মনে রাখবেন যে শা-ব্যাংয়ে দেওয়া পথটি অবশ্যই সঠিক হতে হবে, অন্যথায় সাধারণত একটি ত্রুটি বার্তা "আদেশ পাওয়া যায় নি", এটি স্ক্রিপ্ট কার্যকর করার একমাত্র ফলাফল হবে। চরিত্রের জুটির কথা মনে রাখবেন »#! « স্ক্রিপ্টটিতে কেবল জেনেরিক অপারেটিং সিস্টেম কমান্ডের একটি সেট থাকে, এটি অভ্যন্তরীণ শেল নির্দেশ ব্যবহার না করেই বাদ দেওয়া যেতে পারে। এবং আবার মনে রাখবেন যে »#! / বিন / শ« ডিফল্ট শেল ইন্টারপ্রেটারকে অনুরোধ করে, যা ডিফল্ট হয় »#! / বিন / বাশ« তার সাথে একটি দলে জিএনইউ / লিনাক্স অপারেটিং সিস্টেম.

যুক্তিগুলির বিষয়ে, বেশ কয়েকটি রয়েছে যা ব্যবহার করা যেতে পারে তবে সবচেয়ে সাধারণ: »-ই«। যা স্ক্রিপ্ট তৈরি করে কোনও কমান্ড কার্যকর করার ত্রুটি বৈধo (কার্যকর করার রেখা) এবং যদি ইতিবাচক হয়, স্টপ এবং প্রস্থান জোর করে, একটি সাধারণ এক »-ফ« জন্য কোন স্ক্রিপ্টটি লোড করতে হবে তা নির্দেশ করুন এবং একটি বিরল হ'ল »-আরএম« এটি কার্যকর করার পরে এটি মুছে ফেলা করে। এটি শুধুমাত্র নির্দিষ্ট করা সম্ভব শ-ব্যাং একটি পর্যন্ত একক যুক্তি (পরামিতি) প্রোগ্রামটির নাম কার্যকর করার পরে।

এবং পরিশেষে, স্ক্রিপ্টটি বলুন গ্লোবাল ভেরিয়েবলগুলি আপনি আপনার কোডের প্রয়োজনীয় অংশগুলিতে ব্যবহার করবেন, ইভেন্টগুলির বৈধতার জন্য যেমন এক্সিকিউশন পাথ, অনুমোদিত ব্যবহারকারী, স্ক্রিপ্টের নাম ইত্যাদি among এবং দিয়ে শেষ প্রোগ্রামের ডেটা, স্রষ্টা, সংস্থা, এবং অন্যদের মধ্যে প্রোগ্রামের সাথে প্রযোজ্য লাইসেন্সিং।

আমার পরামর্শ (সেরা অনুশীলন) নির্বাচন করতে সেরা শা-ব্যাং এবং শিরোনাম a শেল লিপি তারা:

#! / usr / বিন / এনভী বাশ

কমান্ডটি কেন ব্যবহার করা হচ্ছে »এনভ« আমরা অপারেটিং সিস্টেমকে নির্দেশ করি যে এটির মধ্যে ডিফল্টরূপে নির্দিষ্ট করা সঠিক পথটি ব্যবহার করার জন্য দোভাষী ব্যবহার করতে হবে, যা আমাদের একটি শ-ব্যাং এটি তার বহনযোগ্যতা বৃদ্ধি করে, কারণ মোটেও তা নয় ওএস জিএনইউ / লিনাক্স দোভাষী বা প্রোগ্রামগুলির একই পথ রয়েছে। এবং যুক্তি ছাড়াই, কারণ এর জন্য কমান্ডটি ব্যবহার করা ভাল সেট, কারণ তাঁর সাথে আমরা পারব বৈধতা ত্রুটি, সাধারণ (-e) বা নির্দিষ্ট (+ x / -x), অথবা পরিবেশ (-i) বা নির্দিষ্ট (-u / ইউনসেট) ভেরিয়েবলের জন্য গ্লোবাল প্রিসেটগুলি সাফ করুন। এবং অবশেষে, যাও নির্দিষ্ট (- o) পরিপূরক ক্রিয়াকলাপগুলি সম্পাদন করুন স্ক্রিপ্ট ভিতরে।

সুতরাং আমার প্রস্তাবিত হেডারটি হ'ল:

#! / usr / বিন / এনভী বাশ
অপারেটিং সিস্টেমের মাধ্যমে নিখুঁত পাথ দিয়ে ব্যাশ ইন্টারপ্রেটারকে ইঙ্গিত করুন।

সেট -ও ভুল
# কমান্ড বা প্রয়োগের লাইন ব্যর্থ হলে স্ক্রিপ্টটি থামাতে এবং বন্ধ করতে বলা।

সেট-না নামসেট
# স্ক্রিপ্টটি থামাতে এবং বন্ধ করতে বলার জন্য যখন স্ক্রিপ্টটি অঘোষিত ভেরিয়েবলগুলি ব্যবহার করার চেষ্টা করে।

পাইপফেইল সেট করুন
# সর্বশেষ অর্ডার থেকে প্রস্থান স্থিতি পেতে যে কোনও শূন্য-বহির্গমন কোডটি ফেরত দিয়েছে।

# সেট -ও xtrace
# যা চলছে তা ট্র্যাক করতে। ডিবাগিংয়ের জন্য দরকারী। কেবল ত্রুটিগুলি পরীক্ষা করতে এটি সক্ষম করুন।

এই সুপারিশগুলি অতিরিক্ত অনুসরণ করতে ভুলবেন না:

01.- আপনার কোড যুক্ত করুন: আপনার কোডটিকে সুগঠিত করে তোলা অত্যন্ত গুরুত্বপূর্ণ এবং এটি এমন একটি জিনিস যা প্রচুর লোকেরাও ভুলে যায় বলে মনে হয়। দৃষ্টিতে একটি ভাল লজিকাল কাঠামো উপলব্ধি করার জন্য প্রয়োজনীয় সূচকগুলি তৈরি করার চেষ্টা করুন।

02.- কোড বিভাগের মধ্যে পৃথকীকরণ স্পেস যোগ করুন: এটি কোডটিকে আরও বেশি বোধগম্য করতে সহায়তা করতে পারে, যেহেতু মডিউল বা বিভাগগুলির দ্বারা ব্যবধান কোডকে পাঠযোগ্য ও সহজ করে তুলতে সহায়তা করে।

03.- কোড সম্পর্কে যতটা সম্ভব মন্তব্য করুন: প্রতিটি কমান্ড অর্ডার (এক্সিকিউশন লাইন) বা কোড বিভাগের শীর্ষে (বা নীচে), কোডের মধ্যে কী ঘটে থাকে তা বর্ণনা করার জন্য স্ক্রিপ্ট (গুলি) এর কার্যকারিতার বিবরণ যুক্ত করা আদর্শ।

04.- তাদের ফাংশনগুলির বর্ণনামূলক নাম সহ ভেরিয়েবলগুলি তৈরি করুন: বর্ণনামূলক পরিবর্তনশীল নামগুলি বরাদ্দ করুন যা স্পষ্টত এটি ফাংশনটি সনাক্ত করে যার জন্য এটি তৈরি করা হবে। এমনকি যদি আপনি অস্থায়ী ভেরিয়েবলগুলি তৈরি করেন যা কোনও একক কোড ব্লকের বাইরে কখনও ব্যবহৃত হবে না, এমন কোনও নাম রাখা ভাল যা স্পষ্টভাবে (উদ্দেশ্যমূলক) এটি কী মান বা কার্যকারিতা পরিচালনা করে তা ব্যাখ্যা করে।

05.- কমান্ড প্রতিস্থাপনের জন্য ভেরিয়েবল = $ (কমান্ড) সিনট্যাক্সটি ব্যবহার করুন: আপনি যদি এমন কোনও ভেরিয়েবল তৈরি করতে চান যার মান অন্য কমান্ড থেকে প্রাপ্ত, তবে এটির জন্য দুটি উপায় আছে বাশে। সঙ্গে ব্যাকটিক, যে অক্ষর সহ `` , Ejm: বৈকল্পিক = `কমান্ড -পেশনের পরামিতি``, তবে এটি ইতিমধ্যে ছিন্ন করা হয়েছে, তাই বাক্য গঠন পরিবর্তনশীল = $ (আদেশ) এটি সর্বাধিক আধুনিক, গৃহীত এবং প্রস্তাবিত উপায়। কোন -> তারিখ = `তারিখ +% F` / YES -> তারিখ = $ (তারিখ +% এফ)

06.- সুপারভাইজার এবং অনুমোদিত ব্যবহারকারী বৈধকরণ মডিউল এবং / অথবা ভেরিয়েবল পাসওয়ার্ড সহ বা ছাড়াই ব্যবহার করুন: প্রয়োজনে সুরক্ষা স্তর বাড়ানো।

07.- অপারেটিং সিস্টেমের বৈধকরণ (ডিস্ট্রো, সংস্করণ, আর্কিটেকচার) এর মডিউল এবং / অথবা ভেরিয়েবলগুলি ব্যবহার করুন: অনুপযুক্ত প্ল্যাটফর্মগুলিতে ব্যবহার রোধ করতে।

08.- সমালোচনামূলক বা ব্যাচের ক্রিয়াকলাপ (মডিউল / ফাংশন) বাস্তবায়ন নিশ্চিত করতে মডিউল (পদ্ধতি / বিভাগ) ব্যবহার করুন: অসম্পূর্ণতা বা গাফিলতির কারণে ভুলগুলি হ্রাস করতে।

09.- ব্যবহারকারীর বন্ধুত্বপূর্ণ ইন্টারফেসগুলি সরবরাহ করুন (ব্যবহারকারী-বান্ধব): মেনু এবং টার্মিনাল সহ টার্মিনাল দ্বারা কথোপকথন এবং সঙ্গে সঙ্গে জেনিটি, জিএক্সমেসেজ সহ বেসিক ব্যবহারকারীদের জন্য গ্রাফিকাল ইন্টারফেস। এবং যদি সম্ভব হয় তবে সাউন্ড অনুযায়ী সনাক্তযোগ্য ইভেন্টগুলির সনাক্তকারী সোনিক সতর্কতার সহায়তাটি ব্যবহার করুন। আপনার স্ক্রিপ্ট যতটা সম্ভব চেষ্টা করেছি কেবলমাত্র বিকল্পগুলি / মডিউল / ফাংশনগুলি সক্ষম ও অক্ষম করে উভয় উপায়েই কাজ করুন।

10.- স্বাগতম এবং বিদায় মডিউল অন্তর্ভুক্ত (বার্তা): ব্যবহারকারীর সাথে ইন্টারঅ্যাক্টিভিটি বাড়ানোর প্রয়োজন হলে।

১১- ডাবল এক্সিকিউশন যাচাই মডিউল অন্তর্ভুক্ত করুন: এটি একই সাথে 1 টিরও বেশি সময় কার্যকর হতে আটকাতে এটির জন্য একটি লক ফাইল তৈরি করুন।

12.- বাহ্যিক ফাংশন এবং / অথবা মডিউলগুলির সাহায্যে স্ক্রিপ্টের আকারটি যুক্তিযুক্ত করুন: স্ক্রিপ্টটি যদি খুব বড় হয় তবে ফাংশন ব্যবহার করে কোডটি বিভক্ত করুন বা একটি ছোট স্ক্রিপ্টগুলিতে ভাগ করুন যা একটি প্রধানের মাধ্যমে প্রার্থিত are

১৩.- স্ক্রিপ্টের মধ্যে অন্যান্য দোভাষী (প্রোগ্রামিং ল্যাঙ্গুয়েজ) এর কাছে একটি স্পষ্ট এবং সুস্পষ্ট উপায়ে প্রার্থনা: লাইন বা মডিউল দ্বারা তাদের পরিষ্কারভাবে আমন্ত্রণ জানান।

উদাহরণ:

# ================================================== #
#!/bin/bash
#Llamando a un interprete externo a BASH
echo 'El siguiente texto será mostrado por el interprete de PERL'
perl -e 'print "Este texto es mostrado por un script PERL embebido.\n";'
exit 0
# ==================================================#
# ==================================================# 
#!/bin/bash #Llamando al interprete de Python. 
echo 'El siguiente es un script de python:'
echo print "Hola, mundo!" | tee $HOME/.testpythonbash.py
python $HOME/.testpythonbash.py exit 0
# ==================================================#

# ======================================================= #
#!/bin/bash
# bash-y-perl.sh

echo "Saludos desde la parte BASH del script."
# Es posible añadir mas comandos BASH aqui.

exit 0
# Fin de la parte BASH del script.

###########################################################

#!/usr/bin/perl
# Esta parte del script se invoca con la opcion -x.

print "Saludos desde la parte PERL del script.\n";
# Podemos añadir mas comandos PERL aqui.

# Fin de la parte PERL del script.
# ======================================================= #
 

ভবিষ্যতের প্রকাশনাগুলিতে আমরা উপরে বর্ণিত প্রতিটি অনুশীলন আরও বিশদে প্রসারিত করব।

এবং আপনি যদি নিজের কিছু বা অন্য কিছু ভাল অভ্যাস জানেন, তবে আরও সম্পূর্ণ সংক্ষেপে তাদের মন্তব্য করতে দ্বিধা করবেন না!

এই নতুন সিরিজের পরবর্তী প্রকাশনা পর্যন্ত।


আপনার মন্তব্য দিন

আপনার ইমেল ঠিকানা প্রকাশিত হবে না। প্রয়োজনীয় ক্ষেত্রগুলি দিয়ে চিহ্নিত করা *

*

*

  1. ডেটার জন্য দায়বদ্ধ: মিগুয়েল অ্যাঞ্জেল গাটান
  2. ডেটার উদ্দেশ্য: নিয়ন্ত্রণ স্প্যাম, মন্তব্য পরিচালনা।
  3. আইনীকরণ: আপনার সম্মতি
  4. তথ্য যোগাযোগ: ডেটা আইনি বাধ্যবাধকতা ব্যতীত তৃতীয় পক্ষের কাছে জানানো হবে না।
  5. ডেটা স্টোরেজ: ওসেন্টাস নেটওয়ার্কস (ইইউ) দ্বারা হোস্ট করা ডেটাবেস
  6. অধিকার: যে কোনও সময় আপনি আপনার তথ্য সীমাবদ্ধ করতে, পুনরুদ্ধার করতে এবং মুছতে পারেন।

  1.   সর্বাধিক জে রড্রিগেজ তিনি বলেন

    কেবল একটি বিশদ, এটি "শেবাং" 😛 😛
    খুব ভাল পোস্ট, দীর্ঘকালীন ভাল অভ্যাসগুলি সর্বদা মানক করতে সহায়তা করে।

  2.   যে এখানে দিয়ে গেছে তিনি বলেন

    বাশ সমস্ত ডিস্ট্রিবিউশনে ডিফল্ট শেল নয় এবং সুতরাং / bin / sh প্রতীকী লিঙ্কটি সর্বদা বাশকে নির্দেশ করে না। উদাহরণস্বরূপ ডেবিয়ানে (এবং আমি তাই উবুন্টু ধরে নিই):
    s ls -l / bin / sh
    lrwxrwxrwx 1 মূল মূল 4 আজা 8 2014 / বিন / শ -> ড্যাশ
    সুতরাং দেবিয়ানের ডিফল্ট শেলটি ড্যাশ। এখানে দেখো: https://wiki.debian.org/Shell

  3.   নামহীন তিনি বলেন

    ব্যবহারের শেলটি জানার পরামর্শ হিসাবে:

    প্রতিধ্বনি $ 0
    প্রতিধ্বনি $ বিক্রয়
    env | গ্রেপ শেল

  4.   ইনজ জোস অ্যালবার্ট তিনি বলেন

    তুমি সত্যই বলেছ! আমি দেবিয়ান 9 এবং কালি লিনাক্স 2.0 তে পরীক্ষা করেছি এবং এটি সত্য! আপনাকে ড্যাশ এ নিয়ে যায় তার চেয়েও বেশি সুপারিশ: #! / Usr / bin / env বাশ যদি এটি ব্যবহার করাতে চান তবে শেল।

    এবং আপনি একেবারে ঠিক বলেছেন এটি শেবাং, তবে কিছু ওয়েবসাইটগুলিতে (প্রযুক্তিগত সাহিত্য) তারা এটিকে শাবাং বা অন্য শব্দ বলে, তাই আমার বিভ্রান্তি। উদাহরণ:

    কম্পিউটিংয়ে একটি শেবাং হ'ল একটি স্ক্রিপ্টের শুরুতে অক্ষর সংখ্যা চিহ্ন এবং বিস্ময়কর চিহ্ন (#!) সমন্বিত অক্ষর ক্রম। একে শা-ব্যাং, [1] [2] হ্যাশবাং, [3] [4] পাউন্ড-ব্যাং, [5] বা হ্যাশ-প্লিংও বলা হয়

    থেকে: https://en.wikipedia.org/wiki/Shebang_%28Unix%29

    ওয়াই অধ্যায় ২ একটি শ-ব্যাং দিয়ে শুরু
    থেকে: http://www.tldp.org/LDP/abs/html/sha-bang.html

  5.   ইনজ জোস অ্যালবার্ট তিনি বলেন

    এছাড়াও: বেসনাম $ 0