परिचय
Linux में अपने वर्कफ़्लो को स्वचालित करने के लिए शेल स्क्रिप्ट एक बहुमुखी तरीका है (और macOS, और अब Windows Subsystem for Linux के साथ Windows में भी)। शेल स्क्रिप्टिंग सिंटैक्स और व्यवहार की अपनी विचित्रताएँ हैं, और आपके स्क्रिप्ट को सरल बनाने के लिए उपयोगी शॉर्टकट भी हैं।
बैश स्क्रिप्टिंग टिप्स
ये टिप्स इंटरनेट से एकत्रित किए गए हैं, साथ ही कुछ मेरे अपने भी हैं।
बैश स्क्रिप्ट त्रुटि होने पर भी चलती रहती है!
यह समस्याएँ पैदा कर सकता है, खासकर यदि उपयोगकर्ता इनपुट स्वीकार कर रहे हों और फ़ाइलों के साथ काम कर रहे हों। इस व्यवहार को रोकने के लिए स्क्रिप्ट की शुरुआत में set कमांड जोड़ें:
set -eu
-e स्क्रिप्ट को त्रुटि होने पर बाहर निकलने के लिए कहता है, और -u स्क्रिप्ट को तब बाहर निकलने के लिए कहता है जब कोई वेरिएबल सेट न हो।
हमेशा शेबैंग शामिल करें
हमेशा अपने स्क्रिप्ट की पहली पंक्ति के रूप में शेबैंग शामिल करें:
#!/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 वेरिएबल पढ़ने के बाद खाली है, तो डिफ़ॉल्ट मान सेट हो जाएगा।
बहुत सारी टिप्पणियाँ छोड़ें
यह आपके भविष्य के स्वयं के लिए है – आप क्या कर रहे हैं और क्यों कर रहे हैं, इसकी व्याख्या करें। अपने कोड के इरादे के बारे में स्पष्ट होना एक अच्छी विवेक जांच है और डीबगिंग में सहायता करता है, और व्यापक टिप्पणी बाद में आपके कोड पर वापस आना आसान बनाती है।
प्रिंट करें, प्रिंट करें, प्रिंट करें
जितना संभव हो उतनी जानकारी कंसोल पर प्रिंट करें, ताकि यदि आपका स्क्रिप्ट क्रैश हो जाए, तो आप जान सकें कि यह कहाँ क्रैश हुआ। बैश स्क्रिप्ट डिफ़ॉल्ट रूप से आवश्यक रूप से वर्बोज़ नहीं होते हैं।
एक निकास स्थिति उत्सर्जित करें
यदि आपके स्क्रिप्ट को कोई त्रुटि आती है, तो सुनिश्चित करें कि यह एक उपयुक्त निकास कोड के साथ बाहर निकलता है, ताकि अन्य स्क्रिप्ट जो इसे कॉल कर सकते हैं, उचित प्रतिक्रिया दे सकें।