簡體   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