shell 脚本读取源文件并使用脚本中的密钥

shell 脚本读取源文件并使用脚本中的密钥
#!/bin/bash
source /data/output/QAScripts/conf.ini
var=$($1path)
echo $var

conf.ini配置文件中含有LSTpath=/data/bb/loader

我得到以下错误。我哪里做错了。

./file LST
 line 8: LSTpath: command not found

答案1

您可以使用以下方法解决eval

eval - construct command by concatenating arguments

修改脚本如下:

#!/bin/bash
source /data/output/QAScripts/conf.ini
eval var='$'"$1"path
echo $var

然后像这样运行:

$ ./foo LST
/data/bb/loader

在哪里,

$ cat /data/output/QAScripts/conf.ini
LSTpath=/data/bb/loader

答案2

使用awk,我不喜欢eval ;)

var=$($1path)执行脚本的第一个参数 ( $1) 与path作为命令连接。因此出现错误。

您的新脚本

#!/bin/bash
var=$(awk -F= '/^'"$1"'path/ {print $2}' /data/output/QAScripts/conf.ini)
echo "$var"

你的/data/output/QAScripts/conf.ini

LSTpath=/data/bb/loader

例子

$ ./foo LST
/data/bb/loader

答案3

使用grep,评估:(

假设source用于加载变量以从 conf.ini 获取路径

脚本

/bin/bash #!/bin/bash
var=`grep $1 /data/output/QAScripts/conf.ini | grep -oP '[^'$1'path\=](.*)'`
回显 $var

配置文件

LSTpath=/数据/bb/加载器
添加#following 来演示
LSApath=/数据/bb/A
LSBpath=/数据/bb/B
LSCpath=/数据/bb/C

输出:根据arg var显示

root@controller:~# ./script.sh LST
/数据/bb/加载程序
root@controller:~# ./script.sh LSA
/数据/bb/A
root@controller:~# ./script.sh LSB
/数据/bb/B
root@controller:~# ./script.sh LSC
/数据/bb/C
根@控制器:~#

谢谢 :)

相关内容