linux - 使用环境变量(从 awk 命令获取其值)作为 while 中的条件

标签 linux shell awk while-loop environment-variables

我在环境变量中使用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/

相关文章:

作为 cron 作业失败的 Ruby 脚本

regex - sed提取两个字符串之间的文本

node.js - 无法在 Ubuntu 13.04 上运行 lessc。连 "command not found"都没有

linux - 套接字接收队列中有多少数据包或字节?

c - 如何在信号驱动的恶魔中暂停主循环?

linux - ubuntu 上的 docker 登录超时 `Error calling StartServiceByName for org.freedesktop.secrets: Timeout was reached`

shell - 在运行 shell 脚本的 .bash_profile 中创建别名

linux + 什么是合并文件的最佳方式

awk - 比较两个文件之间的第一列并将数据从一个文件附加到另一个文件

regex - 在电子邮件地址后添加换行符