[英]array in bash script
我有以下腳本:
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
在我的數組中,沒有元素> 100,所有輸出必須為“ => y”。 當arr1[i]=1
,就可以了。 輸出:“ => y”但是當arr1[i]=5
或任何不arr1[i]=5
1時,它有問題,輸出“ => x”
我認為, if [[ ${arr1[i]} > 100 ]]
我的問題就在這里if [[ ${arr1[i]} > 100 ]]
但我不知道如何進行編輯。 :(
幫我糾正一下。 請 。 非常感謝
您想要:
if (( ${arr1[$i]} > 100 )); then
或對於不支持(())
POSIX shell,可以使用:
if [[ ${arr1[$i]} -gt 100 ]]; then
您所做的事情有兩個問題:
您需要說if [[ ${arr1[$i]} > 100 ]]; then
if [[ ${arr1[$i]} > 100 ]]; then
(請注意,它應該是$i
而不是i
)。
if [[ ${arr1[$i]} > 100 ]];
是錯誤的 。 這執行了詞典的比較,並沒有達到預期的目的。 要么說:
if [[ ${arr1[$i]} -gt 100 ]]; then
要么
if (( ${arr1[$i]} > 100 )); then
您應該使用-gt
,大於
由於除了將數組下標之外,您不使用i
進行其他操作,因此直接迭代數組的值會更簡單:
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
這包括另一個用於正確比較兩個整數值的選項((...))
命令,該命令提供了一個上下文,其中>
可以用於數字比較而不是字符串比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.