2015-04-01 87 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 

你必须保持序列...