我有一个文件让我们说abc.ddl并且在该文件中有两个带有create语句的DDL例如: - “创建外部表abc(名称字符串)位置'/ abc / def /'”。
现在我想在ksh中编写一个脚本,它将参数化路径“location'/ abc / def'”,我想使用命令行参数传递该值。例如: - “ksh a.ksh location'/ abc / def'”。因此它将替换ddl语句的.ddl文件内的路径,而不是手动执行。
任何人都可以提供并告诉我有关脚本以及如何验证它的信息吗?
答案 0 :(得分:0)
在这种情况下,我通常最终会使用这样的东西:
#!/bin/bash
# Substitutes all variables in the input file by specified values.
# The variables in the tepmlate file have to be enclosed in angular brackets: <MY_VAR_NAME>
# Params: <templateFile> <outputFile> <var1> <value1> <var2> <value2> ... <varN> <valueN>
template="$1"
outputFile="$2"
shift; shift
cp "$template" "$outputFile"
while [ $# -ge 2 ]
do
varname="$1"
substitution="$2"
escapedLine=$(echo "$substitution" | sed 's,\\,\\\\,g' | sed 's,/,\\/,g' )
sed -i "s/<${varname}>/${escapedLine}/g" "$outputFile"
shift; shift
done
一个用标签括号中的变量创建一个模板文件,然后运行
> substitute template.ddl output.ddl FOO 12345 BAR 42
并最终使用output.ddl执行某些操作。
我希望它可以很容易地调整到ksh,无论如何它都是刚刚开始的。
编辑:我之前的版本仅适用于数字和简单标识符。为/ path / with / slashes添加了一些转义,但没有彻底测试它。