Yanıtlar:
if (( RANDOM % 2 )); then C1; else C2; fi
== 0
, ((
karşılaştırma yapılmayan bloklarda örtülü olduğundan, ne demek istediğinizi tam olarak anlamadım.
== 0
önceki yorumumda bir yazım hatası, demek istediğim > 0
dolaylı. Yana % 100
hemen hemen her zaman üstünde bir değer dönecektir 0
bekleniyor.
RANDOM % $N
olmadan == 0
? IMO, örneğin N = 100 ile, 100'de bir (100'lük bir oran) 1 (100'ünde == 0
) (1'şer adet ) verilen orandan istemek çok daha pratiktir == 0
.
Özel durumunuzda:
C$((RANDOM%2+1))
çalışacak :) Ve hey, bu en kısa cevap!
$((1+1))
-> 2
, örn. $(( ))
İçinde ne olduğunu hesaplar.
Bash'de böyle bir şey yapabilirsiniz:
$ (( RANDOM%2 == 0 )) && C1 || C2
Bu, 0 veya 1 olan rasgele bir sayı oluşturur. Eğer 0 ise, C1 çalışır, yoksa C2 çalışır.
$ (( RANDOM%2 == 0 )) && echo 0 || echo 1
1
$ (( RANDOM%2 == 0 )) && echo 0 || echo 1
0
Not: İlk karakter, $
komut istemidir.
C1'in başarısız olması ve böylece C2'nin çalışabilmesi için endişeleniyorsanız, yukarıdaki gibi yeniden yapılandırabilirsiniz:
(( RANDOM%2 == 0 )) && CMD=C1 || CMD=C2
$CMD
Bu cevap biraz eleştirildi ama deliliğimin bir yöntemi var. Her ne kadar bu desen bir if'den daha belirsiz görünse de, aşağıdaki gibi bir şey yaparken daha okunaklı ve kompakt buluyorum:
#!/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
eğer C1
söz konusu düzenlendiği şartname ihlal eden başarısız (yani sadece o, bir komutların run). x && y || z
eşdeğer değildir if x; then y; else z; fi
.
C1
bazen sıfırdan farklı çıkış kodu döndürür bir komuttur, her iki yürütme sona erecek C1
ve C2
bu olduğunda.
((...))
yerine [...]
çift parantez kullanmak yerine , özellikle aritmetik ifadeler kullanılır.
(( RANDOM % N == 0 ))
ziyade(( RANDOM % N ))
. Bunların yalnızca N = 2 olması durumunda, olasılıkları aynı olabilir.