दो प्रोग्रामिंग वातावरण हैं जो हर यूनिक्स-जैसे ऑपरेटिंग सिस्टम पर उपलब्ध हैं, जो ट्यूरिंग-पूर्ण हैं और जो अन्य कार्यक्रमों को कॉल करने में सक्षम हैं: awk , और sh , Bourne / POSIX शेल परिवार। AWK पाठ प्रसंस्करण की ओर उन्मुख है (यह अधिक विशिष्ट उपयोगिताओं का अनुपालन करता है), जबकि sh कार्यक्रमों को एक साथ रखने के लिए गोंद भाषा होने की ओर उन्मुख है। Sh लिनक्स पर और यूनिक्स दुनिया भर में सार्वभौमिक स्क्रिप्टिंग भाषा है।
POSIX मानक श ही है और जुड़े उपयोगिताओं की अनिवार्य सुविधाओं को परिभाषित करता है। अधिकांश यूनिक्स जैसी प्रणालियाँ POSIX 1003.1-2004 (उर्फ सिंगल यूनिक्स v3, उर्फ ओपन ग्रुप बेस स्पेसिफिकेशन समस्या 6) का अनुपालन करती हैं ; उस मानक का नवीनतम संस्करण POSIX 1003.1-2008 (उर्फ सिंगल यूनिक्स v4, उर्फ ओपन ग्रुप बेस स्पेसिफिकेशन अंक 7) है।
हर लिनक्स और यूनिक्स या यूनिक्स जैसी प्रणाली में रास्ते में एक बॉर्न-शैली का खोल होता है /bin/sh
, और किसी भी गैर-एंटीक प्रणाली में एक पॉसिक्स-अनुरूप शेल (सामयिक बग को छोड़कर) होता है। प्रत्येक आधुनिक यूनिक्स जैसी प्रणाली (लिनक्स सहित) शेबंग का समर्थन करती है , इसलिए यह स्वचालित रूप से स्क्रिप्ट चलाता है /bin/sh
यदि पहली पंक्ति है #!/bin/sh
। वहाँ POSIX सिस्टम हैं sh
, जो एक अन्य स्थान पर स्थित है (आमतौर पर OSes पर परतें परतें जिन्हें आप वास्तव में यूनिक्स की तरह होने के बारे में नहीं सोचेंगे)।
एंबेडेड लिनक्स सिस्टम में एक स्ट्रिप-डाउन बिजीबॉक्स सिस्टम हो सकता है जो सभी POSIX सुविधाओं को लागू नहीं करता है। बिजीबॉक्स में छोटे-फुटप्रिंट सिस्टम को समायोजित करने के लिए बड़ी संख्या में संकलन-समय के विकल्प हैं, इसलिए यह जानना मुश्किल है कि अग्रिम में क्या करना है, आपको अपनी स्क्रिप्ट को किसी विशेष डिवाइस पर दर्ज़ करना होगा। बिजीबॉक्स श और मिश्रित उपयोगिताओं का सबसे आम छोटा-फुटप्रिंट कार्यान्वयन है; एक और जिसका आप सामना कर सकते हैं वह है एंड्रॉइड में बेहद कम शेल वातावरण (बाद के संस्करण कम एनीमिक हैं)।
गैर-एम्बेडेड लिनक्स सिस्टम लगभग हमेशा या तो डैश या बैश होता है /bin/sh
। डैश एक छोटा और तेज़ शेल है जो POSIX सुविधाओं की तुलना में थोड़ा अधिक लागू होता है। बैश अधिक विशेषताओं वाला एक बड़ा खोल है।
गैर-एम्बेडेड लिनक्स सिस्टम लगभग हमेशा बैश के रूप में स्थापित होता है /bin/bash
। इसलिए, गैर-एम्बेडेड लिनक्स सिस्टम पर पोर्टेबिलिटी के लिए, आप मान सकते हैं कि बैश उपलब्ध है। बैश की उपयोगी अतिरिक्त विशेषताओं में सरणियाँ हैं, डॉट फ़ाइलों के साथ आसानी से सामना करने की क्षमता, pipestatus
एक पाइपलाइन में सभी कमांडों की वापसी स्थिति प्राप्त करने के लिए चर, फ़ाइल समय के लिए अतिरिक्त तुलना ऑपरेटर, और (हाल के संस्करणों में) नियमित अभिव्यक्ति मिलान ।
शेल प्रोग्रामिंग की एक विशेषता यह है कि आप केवल sh
प्रोग्राम का उपयोग नहीं कर रहे हैं , आप कई उपयोगिताओं का भी उपयोग कर रहे हैं । लिनक्स पर फ़ाइल हेरफेर और टेक्स्ट प्रोसेसिंग उपयोगिताओं में से अधिकांश जीएनयू कोर्यूटिल्स हैं (एम्बेडेड सिस्टम पर, वे आमतौर पर बिजीबॉक्स से हैं)।
यदि आपको लिनक्स से परे पोर्टेबिलिटी की आवश्यकता है, तो आपका सबसे अच्छा शर्त है कि आप POSIX से चिपके रहें। अन्य यूनिक्स वेरिएंट में बैश स्थापित नहीं हो सकता है (बैश ओएसएक्स पर मानक इंस्टॉलेशन का हिस्सा है, लेकिन * बीएसडी और अधिकांश वाणिज्यिक यूनियनों पर एक वैकल्पिक पैकेज)। लिनक्स और OSX (यानी * BSD और वाणिज्यिक यूनियनों) के अलावा लगभग सभी यूनिक्स वेरिएंट में कोर्न शेल का कुछ संस्करण है , कम से कम pdksh । बैश के कई सुविधाजनक एक्सटेंशन ksh से हैं, इसलिए यह उन लिपियों को लिखने के लिए उपयोगी हो सकता है जो दोनों के नीचे चल सकती हैं, लेकिन यह पता लगाना कि किसी अज्ञात सिस्टम पर बैश या ksh कहाँ स्थित है, थोड़ा दर्द हो सकता है।
शेल सब कुछ नहीं कर सकता। यदि आपको अधिक परिष्कृत भाषा की आवश्यकता है, तो दो और सामान्य विकल्प पर्ल और पायथन हैं (कुछ भी एक यूनिक्स स्क्रिप्टिंग भाषा के रूप में बहुत पीछे है)। पर्ल पारंपरिक स्क्रिप्टिंग भाषा है, और कुछ गैर-एम्बेडेड लिनक्स सिस्टम में इसकी कमी है, लेकिन पायथन ग्राउंड हासिल कर रहा है (उबंटू के लिए अनुशंसित स्क्रिप्टिंग भाषा होने के कारण भाग में वृद्धि हुई है)। गैर-लिनक्स दुनिया में, पर्ल ओएसएक्स और ओपनबीएसडी पर आधार स्थापना का हिस्सा है; यह वैकल्पिक है, लेकिन आमतौर पर FreeBSD पर स्थापित है, और वैकल्पिक लेकिन अक्सर NetBSD पर स्थापित है।
sh
।