在Shell脚本中传递N个参数

时间:2019-02-08 15:30:38

标签: linux shell

我有一个shell脚本,并且在该脚本中正在使用一个sql。

例如:

Select * from Table where city IN ( ‘Pais’, ‘london’, ‘Sydney’)

我的疑问是,如果我想将N个参数传递给我的shell脚本,以便所有参数都可以在IN子句中进行设置,那么该怎么做。

请问我该如何实现?使用有限数量的参数,我已经完成了,但这对我来说是个新场景。

已更新:

实际脚本

#! /bin/bash

echo ID, CITY, SALARY, ACCT_NUM, DATE, AMOUNT > /home/joy/Apple/SMMRY_RESULT.csv
m_db unload /home/joy/IPC/target/send/sendFile.dbc -column_delimeter ',' -select "Select * from Table where CITY IN ( ‘Paris’, ‘london’, ‘Sydney’);" >> /home/joy/Output/Output_RESULT.csv

var=$?   --Line 1

echo ID, CITY, SALARY, ACCT_NUM, DATE, AMOUNT > /home/joy/Apple/SMMRY_RESULT.csv
m_db unload /home/joy/IPC/target/send/sendFile.dbc -column_delimeter ',' -select "Select * from Table where DATE IN ( ‘2019-02-01’, '2019-02-02,' '2019-02-03');" >> /home/joy/Output/Output_RESULT.csv

var1=$?  -- Line 2

if [["$var"==0 $$ "$var1==="]];
echo "" | mailx -a "/home/joy/Output/Output_RESULT.csv" -a "
/home/joy/Output/Output_RESULT.csv" -s "IPC DATA Output" 'kellyIPC@outlook.com' >
/dev/null
then
echo "Script Success and Mail Sent"
exit 0
else 
echo "Script Failed"
exit 1
fi

问题:

1)如何在运行时给一个参数(一次汇总所有日期或城市)以编写脚本,以便它可以通过,因为一个值包括所有日期或城市,其中所有值都用单引号引起来并用逗号分隔? / p>

For example sh myScript.sh "AllDatesAsFirstParameter" "AllCitiesAsSecondParameter"

2)如何限制具有特定模式的Date参数,否则显示错误?

我在下面尝试过的那个(仅作为示例)

#! /bin/bash

echo "My Value: $1"
echo "My Second Value: $2"

sh myScript.sh One Two

谢谢

2 个答案:

答案 0 :(得分:1)

我将问题解释为您要扩展Paris London Sydney形式的参数列表到逗号分隔的带引号的字符串'Paris', 'London', 'Sydney'中。您可以这样做:

unset sep
query='Select * from Table where city IN ('
for x; do query="$query$sep'$x'"; sep=', '; done
query="$query)"
echo "$query"

基本上,这只是迭代所有位置参数,并将每个参数附加到查询的末尾,并用单引号引起来。

答案 1 :(得分:0)

您可以通过使用$@对其进行引用来一次访问所有传递的命令行参数的列表。这适用于任意数量的参数