উত্তর:
if (( RANDOM % 2 )); then C1; else C2; fi
== 0
এ বি বি ((
কোনও তুলনা ছাড়াই ব্লকগুলিতে অন্তর্ভুক্ত, সুতরাং আপনার অর্থ কী তা আমি নিশ্চিত নই।
== 0
এ বি বি আমার পূর্ববর্তী মন্তব্যে একটি টাইপো, আমি বোঝাতে চাইছি > 0
অন্তর্নিহিত। যেহেতু % 100
প্রায় সবসময় উপরে একটি মান ফেরত আসবে 0
, এটি প্রত্যাশিত।
RANDOM % $N
ছাড়া == 0
কী হবে ? আইএমও, উদাহরণস্বরূপ এন = 100 এর সাথে == 0
100 এর মধ্যে 99 টি (ছাড়াই বিতরণ করা ) এর চেয়ে 100 এর মধ্যে 1 টি (বিতরণ করা ) হওয়া 1 এর চেয়ে অনেক বেশি বাস্তববাদী == 0
।
আপনার বিশেষ ক্ষেত্রে:
C$((RANDOM%2+1))
কাজ করবে :) এবং আরে, এটি সবচেয়ে সংক্ষিপ্ত উত্তর!
$((1+1))
-> 2
, যেমন। $(( ))
ভিতরে কি আছে তা গণনা করে।
আপনি বাশে এ জাতীয় কিছু করতে পারেন:
$ (( RANDOM%2 == 0 )) && C1 || C2
এটি 0 বা 1 হয় একটি এলোমেলো সংখ্যা জেনারেট করে, যদি এটি 0 হয় তবে সি 1 চালায়, অন্যথায় সি 2 যদি এটি না হয় তবে চালায়।
$ (( RANDOM%2 == 0 )) && echo 0 || echo 1
1
$ (( RANDOM%2 == 0 )) && echo 0 || echo 1
0
দ্রষ্টব্য: প্রথম চরিত্রটি $
হ'ল প্রম্পট।
যদি আপনি সি 1 নিয়ে ব্যর্থ হন যাতে সি 2 চালাতে পারে তবে আপনি উপরের মত পুনর্গঠন করতে পারেন:
(( RANDOM%2 == 0 )) && CMD=C1 || CMD=C2
$CMD
এই উত্তরটি কিছুটা সমালোচিত হয়েছে তবে আমার উন্মাদনার একটি পদ্ধতি আছে। যদিও এই প্যাটার্নটি যদি / এর চেয়ে বেশি অস্পষ্ট মনে হয় তবে নীচের মতো কিছু করার সময় আমি এটি আরও পঠনযোগ্য এবং কমপ্যাক্ট বলে মনে করি:
#!/bin/bash
CMD=""
DIRS="/etc /home /www /data1 /data2 /var/log /var/spool/mail"
FILE="/backup/$(hostname)-$(date +'%m-%d-%y').tar.gz"
[ "$1" == "nas" ] && CMD="lftp -u user,password -e 'cd /dump/; mput /backup/*; quit' nas.mylan.com" || :
[ "$1" == "scp" ] && CMD="scp /backup/* scponly@dumpserver:incoming' username" || :
[ "$1" == "tape" ] && CMD='tar -cf /dev/st0 /backup/*' || :
[ "$CMD" == "" ] && exit 1 || :
# make a backup
tar -zcvf $FILE $DIRS
# Now depend upon circumstances run a backup command
$CMD
C2
যদি C1
ব্যর্থ হয়, যা স্পেসিফিকেশন প্রশ্নে পরিপূর্ণ লঙ্ঘন করে (বলতে গেলে, যে শুধুমাত্র এক কম্যান্ডের রান) হয়। x && y || z
এর সমতুল্য নয় if x; then y; else z; fi
।
C1
এমন কোনও কমান্ড হয় যা কখনও কখনও শূন্য-বহির্গমন কোডটি দেয় তবে আপনি উভয়ই কার্যকর করবেন C1
এবং C2
যখন তা ঘটে।
((...))
পরিবর্তে ব্যবহার করুন [...]
- ডাবল বন্ধনী বিশেষত গাণিতিক এক্সপ্রেশনগুলির জন্য।
(( RANDOM % N == 0 ))
পরিবর্তে অবশ্যই ব্যবহার করা উচিত(( RANDOM % N ))
। এটি কেবলমাত্র এন = 2 এর বিশেষ ক্ষেত্রে এটির অভিন্ন সম্ভাবনা রয়েছে।