2016-12-05 62 views
0

我正在編寫一個採用多個輸入變量(最多7個)的bash腳本,但只有前4個是必需的。 其餘3個是可選的,並且已經在腳本中設置,除非在從終端提示符調用腳本時指定。如何在不寫入所有其他輸入變量的情況下將變量傳遞到bash腳本

當我只想改變其中一個可選變量時,就會出現問題。例如,如果我想改變第7個變量,我還必須寫下第5和第6個變量值,否則腳本會認爲這是第5個參數,當然不是第7個變量。我怎樣才能做到這一點?

這裏是什麼我的腳本的這一部分看起來像現在一個例子:

#!/bin/bash 

tstart=$1 
tstop=$2 
coord1=$3 
coord4=$4 
optional1=${5:-100} 
optional2=${6:-50000} 
optional3=${7:-4} 

... 

當調用腳本,如果我想改變變量optional3,我也必須寫optional1的vaules和optional2。有沒有一種方法類似:

$ myscript.sh var1 var2 var3 var7=vaule_7 

(類似於你使用默認的變量值做功能蟒蛇什麼)

非常感謝您!

Pere。

+0

可能重複輸入他們[Bash getopt - 移動多個參數](http:// stackoverflow。com/questions/35081838/bash-getopt-shift-multiple-parameters) –

+0

基本上你需要解析參數,所以檢查任何參數是否以'var7 ='開頭。之後,你可以剝去這部分,你得到你的論點。或者(更好的方式)使用像getopt這樣的解析器 – mame98

回答

0

整理。首先,改變你的腳本,以便它使用環境變量,而不是可選參數的位置參數。

#!/bin/bash 

tstart=$1 
tstop=$2 
coord1=$3 
coord4=$4 
: ${optional1:=100} 
: ${optional2:=50000} 
: ${optional3:=4} 

要使用值打電話給你的腳本的任何三個,上一頁與分配(S)通話:

$ optional3=value_7 myscript.sh var1 var2 var3 var4 

有你可以設置一個shell選項中看起來像分配的任何參數將被視爲與預命令環境修改器相同。

$ set -k 
$ myscript.sh var1 var2 var3 var4 optional3=value_7 
0

,你可能會想,如果你希望有一個腳本,其中參數位置無關緊要要考慮的一個方法,你可以有他們的名字命名,然後分析該列表中的參數分配給正確的變量。

例如,你可以有這樣的:

while [ $# -gt 0 ]; do 
    case $1 in 
     -strt) tstart=$2 ; shift ;; 
     -stp) tstop=$2 ; shift ;; 
     -crd1) coord1=$2 ; shift ;; 
     -crd4) coord4=$2 ; shift ;; 
     -opt1) optional1=$2 ; shift ;; 
     -opt2) optional2=$2 ; shift ;; 
     -opt3) optional3=$2 ; shift ;; 
     (*) echo "$0: error - unrecognized option $1" 1>&2;; 
    esac 
    shift 
done 

什麼要做的是讀取參數在位置1到知道它對應這種情況下,與分配值2的變量,然後轉移所有參數1向左移動,並且在外部有另一個移位意味着位置3的參數現在位於位置1,而參數4現在位於位置2,依此類推,直到您用完參數分配爲止。

然後你可以打電話給你的東西腳本應該是這樣的:

myscript.sh -strt var1 -stp var2 -crd1 var3 -crd4 val4 -opt3 val7 

你將有你4個強制性參數再加上你的第三個可選的一個,你可以以任何順序

相關問題