我想做这样的事情:
if [ $1 % 4 == 0 ]; then
...
但这是行不通的。
我该怎么办呢?
Answers:
read n
if ! ((n % 4)); then
echo "$n divisible by 4."
fi
该(( ))
运算符计算表达式为C算法,并有一个布尔回报。
因此,(( 0 ))
是错误的,(( 1 ))
是真实的。[1]
该$(( ))
运营商还扩大Ç算术表达式,而不是返回真/假,则返回值来代替。因此,您可以通过以下方式测试输出$(( ))
:[2]
[[ $(( n % 4 )) == 0 ]]
但这等同于:if (function() == false)
。因此,更简单,更惯用的测试是:
! (( n % 4 ))
[1]:现代bash可以处理您机器intmax_t
大小的数字。
[2]:请注意,您可以$
放入(( ))
,因为它会取消引用其中的变量。
a=4
if [ $(( $a % 4 )) -eq 0 ]; then
echo "I'm here"
fi
单括号([..]
)在某些测试中不起作用,请尝试使用双括号([[...]]
),并将mod放入其中((..))
以%
正确评估操作员:
if [[ $(( $1 % 4 )) == 0 ]]; then
此处有更多详细信息:http :
//tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_02.html
如果你想要一些更便携-例如,一些作品中sh
,以及在bash
-使用
if [ $(echo "$1 % 4" | bc) -eq 0 ]; then
...
一个例子
#!/bin/bash
#@file: trymod4.bash
if [ $(echo "$1 % 4" | bc) -eq 0 ]; then
echo "$1 is evenly divisible by 4"
else
echo "$1 is NOT evenly divisible by 4"
fi
$ chmod +x trymod4.bash
$ ./trymod4.bash 224
224 is evenly divisible by 4
$ ./trymod4.bash 223
223 is NOT evenly divisible by 4
我将其放入,因为您使用了单个[ ... ]
条件,通常将其与sh
-compatible程序关联。
检查是否可以在中运行sh
。
#!/bin/sh
#@file: trymod4.sh
if [ $(echo "$1 % 4" | bc) -eq 0 ]; then
echo "$1 is evenly divisible by 4"
else
echo "$1 is NOT evenly divisible by 4"
fi
$ chmod +x trymod4.sh
$ ./trymod4.sh 144
144 is evenly divisible by 4
$ ./trymod4.sh 19
19 is NOT evenly divisible by 4
好的,它可以使用sh
。
! ((n % 4))
读为更好(( n % 4 == 0 ))
?