我有一个下面的脚本:
for (( i=0; i <= ( ${#arr1[@]} - 1); i++ )); do
if [[ ${arr1[i]} > 100 ]]; then
echo "=> x"
iptables -A INPUT -s 192.168.162.1 -j DROP
exit
else
echo "=> y"
fi
done
在我的数组中,没有元素&gt; 100,所有输出必须是“=&gt; y”。
当arr1[i]=1
时,没关系。输出:“=&gt; y”
但是当arr1[i]=5
或任何内容不是1时,它有问题,输出“=&gt; x”
我认为我的问题在if [[ ${arr1[i]} > 100 ]]
,但我不知道如何编辑它。 :(
帮我纠正一下。请 。非常感谢
答案 0 :(得分:4)
你想要:
if (( ${arr1[$i]} > 100 )); then
或对于不支持(())
的POSIX shell,您可以使用:
if [[ ${arr1[$i]} -gt 100 ]]; then
答案 1 :(得分:2)
你做了什么有两个问题:
您需要说if [[ ${arr1[$i]} > 100 ]]; then
(请注意,它应该是$i
而不是i
)。
说if [[ ${arr1[$i]} > 100 ]];
不正确。这会执行 lexicopgraphic 比较,并不完全符合预期。要么说:
if [[ ${arr1[$i]} -gt 100 ]]; then
或
if (( ${arr1[$i]} > 100 )); then
答案 2 :(得分:1)
你应该使用-gt
,大于
答案 3 :(得分:0)
由于除了下标数组之外你不使用i
,所以直接迭代数组的 values 会更简单:
for value in "${arr1[@]}"; do
if (( value > 100 )); then
echo "=> x"
iptables -A INPUT -s 192.168.162.1 -j DROP
exit
else
echo "=> y"
fi
done
这包括正确比较两个整数值的另一个选项,((...))
命令,它提供了一个上下文,其中>
可用于数字比较而不是字符串比较。