繁体   English   中英

用空格将值/参数传递给Shell脚本

[英]Passing a values/arguments to Shell Script with spaces

下面是一个shell脚本,用于获取2个输入参数值,

  1. asd#@#g#@#h#@#j@#@k

  2. 候选者

这给我们输出为

string0 asd
string1 g
string2 h 
.
.
.

candidateid

.
.
.

(&然后在Oracle查询中使用两个参数)

现在的问题是,当我尝试使用空格传递第一个参数时,上述代码失败。

例如: /TOM/Process Folders/System Drive/a.jpg

上面给出的位置应视为第一字符串。 如果我在双引号内给出以上内容,则效果很好。 但是我得到的上述参数没有引号。

#!/bin/bash
input=$1

input1=$2

IFS='#' read -a arr <<< "${input//#@#/#}"

for((i=0;i<${#arr[@]};i++))
do
        echo "String$i ${arr[i]}"
done

read passportphotos <<< "${arr[0]}"
read academiccertificates <<< "${arr[1]}"
read dateofbirth <<< "${arr[2]}"
read addressproof <<< "${arr[3]}"
read pancard <<< "${arr[4]}"
read pfnominationform <<< "${arr[5]}"
read gratuitynomination <<< "${arr[6]}"
read investmentdeclaration <<< "${arr[7]}"
read resignationletter <<< "${arr[8]}"
read acceptanceoffer <<< "${arr[9]}"
read acceptancecodeofconduct <<< "${arr[10]}"
read medicalnomination <<< "${arr[11]}"
read backgroungverification <<< "${arr[12]}"
read personaldataform <<< "${arr[13]}"

echo $passportphotos
echo $academiccertificates
echo $dateofbirth
echo $addressproof
echo $pancard
echo $pfnominationform
echo $gratuitynomination
echo $investmentdeclaration
echo $resignationletter
echo $acceptanceoffer
echo $acceptancecodeofconduct
echo $medicalnomination
echo $backgroungverification
echo $personaldataform

instant_client="/root/ora_client/instantclient_11_2"
view=`$instant_client/sqlplus -s HRUSER/HRUSER@TOMLWF <<EOF

set heading off

set feedback off

set lines 10000

set pagesize 10000


insert into EMPLOYEEDOCUMENTS VALUES ((SELECT EMPLOYEEID FROM EMPLOYEE WHERE CANDIDATEID='$input1'),'Resume','Doc','$passportphotos','Y','HR',(SELECT SYSDATE FROM DUAL),'HR',(SELECT SYSDATE FROM DUAL),'HR',(SELECT SYSDATE FROM DUAL));
`

echo $view

通过以下方式调用脚本:

delimiter_new.sh 'company_home/TOM/Proc_joingchecklist_test/Process Instance Documents/Instance.jpg' 14492

您需要在文件名两边加上引号,以便将其视为单个参数。

另外,您无需显式指定sh ,脚本中的#!/bin/bash行告诉操作系统运行bash。

我猜您实际上并不需要发布所有代码来表示您对参数中的空格有麻烦。

作为补充,在任何编程语言中,使用数组或将值映射到容器(如果使用bash的话,都使用关联数组)比创建数十个变量要有用得多。

编辑

对不起; 正如Barmar所指出的,我误读了这篇文章,并提出了确实能够真正改变您的程序执行能力的东西。 事实是,如果问题出在命令行参数上,则必须用双引号将其引起来; 这就是参数的读取方式。

但是,您可以将所有参数读入数组,然后像您一样更改IFS 请注意以下事实:您的参数必须由手头已知的东西分开,以及在使用IFS='#'也要分开。

暂无
暂无

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

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