事情是这样的:

有一个配置文件,里面有数据库的账号密码,需要读出来,然后对数据库进行初始化。

可是搞了半天,用户名和密码用awk是读出来了,打印出来看着是正常的,但是初始化数据库时总是出错。

最后发现是文件的问题,用010打开,在windows下的文件换行符为 \r,awk取出来时,账号名和密码都包含这个特殊的字符,导致初始化未能成功。

实例

配置文件内容如下:

1
2
3
4
...
username=alfons
password=12345678
...

获取用户名和密码的脚本如下:

1
2
username=$(awk -F= '$1=="username" { print $2 } ' mysql.conf)
password=$(awk -F= '$1=="password" { print $2 } ' mysql.conf)

获取的内容为:

1
2
username="alfons\r"
password="12345678\r"

因为后面的 \r 导致了无法初始化数据库的问题!处理方式是使用 sed命令 进行替换。

1
2
username=$(awk -F= '$1=="username" { print $2 } ' mysql.conf | sed 's/\r//g' | sed 's/\n//g')
password=$(awk -F= '$1=="password" { print $2 } ' mysql.conf | sed 's/\r//g' | sed 's/\n//g')

保险起见,将 \r\n 一同换了。