जवाबों:
if (( RANDOM % 2 )); then C1; else C2; fi
== 0
में निहित है ((
, इसलिए मुझे यकीन नहीं है कि आपका क्या मतलब है।
== 0
मेरी पिछली टिप्पणी में एक टाइपो है, मेरा मतलब > 0
निहित है। चूँकि % 100
लगभग हमेशा एक मान ऊपर होगा 0
, इसलिए यह अपेक्षित है।
RANDOM % $N
बिना किसी व्यावहारिक उपयोग के क्या होगा == 0
? IMO, उदाहरण के लिए N = 100 के साथ, यह बहुत अधिक व्यावहारिक है कि 100 ऑड्स == 0
में 99 (100 डिलीवर किए गए) की तुलना में 99 में 1 (1 के साथ दिया गया == 0
) चाहिए।
आपके विशेष मामले में:
C$((RANDOM%2+1))
काम करेगा :) और हे, यह सबसे छोटा जवाब है!
$((1+1))
-> 2
, उदा। $(( ))
हिसाब लगाता है कि अंदर क्या है।
आप बैश में कुछ ऐसा कर सकते हैं:
$ (( RANDOM%2 == 0 )) && C1 || C2
यह एक यादृच्छिक संख्या उत्पन्न करेगा, या तो 0 या 1. यदि यह 0 है, तो C1 चलता है, अन्यथा यदि यह नहीं है तो C2 चलता है।
$ (( RANDOM%2 == 0 )) && echo 0 || echo 1
1
$ (( RANDOM%2 == 0 )) && echo 0 || echo 1
0
नोट: पहला वर्ण, $
प्रॉम्प्ट है।
यदि आप C1 के असफल होने से चिंतित हैं ताकि C2 चला सके तो आप ऊपर दिए गए पुनर्गठन को इस तरह से कर सकते हैं:
(( 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 ))
। यह केवल N = 2 के विशेष मामले में है कि इनमें समान संभावना है।