0

我有以下 bash 脚本:

#!/bin/bash

filename='config.txt'

while filename = read -r line do
        for file in $(find /home/user/ftpuser -maxdepth 1 -name "*.[ew]ar" -type f); do
        /apps/oracle/jrockit/4.1.0-1.6.0_37-R28.2.5-x86_64/bin/java -jar ../windup-cli-0.6.8/windup-cli.jar -javaPkgs com.lib - input ../ftpuser/ -output ../reports/ "${file}"
            cp "${file}" /home/user/ftpuser/scanned/
        done < "$filename"
        sleep 60
done

该脚本需要在一个目录中找到两种类型的文件。一个 .ear 和一个 .war 文件。完成后,它会执行一个命令,该命令会报告我们之前在名为 /reports 的目录中找到的文件。下一步是将我们在第一步中找到的所有文件复制到名为已扫描的目录中。我的问题集中在我为生成报告而执行的命令上。在这个命令中有一个地方是-javaPkgs com.lib。我需要从配置文件中读取这个值。脚本需要从配置文件中读取值并将它们分配给脚本,因此每次我们更改配置文件中的值时,我们都可以使用不同的值执行脚本。我的问题是我该怎么做?我在上面尝试过做某事,但它不起作用。

您还可以在下面看到配置文件。

配置文件

targetHostName=10.125.162.132
packages=com.ibm,com.jboss   
path=/home/user/ftpuser/reports
username=root
password=root
4

2 回答 2

0

这就是我看到你如何使用它的方式:

#!/bin/bash

config_file='./config.txt'  ## If you want to pass your configuration as an argument, use config_file=$1

. "$config_file"

while read -r file do
    /apps/oracle/jrockit/4.1.0-1.6.0_37-R28.2.5-x86_64/bin/java -jar ../windup-cli-0.6.8/windup-cli.jar -javaPkgs com.lib - input ../ftpuser/ -output ../reports/ "${file}"
    cp "${file}" /home/user/ftpuser/scanned/
    sleep 60
done < <(exec find /home/user/ftpuser -maxdepth 1 -name '*.[ew]ar' -type f)

该脚本将读取config_file.txt为另一个为变量分配值的源文件。有了它,您已经可以将这些变量用作$targetHostName$packages$path和。$username$password

于 2013-09-10T12:49:13.493 回答
0

以下将为您提供您想要报告的软件包列表:

grep "^packages" config.txt | cut -d= -f2 | tr ',' ' '

基于此,您可以循环获取列表中的值:

filename="config.txt"
for i in $(grep "^packages" $filename | cut -d= -f2 | tr ',' ' '); do
  for file in $(find /home/user/ftpuser -maxdepth 1 -name "*.[ew]ar" -type f); do
    echo /apps/oracle/jrockit/4.1.0-1.6.0_37-R28.2.5-x86_64/bin/java -jar ../windup-cli-0.6.8/windup-cli.jar -javaPkgs ${i} - input ../ftpuser/ -output ../reports/ "${file}"
    cp "${file}" /home/user/ftpuser/scanned/
  done
done
于 2013-09-10T10:23:44.563 回答