her zaman sahte veren bölme ile kabuk betiğinde karşılaştırma

Kabuk bash komut dosyasında çok basit bir karşılaştırma yazıyorum ama bunu asla doğru anlayamıyorum:

sayısı = 0

if [ expr $count/4 = 0 ];
then
  echo "yes";
else
  echo "no";
fi

her zaman hayır vererek?

1
Burada bir şey yazıyorum: bash script"> stackoverflow.com/questions/ içinde katma yazar olidev, kaynak
Sadece meraktan, burada ne yapmaya çalışıyorsun? $ Count/4 == 0 değerinin yalnızca 4 sayımının 4'ten az olup olmadığını söyleyeceğini kontrol etme. Neden [$ count -lt 4] ise?
katma yazar Chriszuma, kaynak

3 cevap

Expr programına çağırmak istiyorsanız, aslında bunu çağırmanız gerekir:

if [ $(expr $count/4) = 0 ]; then echo "yes"; else echo "no"; fi

Ancak, bash bunu kendi bünyesinde yapabilir:

if (( $count/4 == 0 )); then echo "yes"; else echo "no"; fi
5
katma
Aslında, (()) ile $ 'ye bile ihtiyacınız yoktur. Bu yapardı: if ((count/4 == 0)); sonra "evet" yankısı; başka yankı "hayır"; fi
katma yazar Lee Netherton, kaynak
Vay, bash bunu yapabilirdi bilmiyordum. EDIT: Biraz zaman aldı, ama bir rehber buldum. Bana yeni bir numara öğrettiğin için teşekkür ederim. tldp.org/LDP/abs/html/dblparens.html
katma yazar Chriszuma, kaynak

komut değiştirmeyi kullanmanız gerekir ( $() eval ifadesini değerlendirmek için veya backticks). Ayrıca, tamsayı karşılaştırması için -eq kullanın. :

if [ $(expr $count/4) -eq 0 ];
then
  echo "yes";
else
  echo "no";
fi
3
katma
Evet, == dizge karşılaştırması genellikle çalışır, ancak if ifadesi olarak yazılırsa [$ (expr $ say/4) == 00] olur istenmeyen bir sonuç vermek. Amacı için amaçlanan karşılaştırma operatörünü kullanmak en iyisidir.
katma yazar Lee Netherton, kaynak
+1, ancak = olarak bırakabilirsiniz.
katma yazar Michael Krelin - hacker, kaynak
Tamsayılar için -eq veya == komutlarını kullanabilirsiniz, çünkü dize eşdeğeri ve tamsayı eşdeğeri aynıdır.
katma yazar Chriszuma, kaynak

Buna ne dersin

[[ count/4 -eq 0 ]] && echo 'yes' || echo 'no'
0
katma