繁体   English   中英

在Shell脚本中传递N个参数

[英]Pass N arguments in shell script

我有一个外壳程序脚本,并且在该脚本中正在使用一个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)如何在运行时给一个参数(一次汇总所有日期或城市)以编写脚本,以便它可以通过,因为一个值包含所有日期或城市,其中所有值都用单引号引起来并用逗号分隔?

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

2)我如何用特定的模式限制我的日期参数否则显示错误?

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

#! /bin/bash

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

sh myScript.sh One Two

谢谢

我将此问题解释为您想将'Paris', 'London', 'Sydney'巴黎伦敦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"

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM