2011-02-25 42 views
0

我是編寫Unix腳本的新手。我需要將文件1的內容設置爲變量。文件1中創建的變量需要以特定的行號粘貼/複製到文件2。以多個變量設置文件的內容

文件1(輸入)內容:我已經使用grep/awk從另一個文本文件中提取所需的單詞。我需要將提取的內容轉換爲將在$ {CMD}中的第二個文件中使用的單獨變量的幫助。如果可能的話

userid:Name 
pwd:Passwd 
study_id:test 
isid:testid 
....... 
....... 

(注:輸入文件的內容不是一成不變的,我可以在任何時候都有兩到5個變量 文件2(輸出):文件2是用於生成後的模板安裝文件來創建一個產品包。我需要合併/粘貼新創建的變量爲$ {CMD}線。

CMD="$FIX_HOME/shell.ksh" 

print "================= Start ${CMD}================" 

${CMD} <Variables are set at this line> 

Print "Exit form ${CMD} <$?>" 

回答

0

既然您已經創建了文件1,你可以修改你創建的格式它使自己變得更容易以下列格式編寫所需的變量:

userID="Name Surname" 
pwd=Passwd 
study_id=test 
isid=testid 

然後,您可以使用點命令(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的早期版本,你需要使用一個索引數組,這可能^ h在命令行上的元素順序的優勢將是確定的。缺點是你需要生成不同的索引。

但是,這可能是過度複雜的事情。

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}的參數列表。

+0

非常感謝喬納森 - 我已經做了你在第1步中提出的建議。我使用Korn shell不知道我使用的版本是否會處理關聯數組或索引數組。我正在考慮使用陣列,但我缺乏自信。我很欣賞你提供的樣品。 – Ayla 2011-02-26 23:13:02

+0

我正在使用ksh shell:我需要生成不同的索引,因爲元素的順序在CMD行中很重要。我創建了以下內容 – Ayla 2011-03-04 01:44:36

+0

我正在使用ksh shell:我需要生成不同的索引,因爲元素的順序在CMD行中很重要。我創建了以下$>對於$(cat myfile)中的wordlist,做 > wordlist [$ I] = $ word > I = $((I +1)) >完成 問題:我是否需要添加設置一個命令爲所有變量放置在同一個? – Ayla 2011-03-04 02:05:49