我是编写Unix脚本的新手。我需要将文件1的内容设置为变量。需要将文件1中创建的变量粘贴/复制到特定行号的文件2中。
文件1(输入)内容:内容我使用grep / awk从另一个文本文件中提取所需的单词。我需要帮助将提取的内容转换为将在$ {CMD}的第二个文件中使用的单独变量。如果可能的话
userid:Name
pwd:Passwd
study_id:test
isid:testid
.......
.......
(注意:输入文件中的内容不是常量 - 我可以随时使用2到5个变量。 文件2(输出):文件2是用于生成Post安装文件以创建Product包的模板。我需要将新创建的变量合并/粘贴到$ {CMD}行。
CMD="$FIX_HOME/shell.ksh"
print "================= Start ${CMD}================"
${CMD} <Variables are set at this line>
Print "Exit form ${CMD} <$?>"
答案 0 :(得分:0)
由于您已经在创建文件1,因此您可以修改创建文件的格式,以便自己更轻松。以下列格式编写所需的变量:
userID="Name Surname"
pwd=Passwd
study_id=test
isid=testid
然后,您可以使用dot命令(Bourne Shell,Korn Shell,Bash)或源代码(C Shell,Bash再次)将这些内容读入您的脚本。请注意在包含空格的值周围使用引号。您可以使用单引号,但处理“Martin O'Rourke”更难。如果您不相信数据源,那么在安全之前需要做很多清理工作。
然后,您需要指定变量如何传递到该行的${CMD}
。另一个棘手的问题是知道设置了哪些变量,因为你可能只希望传递那些变量而不是所有可能的变量。论证中的空格肯定会使事情复杂化。
如果你有Bash 4.x(3.x是不够的),你可以使用一个关联数组。
CMD="$FIX_HOME/shell.ksh"
declare -A array
. file1 # Set variable values
for name in $(sed 's/=.*//' file1) # Get variable names
do
x=$(eval echo "\$$name")
array[$name]="-$name=$x"
done
echo "================= Start ${CMD} ================"
${CMD} "${array[@]}"
echo "================= Exit from ${CMD} <$?> ================="
给定数据文件:
name="Martin O'Rourke"
id=21131
testid=P/23/41
isis=N23-45112
当用CMD=al
运行时al
是一个回显其参数的程序,每行一个,其输出如图所示 - 注意参数不是按照它们的顺序进入了:
$ bash-4.1 test.script
================= Start al ================
-name=name
-isis=N23-45112
-id=21131
-testid=P/23/41
================= Exit from al <0> =================
$
如果你有一个早期版本的bash,你需要使用一个索引数组,它可能具有命令行中元素顺序的优势。缺点是您需要生成不同的索引。
但是,这可能会使事情过于复杂。
CMD="$FIX_HOME/shell.ksh"
echo "================= Start ${CMD} ================"
${CMD} $(<file1)
echo "================= Exit from ${CMD} <$?> ================="
或者,如果您想在选项名称前面加上破折号:
CMD="$FIX_HOME/shell.ksh"
echo "================= Start ${CMD} ================"
${CMD} $(sed 's/^/-/' file1)
echo "================= Exit from ${CMD} <$?> ================="
您可能还有其他方法可以解决此问题,但这取决于您真正希望将其视为${CMD}
的参数列表。