【发布时间】:2018-06-06 13:10:57
【问题描述】:
我有一个端口号文件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
请告诉我哪里做错了?
【问题讨论】:
-
从输出看来,map.ini 或sample.sh 中可能有一个以
\r结尾的dos 行,尝试dos2unix map.ini或cat -ve map.ini进行验证 -
$varPortStatus后面的点也必须去掉,否则对%d无效,并且 printf 中缺少\n -
当我执行
cat -ve map.ini时,我会在每行末尾得到^M$。 -
^M是插入符号表示 chr 13 ascii,因为 M 是字母表中的第 13 个字母,与\r回车符的转义符号相同