যদি, এলিফ, বাশ-এ অন্য বিবৃতি দেয়


358

আমি কাজ করতে হবে তা নিম্নলিখিত সঙ্গে সমস্যা মনে করতে পারে না ifবিবৃতি শুভেচ্ছা হয় elifএবং then। মনে রাখবেন যে printfএখনও উন্নয়ন চলছে, আমি বিবৃতিতে এখনও এটি পরীক্ষা করতে পারিনি, তাই সম্ভবত ভুলের চেয়ে বেশি।

আমি যে ত্রুটিটি পাচ্ছি তা হ'ল:

./timezone_string.sh: line 14: syntax error near unexpected token `then'
./timezone_string.sh: line 14: `then'

এবং বিবৃতি যেমন হয়।

if [ "$seconds" -eq 0 ];then
   $timezone_string="Z"
elif[ "$seconds" -gt 0 ]
then
   $timezone_string=`printf "%02d:%02d" $seconds/3600 ($seconds/60)%60`
else
   echo "Unknown parameter"
fi

7
আমি ভাবছি কেন আমরা প্রয়োজনthen মধ্যে বিবৃতি ifএবং elifকিন্তু না else, এবং এছাড়াও সাধারণভাবে।

@ w17t, কারণ ক্রম থেকে আমাদের শর্ত পৃথক করা দরকার।
সাশা

3
@ কোডফোরস্টার আমি ৫০০ কে ভিউ প্রশ্নকে কেবল ৫ কে

কিছু কোড স্বতঃ-বিন্যাসকরণ সরঞ্জাম ব্যবহার করা আপনাকে বন্ধনীগুলির চারপাশে ফাঁকা স্থানগুলি স্বয়ংক্রিয়ভাবে যোগ / মুছে ফেলার মাধ্যমে আপনাকে সহায়তা করতে পারে। আপনি আপনার সম্পাদকের জন্য প্লাগইন অনুসন্ধান করতে পারেন।
এনজে সুবেদী

উত্তর:


453

একটা স্থান মধ্যে অনুপস্থিত elifএবং [:

elif[ "$seconds" -gt 0 ]

হতে হবে

elif [ "$seconds" -gt 0 ]

যেহেতু আমি দেখছি যে এই প্রশ্নটি প্রচুর মতামত পাচ্ছে, এটি অনুসরণ করে বাক্য গঠনটি নির্দেশ করা গুরুত্বপূর্ণ:

if [ conditions ]
# ^ ^          ^

মানে বন্ধনীগুলির চারপাশে ফাঁকা স্থান প্রয়োজন । অন্যথায়, এটি কাজ করবে না। এ কারণে যে [নিজেই হয় কমান্ড।

কারণ আপনি ভালো কিছু কেন এইজন্য নেই elif[: command not found(বা অনুরূপ) যে দেখার পর হয় ifএবং then, শেল পারেন জন্য খুঁজছেন হয় elif, elseঅথবা fi। তবে এটি অন্যটি খুঁজে পেয়েছে then(ভুল ফর্ম্যাট করার পরে elif[)। শুধু পরে বিবৃতি পার্স থাকার এটি মৃত্যুদন্ড কার্যকর করা হবে (এবং মত একটি ত্রুটির বার্তা elif[: command not foundআউটপুট হবে)।


33
বন্ধনীর জন্য স্পেসগুলির প্রয়োজনীয়তার কারণ হ'ল এটি প্রকৃত প্রোগ্রামগুলির জন্য কেবল শর্টকাট (কমপক্ষে প্রথম বন্ধনী, দ্বিতীয়টি কেবল সিনট্যাকটিক চিনি হিসাবে আমি এটি বুঝতে পারি)। এটি অনুধাবন করতে বাম বন্ধনীটির আসল ম্যানপেজটি দেখুন:$ man [
মাইকেল জোহানসেন

3
এই পোস্টটি কি টাইপো হিসাবে বন্ধ হওয়ার কথা নয়?
zx8754

3
@ zx8754 হতে পারে তবে এই ত্রুটিটি ঠিক করার পক্ষে এটি একটি সাধারণ উপায় হয়ে উঠেনি, যা বেশ কার্যকর দেখাচ্ছে (৩K০ কে ভিউ এবং গণনা)।
ফেডরকিই 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

3
আমার কিছু সহকর্মী "স্পেস" বা "কোডিং স্টাইল" ধারণাটি বুঝতে পারে না তাই এটি টাইপও নাও হতে পারে।
জাজলিন

3
[পরীক্ষার কমান্ডের জন্য একধরনের নাম। এ কারণেই ফাঁকা চরিত্রের প্রয়োজন। if test "$seconds" -eq 0; then ... fiসমতূল্য if [ "$seconds" -eq 0 ];then ... fi ]। @LeiYang man testআপনি আসলে খুঁজছেন হয়
Melicerte

303

আপনার স্ক্রিপ্টের সাথে আপনার কিছু সিনট্যাক্স সমস্যা রয়েছে। এখানে একটি স্থির সংস্করণ:

#!/bin/bash

if [ "$seconds" -eq 0 ]; then
   timezone_string="Z"
elif [ "$seconds" -gt 0 ]; then
   timezone_string=$(printf "%02d:%02d" $((seconds/3600)) $(((seconds / 60) % 60)))
else
   echo "Unknown parameter"
fi

76
আশ্চর্যের ব্যাপার, এই মাত্র সম্পূর্ণ এবং ছিল সহজ bash "যদি-তারপর-অন্য" গঠন করা আমি সহজে stackexchange পাওয়া ... ধন্যবাদ।
ওয়াইল্ডকার্ড

1
ইন্ডেন্টেশন alচ্ছিক। দোভাষা হতে পারে (এবং হওয়া উচিত) #!/bin/sh

3
@ চিংগিস Total মোট বোকা, দোভাষী হতে পারে #!/bin/shতবে তা করতে হবে না।
ক্যামুসেনসি

4
@ ক্যামুসেনসি এটি মোটামুটি বাজে কথা নয়, shপরিবর্তে উচ্চতর সামঞ্জস্যের জন্য ব্যবহার করা যেতে পারে (সমস্ত * নিক্স ডিস্ট্রোসের ডিফল্ট শেল হিসাবে বাশ থাকে না ( কিছুতে কেশ বা অ্যাশ থাকে তবে তাদের বেশিরভাগই shকার্যকরী মানের উপর নির্ভর করে )। এছাড়াও বাশের নির্দিষ্ট থাকলে বা স্ক্রিপ্টে উন্নত বৈশিষ্ট্যগুলি ব্যবহার করা হচ্ছে না তবে 'শি' অনুবাদক হিসাবে ব্যবহার করা উচিত (এটির জন্য আরও একটি কারণ) কারণ এটি স্ক্রিপ্টটি নিজেই পরিচালনা করতে পারে

6
@ চিংগিস True সত্য, আমার পক্ষে শব্দের খারাপ পছন্দ।
ক্যামুসেনসি

25

[হ'ল একটি কমান্ড (বা কিছু শেলের মধ্যে একটি বিল্টিন)। পূর্ববর্তী বিবৃতি থেকে এটি অবশ্যই সাদা স্থানের দ্বারা পৃথক করা উচিত:

elif [

3
এটি ব্যাশের একটি বিল্টিন দ্বারা ছাড়িয়ে দেওয়া হয়েছে তবে আপনার বার্তাটি এখনও সঠিক। type -a [এটি দেখতে ব্যবহার করুন ।
ক্যামুসেনসি

এটি একটি বাইনারি যা আমাকে সর্বদা অদ্ভুত বলে মনে হয়েছিল।
mr.zog

4

আমি আপনাকে বাশ-এ কন্ডিশনার মূল বিষয়গুলি একবার দেখার পরামর্শ দিচ্ছি।

"[" চিহ্নটি একটি কমান্ড এবং এর পূর্বে অবশ্যই একটি সাদা জায়গা থাকতে হবে। আপনি যদি আপনার এলিফের পরে হোয়াইটস্পেস না দেন তবে সিস্টেমটি এলিফকে ব্যাখ্যা করে [ নির্দিষ্ট কমান্ড হিসাবে যা অবশ্যই আপনি এখন যা চান তা নয়

ব্যবহার:

elif(A COMPULSORY WHITESPACE WITHOUT PARENTHESIS)[(A WHITE SPACE WITHOUT PARENTHESIS)conditions(A WHITESPACE WITHOUT PARENTHESIS)]

সংক্ষেপে, আপনার কোড বিভাগটি এতে সম্পাদনা করুন:

elif [ "$seconds" -gt 0 ]

কোনও সংকলনের ত্রুটি সহ আপনি ভাল থাকবেন। আপনার চূড়ান্ত কোড বিভাগটি এর মতো দেখতে হবে:

#!/bin/sh    
if [ "$seconds" -eq 0 ];then
       $timezone_string="Z"
    elif [ "$seconds" -gt 0 ]
    then
       $timezone_string=`printf "%02d:%02d" $seconds/3600 ($seconds/60)%60`
    else
       echo "Unknown parameter"
    fi

2

আপনার প্রোগ্রামের মধ্যে elifএবং [বিশ্রামের জায়গাগুলি সঠিক। আপনার এটি সংশোধন করা দরকার। এখানে স্থির প্রোগ্রাম:

#!/bin/bash

if [ "$seconds" -eq 0 ]; then
   timezone_string="Z"
elif [ "$seconds" -gt 0 ]; then
   timezone_string=$(printf "%02d:%02d" $((seconds/3600)) $(((seconds / 60) % 60)))
else
   echo "Unknown parameter"
fi

এই বাশ সম্পর্কিত দরকারী লিঙ্ক অন্য বিবৃতি যদি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.