我正在处理一个sh脚本,其中我在一个WHILE循环中,每次迭代变量都会增加,我想每五次迭代保存一个文件。
我通常做的事情(比如说C)会做if ( n % 5 == 0)
测试,但我不知道这是否可行......?如果不是,是否有人有任何想法可以完成工作?
干杯!
答案 0 :(得分:37)
如果你的sh真的是sh而不仅仅是bash以sh运行那么这将很好用
if [ `expr $n % 5` -eq 0 ]
then
# do something
fi
如果你的sh真的是bash,那就把你的考试放在(( ))
这样
if (( $n % 5 == 0 ))
then
# do something
fi
答案 1 :(得分:16)
在shell中进行数学运算时应该使用bc
if [ `echo "3 % 2" | bc` -eq 0 ]
答案 2 :(得分:4)
反引号现在被视为已弃用(many further notes),因此建议您切换到 $(( ... ))
或 $( ... )
构造。
expr
(man page)和bc
(man page)都是外部命令,因此,在比我的或以上的。此外,已经有一种方法可以轻松地避免(两者)。另外,例如,默认情况下,它们可能并非在所有系统上都可用。
(在某些情况下可能并不完美,我只是测试了基本情况。)
测试数字(作为示例)的可移植性和POSIX正确代码(无Bashisms(Greg's Wiki on how to re-write Bash snippets to POSIX;(Wikipedia overview on POSIX))的最简单方法如下:< / p>
#!/bin/sh
n=10
if [ $(( n % 2 )) -eq 0 ]; then
printf '%s\n' "Number $n is Even"
else
printf '%s\n' "Number $n is Odd"
fi
您当然可以在其中测试任何模数,而不仅仅是数字是偶数还是奇数。
答案 3 :(得分:3)
if (($n%5==0))
then
# do something
fi