我在环境变量中使用awk:
NUMBER_OF_PORTS=`awk /^"number of ports:"/'{print $4}' Config_input.txt`
返回值2
。
我尝试在 while 循环中使用此变量:
i=1
while (("$i" <= "$NUMBER_OF_PORTS")); do
echo "hello hello $i"
i=$(( $i+1 ))
done
我收到以下错误:
-bash: ((: 1 <= : syntax error: operand expected (error token is "<= ")
如何使用变量作为整数来解决这个问题?
编辑
即使我尝试执行简单的操作,例如:
let cc=$NUMBER_OF_PORTS+0
它不起作用。这与变量保存 awk 命令有关。如果我设置 cc=5 并尝试使用 $cc 实现 while ,它工作得很好。
示例代码
echo $NUMBER_OF_PORTS
#i=1
#echo $i
for (( i = 1; i < ${NUMBER_OF_PORTS}; i += 1 ));
do
echo "hello hello $i"
done
输出是:
$ run_auto_config
2
1
: integer expression expected
最佳答案
NUMBER_OF_PORTS
为空。这给了我同样的错误:
i=1
NUMBER_OF_PORTS=""
while (("$i" <= "$NUMBER_OF_PORTS")); do
echo "hello hello $i"
i=$(( $i+1 ))
done
你的 awk 命令看起来很尴尬。试试这个:
NUMBER_OF_PORTS=$(awk '/^number of ports:/ {print $4}' Config_input.txt)
您确定字符串“端口号:”出现在您的文本文件中吗?冒号后面有空格吗?
关于 while 循环的一些注释:((...))
是算术评估,因此您不需要其中的字符串。另外,裸变量名称(不带 $
)也可以,因此您可以写得更优雅一点:
while (( i <= NUMBER_OF_PORTS )); do
echo "hello hello $i"
(( i++ ))
done
<小时/>
更新:根据您的评论,尝试以下操作:
NUMBER_OF_PORTS=$(awk -v RS='\r\n' '/^number of ports:/ {print $4}' Config_input.txt)
关于linux - 使用环境变量(从 awk 命令获取其值)作为 while 中的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9997147/