使用bash从Txt文件设置用户名和密码

时间:2018-05-10 16:51:03

标签: bash shell username

我有一个env.txt文件,格式如下:

lDRIVER={ODBC Driver 13 for SQL Server};
PORT=1433;
SERVER=serveename;
DATABASE=db;
UID=username;
PWD=password!

我有一个git bash脚本(.sh),需要该文件中的UID和PWD。我正考虑通过最后/第二个最后一个行号来获取它。我该怎么做/有更好的方法(比如寻找UID和PWD并以这种方式分配git bash变量)

1 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点。您可以使用我个人会使用的awk,因为它有点像x-acto刀用于此类事情:

uid=$(awk -F"[=;]" '/UID/{print $2}' env.txt)
pwd=$(awk -F"[=;]" '/PWD/{print $2}' env.txt)

grepsedsed很好,因为它可以让你对要从线上剪切的信息非常具体,但是它的正则表达式有它的学习曲线:

uid=$(grep "UID" env.txt | sed -r 's/^.*=(.*)(;|$)/\1/g' )
pwd=$(grep "PWD" env.txt | sed -r 's/^.*=(.*)(;|$)/\1/g' )

正如@JamesK在评论中指出的那样,您可以使用sed并让它进行搜索而不是grep。这非常好,我肯定会选择此而不是grep | sed

uid=$(sed -nr '/UID/s/^.*=(.*)(;|$)/\1/gp' )
pwd=$(sed -nr '/PWD/s/^.*=(.*)(;|$)/\1/gp' )

grepcut。 Bleh ...我们都可以做得更好,但有时我们只想grepcut而不必考虑它:

uid=$(grep "UID" env.txt | cut -d"=" -f2 | cut -d";" -f1)
pwd=$(grep "PWD" env.txt | cut -d"=" -f2 | cut -d";" -f1)

我绝对不会按行号去。看起来和odbc.ini文件以及每个odbc条目中列出参数的顺序无关。