বাশ তত্ত্ব

/ বিন / বাশ

0. সূচক

  1. বেশিরভাগ মানুষের ক্ষেত্রে এমন ঘটনা ঘটে
  2. একটি স্ক্রিপ্ট গঠন
  3. স্ক্রিনে মুদ্রণ
  4. ব্যবহারকারী ইনপুট পড়ুন
  5. বাশ গণনা
  6. পদ
  7. লুপস
  8. ক্রিয়াকলাপ
  9. গেটপস

১. বেশিরভাগ মানুষের ক্ষেত্রে এমনটি ঘটে

/ বিন / বাশ বা / বিন / শি

আমাদের স্ক্রিপ্টটি কার্যকর করার সময় মেশিনটি প্রথম যে কাজটি করে তা হ'ল এটি কোন শেলটি দিয়ে তা করা উচিত তা দেখছে। বেশিরভাগ বর্তমান লিনাক্স সিস্টেমে / বিন / SH একটি লিঙ্ক হয় / বিন / বাশ, তবে এটি সর্বদা ক্ষেত্রে হয় না, উদাহরণস্বরূপ ব্যবহৃত বিতরণগুলিতে , busybox তারা আনা Sh এবং সাধারণত তারাও নিয়ে আসে সজোরে আঘাততবে আপনি যদি ব্যবহার করেন / বিন / SH, এটি বাশের সাথে চলবে না। এজন্য আমি সবসময় ব্যবহার করার পরামর্শ দিই / বিন / বাশ.

ইউনিকোড বনাম এএসসিআইআই

আপনি কি কখনও ভেবে দেখেছেন যে আপনি কেন আপনার স্ক্রিপ্টগুলিতে "¿" বা "ñ" ব্যবহার করতে পারবেন না? নাকি অ্যাকসেন্ট ব্যবহার করবেন? ইন্টারেক্টিভ স্ক্রিপ্টগুলিতে এটি বেশ বিরক্তিকর হতে পারে। কারণ বাশের ডিফল্ট এনকোডিংটি ASCII, বা যা একই, ইংরেজি অক্ষর সেট। এটি পরিবর্তন করতে, আমাদের কেবল আমাদের স্ক্রিপ্টটি বলতে হবে যে আমরা ইউনিকোড ব্যবহার করতে চাই। এর জন্য আপনাকে কমান্ড ইন্টারপ্রেটারের ঠিক পরে একটি লাইন যুক্ত করতে হবে:

# - * - এনকোডিং: ইউটিএফ -8 - * -

সতর্কতা অবলম্বন করুন, এটি গুরুত্বপূর্ণ যে এই লাইনটি স্ক্রিপ্টের শুরুতে রয়েছে।

স্ক্রিপ্টটি কার্যকর করা যায় Make

এটি মজাদার যে কত লোকের সাথে স্ক্রিপ্টগুলি চালায় «ash বাশ স্ক্রিপ্ট.শ" পরিবর্তে "/ ./script.sh'সর্বোপরি, আমরা এটির জন্য একটি শেল সংজ্ঞায়িত করেছি।

মৃত্যুদন্ডের অনুমতি যুক্ত করতে আপনাকে কার্যকর করতে হবে:

sudo + x স্ক্রিপ্ট.শ
যদি আমাদের স্ক্রিপ্ট এক্সিকিউটেবল হয়, আমরা এটিকে আমাদের PATH এ যুক্ত করতে এবং আমাদের কম্পিউটারের যে কোনও জায়গা / ফোল্ডার থেকে এটি কার্যকর করতে পারি make তার জন্য আমাদের অবশ্যই আমাদের ব্যবহারকারীর .bashrc বা / etc / bashrc লাইনে যুক্ত করতে হবে
বিন = "ফোল্ডার যেখানে আমাদের স্ক্রিপ্ট রয়েছে" PATH = "$ বিন $ পথ"
সমস্ত বড় হাতের অক্ষরে পরিবর্তনশীল নাম লেখার পক্ষে এটি একটি নিয়ম। অনেকে এই নিয়মটি অনুসরণ করেন না, তবে দীর্ঘ স্ক্রিপ্টগুলির জন্য এটি প্রশংসাযোগ্য কারণ তারা এগুলি আরও বেশি পাঠযোগ্য

২. একটি স্ক্রিপ্টের কাঠামো

  1. মাথা
  2. গ্লোবাল ভেরিয়েবলের সংজ্ঞা
  3. সাহায্য
  4. ক্রিয়াকলাপ
  5. আসল অংশ

শিরোনামটি হ'ল আমরা কোথায় শেলটি ব্যবহার করতে চাই এবং এনকোডিংটি নির্দেশ করি। ফাংশনগুলির সুবিধা হ'ল কোডটি পুনরায় ব্যবহার করা হয় যা কেবল একবার লিখে লিখে পুনরাবৃত্তি করা হয় এবং স্ক্রিপ্টটি বোঝা সহজ করে দেওয়া হয়, কোডটি যে 100 টি লাইন অতিক্রম করে এটি খুব কার্যকর।

ফাংশনগুলি ব্যবহার করার জন্য, তাদের অবশ্যই আমাদের স্ক্রিপ্টের মূল অংশের সাথে সংজ্ঞায়িত করা উচিত। এবং যদি আমরা আমাদের স্ক্রিপ্ট জুড়ে মূল স্ক্রিনে এবং সমস্ত কার্যক্রমে বিশ্বব্যাপী স্তরে ভেরিয়েবলগুলি ব্যবহার করতে চাই, তবে শিরোনামের ঠিক পরে, সমস্ত কিছুর শুরুতে আমাদের এগুলি সংজ্ঞায়িত করতে হবে।

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

ফাংশন সহায়তা () {প্রতিধ্বনি "" "আমাদের ভাল-বিন্যাসিত সহায়তা পাঠ্য" "" "প্রস্থান করুন যদি [[-z $ 1 || $ 1 == "-হ" || $ 1 == "- সহায়তা"]]; তারপরে সহায়তা ফাই

যদি আমরা সহায়তা ফাংশনে "প্রস্থান" যুক্ত করি, আমরা প্রতিবার সহায়তা চালানোর সময় স্ক্রিপ্টটি প্রস্থান করব, উদাহরণস্বরূপ ত্রুটি বার্তাগুলির পরে ইত্যাদি আমরা কয়েকটি লাইনের কোড সংরক্ষণ করি।

শর্তটি স্ক্রিনে প্রদর্শন সহায়তা নির্দেশ করে এবং স্ক্রিপ্টটি পরামিতি ছাড়াই চালানো হয় বা -h / lphelp নির্দিষ্ট করা থাকলে প্রস্থান করুন exit যদি আপনি এটি তাকান, এটি বেশিরভাগ লিনাক্স প্রোগ্রামগুলির স্ট্যান্ডার্ড আচরণ।

প্রতিধ্বনির সাথে 3 টি উদ্ধৃতি ব্যবহার ইকো দ্বারা বার্তা প্রদর্শিত না রেখে লাইন ব্রেক ব্যবহার করতে দেয়। বহু-লাইন বার্তাগুলির জন্য কেবল একবার প্রতিধ্বনি ব্যবহার করা অনেক বেশি সুবিধাজনক।

3. স্ক্রিনে মুদ্রণ

ব্যাশে স্ক্রিনে মুদ্রণের জন্য দুটি প্রধান কমান্ড রয়েছে: «প্রতিধ্বনি"এবং"printf,। তারা উভয়ই ঠিক তত দ্রুত এবং উভয়ই বাশের অংশ। একটি শিক্ষানবিসের জন্য প্রধান পার্থক্য হ'ল প্রতিধ্বনিটি শেষে একটি নতুন লাইন যুক্ত করে whileprintf,"না.

ইকো ঠিক আছে এবং ব্যবহারকারীর ইনপুট পড়ার সময়, বা আপনি যখন ওয়ার্ড প্রসেসিংয়ের মাধ্যমে ফাইল থেকে নেওয়া ভেরিয়েবলগুলি মুদ্রণ করতে চান তখন অদ্ভুত কিছু ঘটতে পারে most এগুলি সাধারণত ডাবল কোটগুলি একক বা তদ্বিপরীত পরিবর্তন করার মতো, বা উদ্ধৃতিগুলির বাইরে পরিবর্তনশীল রেফারেন্স গ্রহণ করার মতো সহজেই সমাধান করা হয়। «প্রতিধ্বনিStrange কীভাবে এটি সংকলিত হয়েছিল তার উপরও নির্ভর করে কি অদ্ভুত জিনিসগুলি রয়েছে, যদি আমরা সর্বদা উবুন্টু বা সর্বদা ফেডোরা ব্যবহার করি তবে এটি আমাদের প্রভাবিত করে না, তবে আমরা যদি বিতরণটি পরিবর্তন করি।

এজন্য আমি useprintf,«, যা আমাকে মাথাব্যথা দেয় না এবং আরও ভাল আচরণ করে«printf,C সি বা »ছাপানোপাইথনের that এটি খুব গুরুত্বপূর্ণ যদি আপনি নিজের স্ক্রিপ্টটিকে অন্য কোনও প্রোগ্রামিং ভাষায় পোর্ট করতে চান।

আরও বিস্তৃত আলোচনার জন্য আপনি দেখতে পারেন স্টিক এক্সচেঞ্জের ইউনিক্স এবং লিনাক্স থেকে এই প্রশ্ন.

4. ব্যবহারকারী ইনপুট পড়ুন

আমরা আমাদের স্ক্রিপ্টের নাম পরে এবং ENTER কী চাপার আগে যা কিছু লিখি তা স্বয়ংক্রিয়ভাবে বিশেষ ভেরিয়েবলগুলিতে সংরক্ষিত হয়। এই ভেরিয়েবলগুলি $ X প্রকারের যেখানে X একটি সংখ্যা।

«$0Our আমাদের স্ক্রিপ্টের নাম এবং থেকে »$1Later আমরা পরে যা লিখে রেখেছি তা অনন্তকে পরিবর্তনশীল। উদাহরণ স্বরূপ:

বিড়াল << ইওএফ >> পরীক্ষা.শ #! / বিন / বাশ # - * - এনকোডিং: ইউটিএফ -8 - * - প্রিন্টফ "\ $ 0 = $ 0 \ n" প্রিন্টফ "\ $ 1 = $ 1 \ n" প্রিন্টফ "\ $ 2 = । 2 \ n "EOF chmod + xcript.sh ./script.sh my file.txt

আমরা একটি পরীক্ষা স্ক্রিপ্ট তৈরি করি, এটি সম্পাদনযোগ্য করে তুলি এবং 2 টি পরামিতি সহ এটি চালাই। এর স্ক্রিন আউটপুট আমরা পাই:

$ 0 = ./script.sh $ 1 = আমার $ 2 = file.txt

উদ্ধৃতি ব্যবহার করে আমরা "আমার ফাইল টেক্সট" কে "$ 1" এ যেতে পারতাম।

আমরা "রিড" কমান্ডের সাহায্যে কোনও ব্যবহারকারীর ইনপুটটিও পড়তে পারি, যেখানে প্যারামিটারটি সংরক্ষণ করতে চান যেখানে ভেরিয়েবলটি সরাসরি নির্দেশ করে। উদাহরণ স্বরূপ:

printf "আপনার নাম কি? \ n" পড়ুন NAME প্রিন্টফ "হ্যালো, $ NAME \ n"
ভেরিয়েবলের অ্যাসাইনমেন্ট সম্পর্কে সতর্কতা অবলম্বন করুন। "AR ভিএআর = সামগ্রী" একটি ত্রুটি তৈরি করবে, সমান চিহ্ন, ভেরিয়েবলের নাম এবং সামগ্রীর মধ্যে কোনও স্থান ফাঁকা যাবে না। সঠিক ব্যবহার হ'ল "VAR = সামগ্রী"

৫.বাশে গণনা

তার জন্য আমরা «এক্সপ্রেসএবং, যতক্ষণ না আমাদের জটিল গণনা করার দরকার নেই। দুটি বিষয় লক্ষ্য করা উচিত, প্রথমটি হ'ল «এক্সপ্রেস»কেবলমাত্র সম্পূর্ণ সংখ্যা স্বীকার করে, দ্বিতীয়টি হল বিভাগটি পুরো ফলাফলটি দেয়, বাকিটি আমরা ব্যবহার করতে পারি তা দেখতে«%"।

সাধারণত আমরা এক্সপ্রেসের ফলাফলটি একটি ভেরিয়েবলের কাছে বরাদ্দ করতে চাই। আমরা এটি দুটি উপায়ে করতে পারি:

VAR2 = `expr $ VAR1 / 10` VAR2 = $ (এক্সপ্রেস $ VAR1 / 100)

আপনি এড়িয়ে যেতে পারেন «এক্সপ্রেসDouble ডাবল বন্ধনী ব্যবহার:

VAR2 = $ (($ ভিএআর 1/100))
আরও ব্যাখ্যা জন্য explanationএক্সপ্রেস»অথবা এমন কোনও বিকল্প যা পুরো সংখ্যা ব্যবহার করে আপনি তা দেখতে পারেন এই KZKG a গারা এন্ট্রি.

6। পদ

এটি ইতিমধ্যে ly উপর ব্যাপকভাবে লেখা হয়েছেif" 'আর" 'Elif»এবং শর্তসমূহ। আপনি এই সম্পর্কে পড়তে পারেন:

আমি কেবল সাধারণ বর্গাকার বন্ধনী ব্যবহারের মধ্যে পার্থক্যটি হাইলাইট করতে চাই, «[]«, এবং ডাবল বন্ধনী,[[]]এবং, শর্তের জন্য। ডাবল বন্ধনী সহ আমরা অতিরিক্ত শর্তাদি ব্যবহার করতে পারি:

  • «&&»জন্য এবং
  • «||»বা জন্য

ব্যবহার করা "&&"এবং"||Simple সাধারণ বর্গাকার বন্ধনী সহ, প্রতিটি অংশ পৃথক স্কোয়ার বন্ধনীগুলিতে পৃথক করা উচিত। স্ক্রিপ্টের অংশটির জন্য ব্যবহৃত উদাহরণ যা দেখে মনে হয় যে সাহায্য কার্যকর করা দরকার কিনা তা হ'ল:

যদি [-z "$ 1"] || ["$ 1" == "-হ"] || ["$ 1" == "- সহায়তা"]]; তারপরে সহায়তা ফাই

এটি ত্রুটি রোধ করতে উদ্ধৃতিগুলিতে পরিবর্তনশীল নামগুলি লেখার হাত থেকে বাঁচায়। উদাহরণ স্বরূপ:

যদি [$ 1 = 1]; তারপরে "প্যারামিটারটি 1 এর সমান" প্রিন্টফ করুন; ফাই যদি ["$ 1" = 1]; তারপরে "প্যারামিটারটি 1 এর সমান" প্রিন্টফ করুন; ফাই যদি [[$ 1 = 1]]; তারপরে "প্যারামিটারটি 1 এর সমান" প্রিন্টফ করুন; ফাই

যদি স্ক্রিপ্ট.শ কোনও পরামিতি ছাড়াই চালানো হয় তবে প্রথম কেসটি একটি ত্রুটি দেয়:

bash: [: =: unary অপারেটর প্রত্যাশিত
বাশের মধ্যে "=" এবং "==" উভয়ই একইভাবে ব্যাখ্যা করা হয়। এটি অন্যান্য প্রোগ্রামিং ভাষায় ঘটে না যেখানে "=" শুধুমাত্র ভেরিয়েবল বরাদ্দ করতে ব্যবহৃত হয়।

যে বিষয়ে কথা হয় নি তা হ'ল «কেস«, সরল করতে ব্যবহৃত«if। শুরুতে শুরু করা যাক, যখন আমাদের কোনও নেই «if»সমস্ত কোড কার্যকর করা হবে। যদি আমরা একটি শর্ত যোগ করি «if»আমাদের দুটি মামলা হবে, একটিতে কোডটি ব্লক করে«if। এবং অন্যান্য ক্ষেত্রে যেখানে এই ব্লকটি কার্যকর করা হয় না।

যদি আমরা একটি add যোগ করিআর«আমাদের দু'টি কেসও থাকবে, তবে এই দুটি ক্ষেত্রে আগের ঘটনাগুলির চেয়ে আলাদা। কারণ এখন দুটি শর্তযুক্ত কোড ব্লক, এ এবং বি, এবং একটি সি ব্লক থাকবে যা প্রোগ্রামের বাকি অংশ। A বা B কার্যকর করা হবে, এবং সি পূর্ববর্তী ক্ষেত্রে এটি A এবং C বা কেবল সি ছিল C.

লেখার শর্ত এড়াতে «অন্যথায় যদি" মধ্যে "আর»এবং কোডটি পড়া সহজ করার জন্য, এটি তৈরি করা হয়েছিল«Elif। যখন আমাদের অনেক শর্ত থাকে যা পূর্ববর্তীটির উপর নির্ভর করে, উদাহরণস্বরূপ সংখ্যা বা প্রকার:

VAR1 = $ 1 যদি [[$ VAR1 = 1]]; তারপরে "1 \ n" এলিফ প্রিন্ট করুন [[$ ভিএআর 1 = 2]]; তারপরে "2 \ n" এলিফ প্রিন্ট করুন [[$ VAR1 = 3]]; তারপরে "3 \ n" মুদ্রণ করুন অন্য কোনও প্রিন্টফ "কিছুই নয়। n" ফাই

শেষের ক্ষেত্রে «Elif»অনেক শর্ত পড়তে হবে। ক্ষেত্রে এই প্রক্রিয়াটি প্রবাহিত হয়:

VAR1 = $ 1 কেস $ VAR in 1) প্রিন্টফ "1 \ n" ;; 2) প্রিন্টফ "2 \ n" ;; 3 | 4) প্রিন্টফ "3 বা 4, এটি নির্ভর করে \ n" ;; *) প্রিন্টফ "" কারও নয় "n" ;; যে সি

একটি পরিবর্তনশীল পড়তে হবে, এক্ষেত্রে VAR1, এবং এটি যে কোনও ক্ষেত্রে সমতুল্য কিনা তা পরীক্ষা করা হবে, যদি তা না হয় তবে ডিফল্ট কেস "*" কার্যকর করা হবে will ডাবল সেমিকোলনগুলি «এর সমতুল্যবিরতি", তারা বলে"কেস»এটি শেষ করতে হবে।

«কেসOf এর ক্রম হিসাবেও ব্যবহার করা যেতে পারে «if«, তার জন্য আপনাকে« ;;; instead এর পরিবর্তে «;; &» (চালিয়ে যান) ব্যবহার করতে হবে (থামুন)

7. লুপস

যে কোনও প্রোগ্রামিং ভাষায় খুব কম লুপ পরিচিত। বাশে তারা «যখন" 'পর্যন্ত"এবং"উন্নত । এটি সম্পর্কে ব্লগে ইতিমধ্যে লেখা হয়েছে:

দুটি ধরণের লুপ রয়েছে «উন্নত «, প্রকারের যারা«O LOQUESEA এ VAR এর জন্য»এবং সি কি ধরনের হয়«$ এর জন্য ((আমি = 0; আমি <= 10; আমি ++))। দ্বিতীয় ধরণের লুপগুলি «উন্নত Very খুব দরকারী, লুপের শুরুতে এর 3 টি অংশ রয়েছে:

  • ভেরিয়েবলের ঘোষণা এবং দীক্ষা (এক্ষেত্রে একটি সহায়ক ভেরিয়েবল "I = 0")।
  • কার্যকর করার শর্ত (যতক্ষণ না আমি 10 এর চেয়ে কম বা সমান)।
  • সহায়ক ভেরিয়েবল বৃদ্ধি

আমার মতে এটি সকলের সবচেয়ে শক্তিশালী লুপ। একটি উদাহরণ, যা 0 থেকে 10 অবধি সমস্ত সংখ্যা মুদ্রণ করে:

#! / বিন / বাশ এর জন্য ((আই = 0; আমি <= 10; আমি ++)); "$ I" n "মুদ্রণ কাজটি সম্পন্ন হয়েছে

8. কার্যাদি

কিছু জিনিস আছে যা বাশ আমাদের করতে দেয় না, তাই না? প্রথম নজরে, ব্যাশ ফাংশনগুলি আপনাকে 3 টি কাজ থেকে বিরত রাখে: ফাংশনে স্থানীয় ভেরিয়েবলগুলি ঘোষণা করা, ফাংশনগুলিতে পরামিতিগুলি প্রেরণ করা এবং পরামিতিগুলি ফিরে আসা। সবকিছুরই সমাধান থাকে।

ভালো কিছু করবেন না:

# !!

এটি 1, 2 এবং 2 স্ক্রিনে মুদ্রণ করে।

স্থানীয় ভেরিয়েবলগুলি ঘোষণা করতে, «স্থানীয়»যখন ঘোষণা:

# !!

এটি স্ক্রিনে 1, 1, 2, 1 মুদ্রণ করে।

আপনি কোনও ফাংশনে কীভাবে পরামিতিগুলি পাস করবেন?

#! / বিন / বাশ # - * - এনকোডিং: ইউটিএফ -8 - * - হ্যালো ফাংশন () {প্রিন্টফ "হ্যালো $ 1 \ n"}

printf "আপনার নাম কি?" n "
ভিএআর 1 পড়ুন
হ্যালো $ VAR1 XNUMX

প্যারামিটারগুলি কীভাবে ফিরে আসে?

# !! printf "$ VAR8 $ VAR1 \ n"

আপনি দেখতে পাচ্ছেন, এর দুটি ত্রুটি রয়েছে, আপনি কেবলমাত্র একটি প্যারামিটার ফিরিয়ে দিতে পারবেন যা ভেক্টর 😀 হতে পারে এবং আপনি যদি কোনও প্যারামিটার ফিরে পেতে চান তবে আপনি আর সেই ফাংশন থেকে পর্দায় মুদ্রণ করতে পারবেন না।

Podéis encontrar más cosas de funciones en [url=https://blog.desdelinux.net/programando-en-bash-parte-3/]este artículo de Usemoslinux[/url].

9. গেটপস

জটিল স্ক্রিপ্টগুলি তৈরি করতে আপনার বাশ সম্পর্কে জানতে হওয়া সর্বশেষ জিনিসগুলির মধ্যে একটি «গপস। এটি অর্ডার নির্বিশেষে স্ক্রিপ্টে বিকল্পগুলি পাস করার জন্য ব্যবহৃত হয়। একমাত্র নেতিবাচকতা এটি কেবল সংক্ষিপ্ত বিকল্পগুলিকে প্রভাবিত করে:

#! / বিন / বাশ # - * - এনকোডিং: ইউটিএফ -8 - * - ভিএআরসি = 0 ফাংশন সহায়তা () {প্রিন্টফ "সহায়তা বার্তা \ n" প্রস্থান করুন [[[-z $ 1]]]; তারপরে গিওপটস করার সময় ফাইকে সহায়তা করুন: হা: বি: সি ওপিটি; do কেস $ ওপটি ইন হ) সহায়তা ;; :) সহায়তা ;; a) VARA = $ অপ্টার্ড ;; খ) VARB = $ অপ্টার্ড ;; গ) ভিএআরসি = 1 ;; \?) সহায়তা ;; এসাক সম্পন্ন হয়েছে # স্ক্রিপ্টের প্রধান ব্লক যা # VARA, VARB এবং VARC এর সাথে কাজ করে with

«গিওপ্টসOne একের পর এক বিকল্পগুলি পড়ে, তাই একটি লুপ প্রয়োজন।

এখানে 2 ধরণের অপশন রয়েছে যা ব্যবহার করে পাস করা যেতে পারে «getopts':

  • এই ক্ষেত্রে -c বা -h ফ্ল্যাগ নামে পরিচিত পরামিতি। আমরা যে চিঠিটি ব্যবহার করতে চাই তার সাথে সেগুলি নির্দিষ্ট করা হয়েছে। এগুলি বুলিয়ান ভেরিয়েবলগুলির মতো «সত্য»(হয়) বা«মিথ্যা"(তারা এখানে নেই)
  • যুক্ত আর্গুমেন্টগুলির সাথে পরামিতি, -এক কিছু, -বি কিছুই। তারা নীচে একটি কোলন দিয়ে আমরা চাই চিঠি দিয়ে নির্দিষ্ট করা হয়। যুক্তিটি OPTARG এ সঞ্চিত আছে (এই নামটি অপরিবর্তনীয়)।
ডাবল প্রাথমিক পয়েন্টগুলি কোনও ত্রুটি না দেখানো হয়।

এই লিপিটি কী করে?

যখন কোনও বিকল্প পাস করা হয় না, যখন "-h" প্যারামিটারটি পাস করা হয়, যখন কোনও অবৈধ প্যারামিটার পাস হয় (উদাহরণস্বরূপ "-x", এটি "\?" দ্বারা সম্পন্ন হয়) বা যখন একটি কোনও যুক্তি ছাড়াই বৈধ প্যারামিটার (":")। বাকী ক্ষেত্রে এটি ভিএআরসি-তে 1 হিসাবে "-c" উপস্থিতি সংরক্ষণ করে এবং VARA এবং VARB এ "-a" এবং "-b" দিয়ে মানগুলি পাস করে।


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

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

*

*

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

  1.   এলাভ তিনি বলেন

    প্রধানত আমি বেশি ইউ_উ বলি না

  2.   মিগুয়েল তিনি বলেন

    হ্যালো খুব ভাল নিবন্ধ।
    আরে আপনি chmod + x এর পরিবর্তে অনুমতিগুলি sudo + x দিতে পারেন

    1.    হেনরি তিনি বলেন

      do সুডো chmod + এক্স স্ক্রিপ্ট.শ
      (আরও সঠিকভাবে বলতে গেলে, হেই)

      আহ, অভিনন্দন এবং ধন্যবাদ!

  3.   ফায়ারকল্ড তিনি বলেন

    খুব ভাল পোস্ট, আমি আপনাকে সত্যি অভিনন্দন জানাই, শুভেচ্ছা জানাচ্ছি

  4.   গুস্তাভো তিনি বলেন

    এবং আপনি যদি স্ক্রিপ্টটি সম্পাদন করার সময় দৃশ্যমান হতে চান তবে ধাপে ধাপে, উদাহরণস্বরূপ ভেরিয়েবল, পরিস্থিতি এবং সবকিছু কীভাবে আচরণ করে তা দেখে আপনি ব্যবহার করতে পারেন:

    sh -x লিপি

    শুভেচ্ছা

  5.   দাগো তিনি বলেন

    টিউটলেজের পিস দুর্দান্ত এবং খুব ভাল ব্যাখ্যা।
    আপনাকে ধন্যবাদ।

  6.   গ্যাব্রিয়েল তিনি বলেন

    বিষয়টিতে দুর্দান্ত পোস্ট 😉

  7.   মারিও গিলারমো জাভালা সিলভা তিনি বলেন

    অত্যন্ত আকর্ষণীয় এবং গুরুত্বপূর্ণ, তথ্যের জন্য ধন্যবাদ…।
    চিয়ার্স !!!

  8.   নটফ্রম্ব্রুক্লিন তিনি বলেন

    আপনার অভিনন্দনের জন্য সবাইকে ধন্যবাদ, মিগুয়েল কমান্ড হিসাবে, এটি প্রকাশিত হওয়ার পরে তিনি আমাকে প্রবেশ পরিবর্তন করতে দিচ্ছেন না। এটি কল্পনা করে নেমে এলভ করতে হবে।

  9.   আদ্রিয়ান তিনি বলেন

    খুব ভালো!

    সবার আগে আমি আপনাকে পোস্টটিতে অভিনন্দন জানাতে চেয়েছিলাম, এটি বুঝতে আমার পক্ষে সহজলভ্যতা খুঁজে পেয়েছে এবং এটি সত্যিই বাশে ভালভাবে প্রোগ্রাম করার জন্য নির্দেশিকাগুলি অনুসরণ করতে সহায়তা করে, বিশেষত যারা প্রোগ্রাম শুরু করছেন তাদের পক্ষে starting

    তবে আমি কয়েকটি বিবরণ পেয়েছি যা আমি মনে করি যা সংশোধন করা উচিত।

    প্রথম: বিভাগে «2। একটি স্ক্রিপ্টের স্ট্রাকচার »ফাংশনটি বন্ধ নয়, যা স্ক্রিপ্টে এটি কার্যকর করার সময় সমস্যা দেখা দেয়।
    সমাধানটি হ'ল "প্রস্থান" কমান্ডের ঠিক পরে এটিতে একটি বন্ধনী বন্ধনী যুক্ত করা।

    দ্বিতীয়: বিভাগে 4। ইউজার ইনপুট পড়ুন "আপনি নিশ্চিত হন যে ব্যবহারকারী যে প্যারামিটারগুলি $ 0 থেকে অনন্তের মধ্যে সীমাতে প্রবেশ করতে পারে, তবে" বাশ "কেবলমাত্র $ 0 থেকে $ 9 পর্যন্ত ব্যাখ্যা করবে, যেহেতু $ 10 $ 1 + 0 সমান হবে।
    এই সমস্যাটি সমাধান করার জন্য, আপনি নীচের ভেরিয়েবলগুলি ধরতে "shift" কমান্ডটি ব্যবহার করতে পারেন। বা ব্রেসগুলি "$ {10}" এ ভেরিয়েবল নির্দিষ্ট করুন, যাতে ব্যাশ মানগুলি একসাথে নিয়ে যায়, together 1 + 0 হিসাবে নয়।

    আর আদো না করে শুভেচ্ছা!

    1.    নটফ্রম্ব্রুক্লিন তিনি বলেন

      আপনার মন্তব্যের জন্য ধন্যবাদ. স্ক্রিপ্ট এবং ফাংশন উভয়ই প্রস্থানটির সঠিক ব্যবহার ব্যাখ্যা করতে এটি সম্পূর্ণরূপে ব্যর্থ হয়েছিল। {{10 for হিসাবে আমি কখনই এত বেশি দোয়া করি নি, তাই আমি এই সমস্যার মধ্যে পড়িনি, এটি জেনে রাখা ভাল যে এর সমাধানের একটি সমাধান রয়েছে (আমি ইতিমধ্যে আজ নতুন জিনিস শিখেছি 😀)

  10.   চ্যানিও তিনি বলেন

    নিবন্ধটির জন্য আপনাকে অনেক ধন্যবাদ! আপনি যে কয়েকটি জিনিস উল্লেখ করেছেন তার মধ্যে এখনও স্পষ্টির অভাব রয়েছে। উদাহরণস্বরূপ, getops।
    স্ক্রিন আউটপুটগুলির অংশে, আপনি বিড়ালের উল্লেখ করতে হয়েছিল যা আপনি পরে উল্লেখ করেছেন ...
    বিড়াল <
    ***************************************
    * এই ফর্মটি খুব চিত্তাকর্ষক *
    ***************************************
    ফাইলের শেষে

    আপনার উদাহরণে:
    বিড়াল << ইওএফ >> টেস্ট.শ
    দুটি বিষয় উল্লেখ করা উচিত ... >> এটি 'সংযোজন' হ'ল, যদি আপনি একই আদেশটি পুনরায় করেন তবে আপনার সম্পূর্ণ স্ক্রিপ্টটি সদৃশ হবে ... আপনার কেবলমাত্র একটি ব্যবহার করা উচিত ...
    বিড়াল << ইওএফ> স্ক্রিপ্ট.শ
    হ্যাঁ, এটিকে স্ক্রিপ্ট.শও বলা উচিত
    তারপরে
    যদি [-z "$ 1"] || ["$ 1" == "-হ"] || ["$ 1" == "lphelp"]]; তারপর
    সাহায্য
    fi

    আমার মনে হয় এটি লেখা উচিত ...
    যদি [[-z "$ 1"] || ["$ 1" == "-হ"] || ["$ 1" == "lphelp"]]; তারপর
    ...

    বেস থেকে আরও অনেক কিছু আবিষ্কার করা যায়।
    আপনি এটি "বেসিকস" উপাধি দিতে পারেন? 🙂
    উদাহরণস্বরূপ, প্যারামিটারগুলি 'পরীক্ষকগণ' -র মতো খালি আছে তা দেখতে, বা -f এটি কোনও ফাইল হিসাবে উপস্থিত রয়েছে কিনা তা দেখতে পছন্দ করে।

    আপনার চেষ্টার জন্য আবার ধন্যবাদ।
    Alberto

  11.   clow_eriol তিনি বলেন

    খুব ভাল বাশ স্ক্রিপ্ট টিউটোরিয়াল!

  12.   ocz তিনি বলেন

    -- এনকোডিং: ইউটিএফ -8 --

    ব্যাশ স্ক্রিপ্টে অক্ষর এনকোডিং সেট করার জন্য আমি প্রথমবার এই লাইনটি দেখেছি। এটি আমার কাছে বাশের চেয়ে পাইথনের মতোই বেশি লাগে। এটা কি সত্যিই প্রয়োজনীয়? আমি গুগলে রেফারেন্স অনুসন্ধান করেছি কিন্তু আমি কিছুই খুঁজে পাচ্ছি না, আপনার হাতে কি একটি লিঙ্ক আছে যা এই বিষয়ে কথা বলে? বিশেষত সেই লাইনের উপযুক্ততার উপর।

    আমার মতে, ইউটিএফ -8 ব্যবহার করে বাশ-এ স্ক্রিপ্টগুলি লেখার জন্য আপনাকে কেবল পাঠ্য ফাইলটি সংরক্ষণ করতে হবে (বিওএম ছাড়াই) এবং নির্দিষ্ট পরিবেশের ভেরিয়েবল (LANG এবং LC_ *) সঠিকভাবে সেট করা উচিত।
    তারপরে, স্পষ্টতই, প্রয়োজনীয় যে কার্যকর করা কমান্ডগুলি ASCII ব্যতীত অন্য এনকোডিংয়ের জন্য প্রস্তুত করা উচিত। উদাহরণস্বরূপ, আমরা যদি বড় হাতের কাছে যেতে চাই তবে এটি কাজ করবে বলে মনে হয় না:
    «প্রতিধ্বনি áéíóú | tr আজ এজেড
    o:
    «প্রতিধ্বনি áéíóú | ট্র [: নিম্ন:] [: উচ্চ:] »
    এবং এটি ব্যবহার করা ভাল:
    «প্রতিধ্বনি áéíóú | awk '{মুদ্রণ টুপার ($ 0)}' »»

    1.    নটফ্রম্ব্রুক্লিন তিনি বলেন

      সম্বন্ধে "এনকোডিংThis এর আগে এই ব্লগে উল্লেখ করা হয়েছে:

      বাশ: কীভাবে স্ক্রিপ্ট কার্যকর করতে হবে
      পোস্ট ইনস্টলেশন ইউটিলিটি স্ক্রিপ্ট

    2.    আপনার মত বোরিকুইটো তিনি বলেন

      কেউ আমাকে সংশোধন করেছেন, তবে সেই এনকোডিং লাইন (# -- এনকোডিং: ইউটিএফ -8 --) বাশ বা শেলের সাথে এর কোনও যোগসূত্র নেই: এটি একটি মন্তব্য লাইন (# দিয়ে শুরু হয়) এবং EDITOR কে বলে দেয় যে আমরা ফাইলটির এনকোডিং স্ক্রিপ্ট (vim, emacs ...) লিখতে ব্যবহার করি।

      প্রকৃতপক্ষে, বাশ এ জাতীয় লাইন দেখতে পাচ্ছে না কারণ এটি একটি মন্তব্য লাইনের।

  13.   জোআরজিই-1987 তিনি বলেন

    দুর্দান্ত টিউটোরিয়াল, যেমন স্যাশডমিন বাশ-তে স্ক্রিপ্টিং জেনে রাখা প্রয়োজনীয়, এটি প্রতিটি কিছুর জন্য কার্যকর।

    খুব খুব ভাল!

    গ্রিটিংস!

  14.   এদুয়ার্দো কুওমো তিনি বলেন

    এটি কারও পক্ষে উপকারী হলে আপনার নিজের স্ক্রিপ্টগুলি তৈরি করতে এখানে কয়েকটি ব্যবহার এবং উদাহরণ রয়েছে: https://github.com/reduardo7/hsabx

  15.   কালো লিটো তিনি বলেন

    খুব ভালো. আমার স্ক্রিপ্টগুলিতে যুক্ত করার জন্য নতুন জিনিস। এনকডিগ জিনিস এবং প্রিন্টফ জিনিসটি এটি ছিল না।
    ধন্যবাদ!!!

  16.   xxxtonixxx তিনি বলেন

    সুও ভালো নিবন্ধ! আমি এটি ফেভারিটের জন্য রাখি, যা ভুল তা সংশোধন করা এবং আরও সামগ্রী সহ এটি প্রসারিত করা ভাল লাগবে। এই সমস্ত তথ্যের জন্য একটি রাতের করতালি !!!!