2015-04-01 140 views
1

我有一個shell腳本(main.sh),其中前幾行通過用戶輸入讀取一些數據。如何通過shell腳本輸入提示輸入

echo "Enter the model !!" 
    read model 
    echo "Enter the Weight !!" 
    read wgt 
    echo "enter the data file !!" 
    read datafile 
    echo "Enter the two column names !!" 
    read coll1 coll2 

這些變量$ model,$ wgt,$ datafile,$ coll1,$ coll2正在其他程序中使用。當我通過./main.sh運行它並分別輸入MODEL,WGT,DATA,COL1 COL2時,一切正常。但我想通過一個文件給這些輸入。所以我創建了另一個腳本文件,其中包含

echo "COL1 COL2" | echo "DATA" | echo "WGT" | echo "MODEL" | ./main.sh 

它只接受第一個輸入即MODEL。有沒有辦法正確地做到這一點?

回答

2

不要管回聲回聲。回聲不讀標準輸入,所以你失去了一切,但最後一個。另外,如果這樣寫就可能會倒退。

你想要更多的東西是這樣的:

{ 
    echo "MODEL" 
    echo "WGT" 
    echo "DATA" 
    echo "COL1 COL2" 
} | ./main.sh 

其中,當然,也可能僅僅是:

printf 'MODEL 
WGT 
DATA 
COL1 COL2 
' | ./main.sh 
+1

或' printf「%s \ n」MODEL WGT DATA'COL1 COL2'在一行代碼上。 – 2015-04-01 14:35:35

+0

@JonathanLeffler確實。我幾乎寫了'printf'X \ nX \ nX \ nX \ n'',但認爲這是過度的,稍微難以閱讀。但是該版本更易於閱讀。 – 2015-04-01 14:37:32

+0

這是行得通的。但是如果我想給一些數字(比如說我的WGT實際上是1.5),那我該怎麼辦? – 2015-04-01 15:20:30

0

更改main.sh才能收到這些不同的參數作爲參數,而不是標準輸入然後像這樣調用它

./main.sh $COL1 $COL2 $DATA .... 
+1

建議使用參數而不是提示輸入很好,但不回答問題。我也建議回答這個問題。 – 2015-04-01 14:36:54

+0

夠公平的。我的感覺是,他使用的方法不是一個常見的外殼成語,最好避免。 – 2015-04-01 16:34:27

0

You ca ñ像這樣做:

main腳本:

coll1=$1 
coll2=$2 
datafile=$3 
wgt=$4 
model=$5 

然後運行你喜歡這個主腳本:

./main col1 col2 data wgt model 

你必須保持序列...