我有一个导出日志文件的脚本,通常我会在1-3个单独的文件之间取决于特定日期的日志大小。导出后,我运行一个报告生成器来吐出这些日志的html文档。我的问题是如何调用生成报告的命令,具体取决于文件的数量,我知道我可以使用if语句并执行:
./generateReport -i file1 -o output.html
./generateReport -i file1 file2 -o output.html
./generateReport -i file1 file2 file3 -o output.html
有没有办法循环文件并将它们作为输入包含?
答案 0 :(得分:3)
是否需要使用标志?
./generateReport file1 file2 file3 > output.html
答案 1 :(得分:2)
以下内容将收集一个inputFiles数组,以及一个带有输出文件名的单个变量:
inputFiles=( )
outputFile=
while (( $# )); do
if [[ $1 = -o ]]; then
outputFile=$2; shift
elif [[ $1 = -i ]]; then
inputFiles+=( "$2" ); shift
else
inputFiles+=( "$1" )
fi
shift
done
......那么,你可以这样做:
# redirect stdout to the output file, if one was given
[[ $outputFile ]] && exec >"$outputFile"
# loop over the input files and process each one
for inputFile in "${inputFiles[@]}"; do
process "$inputFile"
done
答案 2 :(得分:1)
尝试文件名扩展:
./generateReport -i file? -o output.html
或对过去24小时内创建的所有日志文件使用find
:
./generateReport -i `find . -name "file*" -mtime -1` -o output.html