सिंटैक्स त्रुटि: फ़ाइल का अप्रत्याशित अंत - बैश स्क्रिप्ट [बंद]


20

मैं एक spritz ऐप बनाने की कोशिश कर रहा हूं। सब कुछ ठीक चल रहा था, लेकिन कल से मुझे यह त्रुटि मिलती रही:

./spritz: लाइन 176: वाक्यविन्यास त्रुटि: फ़ाइल का अप्रत्याशित अंत

मैंने स्क्रिप्ट फ़ाइल की जाँच की है और सब कुछ सही लगता है। मैं उलझन में हूँ, मेरे पास एक बयान है और यह सही है! यहाँ अंतिम भाग है:

#checks if speed is 150
157 if [[ $2 -eq 150 ]];
158 then
159 starttime=$SECONDS
160      FS=$'\n'
161      for j in `grep --color=always -iP '\b[^aeiou\s]*[aeiou][^aeiou\s]*\K[aeiou]' $1`;
162      do
163            #Reads the text file in the centre of the screen
164            echo "                                                    ___________________"
165            echo "                                                             $j";
166            echo "                                                    ___________________"
167            echo "                                                                               Speed 150 wpm"
168            sleep  0.9;
169            clear;
170       done
171 endtime=$(($SECONDS - $starttime))
172            echo "You read $words_read words in $endtime seconds!"
173       exit 8
174 fi

उस त्रुटि का क्या कारण हो सकता है?


(०) हमें काम करने वाले अंतिम संस्करण से अलग दिखाने के लिए यह अधिक उपयोगी हो सकता है। ………………… कुछ अवलोकन (जो शायद आपके वर्तमान, विशिष्ट समस्या से संबंधित नहीं हैं): (1) मुझे किसी भी परिस्थिति का पता नहीं है जहां आपको ;एक पंक्ति के अंत में एक गैर-सूचीबद्ध (अर्धविराम) की आवश्यकता होती है । आप सेमीकोलन को 157, 161, 165, 168, और 169 के अंत में हटा सकते हैं। (या आप उन्हें छोड़ सकते हैं; मुझे लगता है कि यह शैली का सवाल है।) ... (Cont'd)
स्कॉट

1
(Cont'd)… (2) आपको शेल वेरिएबल्स को हमेशा उद्धृत करना चाहिए जब तक कि आपके पास एक अच्छा कारण नहीं है और आपको यकीन है कि आप जानते हैं कि आप क्या कर रहे हैं; जैसे, "$1", "$2", "$SECONDS", और "$starttime"। (3) यह पढ़ना आसान है और कोड को डीबग करना ठीक है। (४) आप सेटिंग क्यों कर रहे हैं FSऔर फिर उसका उपयोग क्यों नहीं कर रहे हैं? (५) `…`लिखा जा सकता है $(…)। (6) $(($SECONDS - $starttime))समकक्ष लिखा जा सकता है $((SECONDS - starttime))। फिर, यह मूल रूप से शैली का एक मुद्दा है। (() "$words_read"जब आप इसे लूप में संशोधित नहीं कर रहे हैं तो आप लूप में क्यों प्रिंट कर रहे हैं?
स्कॉट

यहाँ एक डिबगिंग दृष्टिकोण है: 157-174 लाइनों को हटाने और स्क्रिप्ट को फिर से चलाने का प्रयास करें। यदि आपको अभी भी त्रुटि मिलती है (संभवतः रेखा 157 या 158 पर होने के नाते रिपोर्ट की गई है), तो आप जानते हैं कि समस्या 157-174 लाइनों में नहीं है, और आपको आगे पीछे देखना होगा (इसलिए, त्रुटि दूर होने तक प्रक्रिया को दोहराएं। )। … (Cont'd)
स्कॉट

… उदाहरण के लिए, यदि 157-174 लाइनों को हटाने से त्रुटि दूर हो जाती है, तो उन्हें वापस डालें, लेकिन फिर 159-160, 163-168 और 171-172 लाइनों को हटा दें। `grep …`मानों की सूची के साथ प्रतिस्थापित करने का प्रयास करें । दूसरे शब्दों में, उन्मूलन की प्रक्रिया का उपयोग करें।
स्कॉट

स्कॉट की कुछ टिप्पणियों पर टिप्पणी: (विज्ञापन 2) यदि आप सुनिश्चित हैं कि आप क्या कर रहे हैं तो (पोस्ट किए गए कोड में) केवल "$1"उद्धृत करने की आवश्यकता है, (विज्ञापन 4) शायद उसका मतलब था IFS(और नहीं FS)?
जैनिस

जवाबों:


29

डायग्नोस्टिक "फ़ाइल का अनपेक्षित अंत" एक संकेत है कि आपके पास कुछ बेजोड़ या अनारक्षित ओपनिंग सिंटैक्टिकल कंस्ट्रक्शन ( ifw / o fi, dow / o done, कोष्ठक w / o संबंधित क्लोजिंग w / o को खोलना है, लेकिन unterminated quotes आदि)। स्क्रिप्ट के अंत में इंगित लाइन संख्या इस मामले में मददगार नहीं है, आपके वाक्य निर्माण का निरीक्षण करने के लिए कहने से परे; त्रुटि आपके कोड में कहीं भी हो सकती है। आपको वो चेक करना है।


उत्तर के लिए धन्यवाद। मैंने त्रुटि पाई है और इसे ठीक किया है!
स्कॉट पीयर्स

- त्रुटि आपके कोड में कहीं भी हो सकती है। इस सलाह के लिए अपवोट करने के लिए सिर्फ अकाउंट बनाया गया।
user340352
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.