我在脚本中使用命令bash
从源文本文件获取数据,然后将变量的值添加到其中并在 if/else 条件中使用它。
源数据文件(db_count.ini
)(注:双引号内有一个空格):
db_ctdy_sr=" 7"
脚本:
source db_count.ini
# Removing the whitespace on the stored data
n_db_sr=${db_ctdy_sr// /}
# Sum
c=0
b=7
echo "Value of db:"$n_db_sr
sm=$((n_db_sr + c))
echo "The value of db:"
echo "$sm"
echo $sm
if [ "$sm" = "$b" ]
then
echo "Success."
else
echo "Not."
fi
echo "Bye!"
但是当我运行脚本时它总是这样
The value of db:7
") Syntax error Invalid arithmetic operator (error token is "
The value of:
Not.
Bye!
有小费吗?有什么建议么?
谢谢!
答案1
你的脚本在这里运行。使其产生与您报告的相同错误的唯一方法是使变量db_ctdy_sr
包含new line
:
添加新行:
source db_count.ini
db_ctdy_sr=$' 7\r'
然后测试脚本:
$ ./so
Value of db:7
")syntax error: invalid arithmetic operator (error token is "
The value of db:
//test if working
//test if working
Not.
Bye!
如果文件db_count.ini
包含 DOS 回车符,则可能会发生这种情况。
执行:
$ sed -n l db_count.ini
db_ctdy_sr= 7\r$
(或类似)以查看\r
文件中的 。
通过编辑文件并删除失败的字符或更改此行来删除回车符:
n_db_sr=${db_ctdy_sr// /}
到:
n_db_sr=${db_ctdy_sr//[ $'\r'}]}
或者,更一般地删除所有控制字符:
n_db_sr=${db_ctdy_sr//[ $'\001'-$'\037']}
为了确保整理顺序不会将 ascii 值的预期顺序从 1(八进制 001)修改为 31(八进制 037),请设置 bash 变量:
shopt -s globasciiranges
自 bash 版本 4.3 起可用。