Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在while中使用环境变量(从awk命令获取其值)作为条件_Linux_Shell_Awk_While Loop_Environment Variables - Fatal编程技术网

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

Linux 在while中使用环境变量(从awk命令获取其值)作为条件,linux,shell,awk,while-loop,environment-variables,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 i=1 while(“$i”将while行

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

while(“$i”将while行更改为:

 while [ $i -le $NUMBER_OF_PORTS ]; do

然后尝试您也可以将
while
循环替换为
for
循环:

for (( i = 1; i <= ${NUMBER_OF_PORTS}; i += 1 ));
do
    echo "hello hello $i"
done

((i=1;i
端口数
为空。这给了我相同的错误:

i=1
NUMBER_OF_PORTS=""
while (("$i" <= "$NUMBER_OF_PORTS")); do
  echo "hello hello $i"
  i=$(( $i+1 ))
done
您确定文本文件中出现字符串“端口数:”吗?冒号后面有空格吗

关于while循环的几点注释:
(…)
是算术计算,因此不需要字符串。此外,裸变量名(不带
$
)也可以,因此您可以编写得更优雅一些:

while (( i <= NUMBER_OF_PORTS )); do
  echo "hello hello $i"
  (( i++ ))
done

您的
Config\u input.txt
中有什么?Config\u input文件包含与我的网络相关的参数。awk命令在该文件中只有一个匹配项,它返回给\u端口数的值是2NUMBER\u\u端口数不是一个环境变量;它只是一个变量。它只有在导出时才会成为一个环境变量。我知道,但它是与问题完全无关。变量和环境变量的结果相同。它没有帮助。它返回以下错误:“:integer expression expected”什么没有帮助?您能给出完整的错误消息吗?您能包括
端口数的值吗
(是否可能\u端口数不是有效数字?)?我将在一分钟内用代码和结果编辑我的问题谢谢你对awk命令的评论。变量不是空的。这是我检查的第一件事。请查看我编辑的问题的代码和输出。我错误地没有包括awk命令,但相信我,它就在那里。@amigal,这显示了什么:
printf“%s”“$端口数"| od-c
--我想那里有一个回车。你需要在你的配置文件上使用
dos2unix
吗?@amigal,看看我的更新。文本是在windows上创建并传输到linux的吗?谢谢你的帮助。它可以工作,是的,文件是在windows上创建的。你能解释一下为什么echo$NUMBER_端口给了我t吗他回答对了吗?@amigal,因为“\r”字符是回车符,它只是以空格形式打印出来的:您无法“看到”它。
NUMBER_OF_PORTS=$(awk '/^number of ports:/ {print $4}' Config_input.txt)
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)