मैं एक 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
उस त्रुटि का क्या कारण हो सकता है?
(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
)?
;
एक पंक्ति के अंत में एक गैर-सूचीबद्ध (अर्धविराम) की आवश्यकता होती है । आप सेमीकोलन को 157, 161, 165, 168, और 169 के अंत में हटा सकते हैं। (या आप उन्हें छोड़ सकते हैं; मुझे लगता है कि यह शैली का सवाल है।) ... (Cont'd)