我有一个端口号文件map.ini:
50051=1
50052=1
50053=1
50054=1
50055=1
50056=1
和脚本sample.sh,其内容为:
#!/bin/bash
file=map.ini
while IFS='=' read -r port varPortStatus
do
if [[ $varPortStatus -eq "1" ]]; then
printf "Available port is %s" $port
printf "Status is %d." $varPortStatus.
return 0
fi
done < "$file"
echo "No port is available"
我需要的预期输出是:
Available port is 50051
Status is 1
我可以使用sed
或cut
命令操作来完成此操作。但我需要在这里了解IFS。我输出为:
")syntax error: invalid arithmetic operator (error token is "
")syntax error: invalid arithmetic operator (error token is "
")syntax error: invalid arithmetic operator (error token is "
")syntax error: invalid arithmetic operator (error token is "
")syntax error: invalid arithmetic operator (error token is "
")syntax error: invalid arithmetic operator (error token is "
No port is available
请告诉我哪里做错了?
答案 0 :(得分:1)
似乎可能是在map.ini或sample.sh中结束\ r的dos行,请尝试使用dos2unix map.ini或cat -ve map.ini进行验证。
如果输入文件无法修改\r
字符可以在bash中删除
while IFS='=' read -r port varPortStatus
do
varPortStatus=${varPortStatus%$'\r'}
if [[ $varPortStatus -eq "1" ]]; then
printf "Available port is %s\n" $port
printf "Status is %d.\n" $varPortStatus
fi
done < "$file"
另请注意,修补了\n
添加到格式,.
在$varPortStatus
之后删除,return
仅在函数或源脚本中有效。