2014-09-23 35 views
0

我周圍中搜索發現,getops只接收零個或一個說法,但我真的需要做這項工作,getops 1個選項以接收2個參數

我需要讓我的腳本運行是這樣的:。 /script.sh - 一個字符串整數

它的作用是將字符串和整數寫入文本文件。

我試過這段代碼:

while getopts a:d opt 
do 
case "$opt" in 

a) na1=$OPTARG 
    eval "na2=${OPTIND}" 
    shift 2 
    ;; 

d) ./viewS.sh;; 

esac 
done 

if [ $isdef -eq 0 ] 
then 
    echo "$na1;$na2" >>PBDB.txt 

fi 

我可以將字符串的一部分寫入到文本文件,但整數只是不斷產生,以「3」。

樣品:./script.sh -a功率內部文本文件0000

結果:功率; 3點

任何建議?

最近剛開始學習的bash腳本

+1

爲什麼你使用參數的*索引*? – 2014-09-23 16:22:44

+0

你的意思是OPTIND? ..我認爲我可以這樣工作,但我知道它不對.. – user3632739 2014-09-23 16:25:17

+0

@KarolyHorvath得到的是'$ {OPTIND}'是要查看的下一個索引,而不是該參數的值。你試圖用'eval'解決這個問題,但錯過了額外的'\ $'必要的。但這不是一個好的方法。改爲使用'$ {@:$ OPTIND:1}'。另外我認爲你在那裏轉移得太多了。我認爲你想「轉移」來「吞下」一個額外的論據。雖然我個人認爲這是一個糟糕的設計。 – 2014-09-23 16:28:28

回答

0

假設你標籤是準確的(你不使用/ bin/sh的),改變

eval "na2=${OPTIND}" 

使用 「間接變量」

na2=${!OPTIND} 

有了eval,你需要eval na2=\$$OPTIND但這很醜陋

+0

我只需要使它工作。沒有專業的東西呢。謝謝你回答先生 – user3632739 2014-09-23 17:00:41

+0

呃,不是「親」的東西,只是「正確」的東西。你反對什麼? – 2014-09-23 17:02:27

+0

nah ..對不起nvm。感謝您的幫助先生!它現在有效 – user3632739 2014-09-23 17:19:59

相關問題