如何为文件传递命令行参数

时间:2015-04-18 16:45:53

标签: command-line-arguments ksh

我有一个文件让我们说abc.ddl并且在该文件中有两个带有create语句的DDL例如: - “创建外部表abc(名称字符串)位置'/ abc / def /'”。

现在我想在ksh中编写一个脚本,它将参数化路径“location'/ abc / def'”,我想使用命令行参数传递该值。例如: - “ksh a.ksh location'/ abc / def'”。因此它将替换ddl语句的.ddl文件内的路径,而不是手动执行。

任何人都可以提供并告诉我有关脚本以及如何验证它的信息吗?

1 个答案:

答案 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添加了一些转义,但没有彻底测试它。