শেল স্ক্রিপ্টগুলির জন্য প্রায় চার স্তরের বহনযোগ্যতা রয়েছে (যতক্ষণ না শেবাং লাইন সম্পর্কিত):
সর্বাধিক বহনযোগ্য: একটি #!/bin/sh
শেবাং ব্যবহার করুন এবং কেবল পসিক্স স্ট্যান্ডার্ডে নির্দিষ্ট বেসিক শেল সিনট্যাক্স ব্যবহার করুন । এটি কোনও পসিক্স / ইউনিক্স / লিনাক্স সিস্টেমে কাজ করা উচিত। (ঠিক আছে, সোলারিস 10 এবং এর আগে যার সত্যিকারের উত্তরাধিকার বোর্ন শেল ছিল, POSIX এর অনুমানযোগ্য হিসাবে অনুমান করে, যেমন /bin/sh
))
দ্বিতীয় সর্বাধিক বহনযোগ্য: একটি #!/bin/bash
(বা #!/usr/bin/env bash
) শেবাং লাইন ব্যবহার করুন, এবং ব্যাশ ভি 3 বৈশিষ্ট্যগুলিকে আটকে দিন। এটি ব্যাশযুক্ত যে কোনও সিস্টেমে কাজ করবে (প্রত্যাশিত স্থানে)।
তৃতীয় সর্বাধিক বহনযোগ্য: একটি #!/bin/bash
(বা #!/usr/bin/env bash
) শেবাং লাইন ব্যবহার করুন এবং ব্যাশ ভি 4 বৈশিষ্ট্যগুলি ব্যবহার করুন। এটি ব্যাশ ভি 3 রয়েছে এমন কোনও সিস্টেমে ব্যর্থ হবে (উদাঃ ম্যাকোস, যা লাইসেন্সের কারণে এটি ব্যবহার করতে হবে)।
সর্বনিম্ন বহনযোগ্য পোর্টেবল: একটি #!/bin/sh
শেবাং ব্যবহার করুন এবং POSIX শেল সিনট্যাক্সে ব্যাশ এক্সটেনশান ব্যবহার করুন। এটি / বিন / শের (যেমন সাম্প্রতিক উবুন্টু সংস্করণগুলির) জন্য বাশ ছাড়া অন্য কিছু রয়েছে এমন কোনও সিস্টেমে ব্যর্থ হবে। কখনও এই কাজ করবেন না; এটি কেবল একটি সামঞ্জস্যের সমস্যা নয়, এটি কেবল সাধারণ ভুল। দুর্ভাগ্যক্রমে, এটি একটি ত্রুটি যা বহু লোক তৈরি করে।
আমার সুপারিশ: প্রথম তিনটির মধ্যে সবচেয়ে রক্ষণশীল ব্যবহার করুন যা আপনাকে স্ক্রিপ্টের জন্য প্রয়োজনীয় সমস্ত শেল বৈশিষ্ট্য সরবরাহ করে। সর্বাধিক বহনযোগ্যতার জন্য, বিকল্প # 1 ব্যবহার করুন, তবে আমার অভিজ্ঞতায় কিছু বাশ বৈশিষ্ট্য (যেমন অ্যারেগুলি) যথেষ্ট সহায়ক যে আমি # 2 দিয়ে যাব।
আপনি সবচেয়ে খারাপ কাজটি করতে পারেন # 4, ভুল শেবাং ব্যবহার করে। আপনি যদি নিশ্চিত না হন যে কোন বৈশিষ্ট্যগুলি বেসিক পসিক্স এবং কোনটি ব্যাশ এক্সটেনশনগুলি হয় তবে তা বাশ শেবাং (যেমন বিকল্প # 2) দিয়ে আটকে থাকুন, বা খুব বেসিক শেল (আপনার উবুন্টু এলটিএস সার্ভারের ড্যাশের মতো) দিয়ে স্ক্রিপ্টটি পুরোপুরি পরীক্ষা করুন। উবুন্টু উইকিতে নজর রাখার জন্য বাশিজমের একটি ভাল তালিকা রয়েছে ।
ইতিহাস এবং ইউনিক্স এবং লিনাক্স প্রশ্নে শাঁসের মধ্যে পার্থক্য সম্পর্কে কিছু খুব ভাল তথ্য রয়েছে "sh সুসংগত হওয়ার অর্থ কী?" এবং স্ট্যাকওভারফ্লো প্রশ্ন "শ এবং বাশের মধ্যে পার্থক্য" ।
এছাড়াও, সচেতন থাকুন যে শেলটি কেবলমাত্র বিভিন্ন ব্যবস্থার মধ্যে পৃথক নয়; আপনি যদি লিনাক্স ব্যবহার করে থাকেন তবে আপনি জিএনইউ কমান্ডের সাথে ব্যবহার করেছেন, যার অনেকগুলি নন-স্ট্যান্ডার্ড এক্সটেনশন রয়েছে যা আপনি অন্যান্য ইউনিক্স সিস্টেমে খুঁজে পাবেন না (যেমন, বিএসডি, ম্যাকোস)। দুর্ভাগ্যক্রমে, এখানে সরল কোনও নিয়ম নেই, আপনি যে কমান্ডগুলি ব্যবহার করছেন তার জন্য আপনাকে কেবল তারতম্যের সীমাটি জানতে হবে।
: বহনযোগ্যতা পরিপ্রেক্ষিতে nastiest কমান্ড এক সবচেয়ে মৌলিক এক echo
। আপনি যে কোনও সময় এটি কোনও বিকল্প (যেমন echo -n
বা echo -e
), বা মুদ্রণের জন্য স্ট্রিংয়ে কোনও পলায়ন (ব্যাকস্ল্যাশ) সহ ব্যবহার করুন , বিভিন্ন সংস্করণ বিভিন্ন জিনিস করবে। আপনি যখনই কোনও স্ট্রিং এর পরে লাইনফিড ছাড়াই মুদ্রণ করতে চান বা স্ট্রিংয়ের সাথে পালাতে চান তার printf
পরিবর্তে ব্যবহার করুন (এবং এটি কীভাবে কাজ করে তা শিখুন - এটি এর চেয়ে জটিল echo
)। ps
কমান্ড একটি জগাখিচুড়ি ।
অপেক্ষারত অন্য সাধারণ জিনিসটি দেখার জন্য সাম্প্রতিক / GNUish এক্সটেনশনগুলি কমান্ড অপশন সিনট্যাক্স: পুরানো (স্ট্যান্ডার্ড) কমান্ড বিন্যাসটি হ'ল কমান্ডটি বিকল্পগুলি অনুসরণ করে (একক ড্যাশ সহ এবং প্রতিটি বিকল্পই একটি অক্ষর থাকে), তারপরে কমান্ড আর্গুমেন্ট। সাম্প্রতিক (এবং প্রায়শই অ-বহনযোগ্য) ভেরিয়েন্টগুলিতে দীর্ঘ বিকল্পগুলি (সাধারণত এর সাথে পরিচয় করা হয় --
) অন্তর্ভুক্ত থাকে, আর্গুমেন্টের পরে বিকল্পগুলি আসতে দেয় এবং --
আর্গুমেন্ট থেকে পৃথক বিকল্পগুলি ব্যবহার করে ।
#!/bin/sh
মূল শেলটি দেওয়া ছাড়া অন্য কিছু ব্যবহার করুন এবং ব্যবহার করবেন না।