आप आसानी से शेलचेक ऑनलाइन (एक स्टैंडअलोन टूल के रूप में भी उपलब्ध) का उपयोग करके अपनी शेल स्क्रिप्ट की जांच कर सकते हैं ।
इस मामले में, यह कहना होगा कि अगर बयान रिक्त स्थान, के बाद की जरूरत है [
और इससे पहले कि ]
, और है कि आप एक की जरूरत है ;
इससे पहले कि (या एक नई पंक्ति) then
एक ही लाइन पर।
जब आपने यह तय कर लिया है, तो यह आपको बताएगा कि USER_NAME
इसका उपयोग किसी भी चीज़ के लिए शुरू किए बिना किया जाता है। इसका कारण यह है कि आपके पास एक user_name
चर (मामला मायने रखता है) भी है। उसी के लिए सच है PASS
और pass
।
यह आपको मैन्ग्लिंग से read -r
रोकने के लिए उपयोग करने के लिए भी कहता है (उदाहरण के लिए, पासवर्ड के लिए महत्वपूर्ण हो सकता है), और यह कि जब आप शेल को गलती से फ़ाइल नाम ग्लोबिंग और वर्ड स्प्लिटिंग करने से रोकने के लिए कॉल करते समय चर को दोगुना कर दें (फिर यह महत्वपूर्ण है अगर पासवर्ड, उदाहरण के लिए, फ़ाइल ग्लोबिंग वर्ण जैसे , या रिक्त स्थान शामिल हैं)।read
\
sqlplus
*
कोड को इंडेंट करना इसे और अधिक पठनीय बना देगा:
#!/bin/bash
read -r -p 'please enter username: ' user_name
IFS= read -rs -p 'please enter password: ' pass
printf 'ORACLE_SID = %s\n' "$ORACLE_SID"
sid=$ORACLE_SID
if [ "$sid" = 'Test' ]; then
echo 'Cannot copy' >&2
exit 1
fi
sqlplus -s -l "$user_name/$pass@$sid" <<'SQL_END'
copy from scott/tiger@orcl insert EMP using select * from EMP
exit
SQL_END
यहां मैंने IFS
पासवर्ड पढ़ने के लिए खाली स्ट्रिंग पर अस्थायी रूप से सेटिंग करके अग्रणी या अनुगामी अंतरिक्ष वर्णों के साथ पासवर्ड का उपयोग करना संभव बना दिया है read
।
अगर $ORACLE_SID
/ $sid
है तो जमानत देने के लिए तर्क को भी बदल दिया गया था Test
। यह एक if
शाखा में स्क्रिप्ट का मुख्य परिचालन हिस्सा होने से बचता है ।