2017-03-17 123 views
1

基本上我想要做的是創建一個if條件來評估程序是否已經用特定參數啓動。從參數中獲取字符串的第一個字

基本上你的程序

./testprogram 

./testprogram [-i EXCEPTION] DIR 

我想要做的是,確定該計劃是否已經啓動與參數三種啓動選項。以下是啓動選項:

  • 如果推出不帶參數,它會設置爲當前工作目錄
  • 如果有異常啓動,如果用DIR推出將執行特定任務
  • ,它將設置DIR作爲設定參數

所以我創建了以下功能

parse_arg(){ 
    # when launched with no argument, fairly self explanatory 
    if [[ $# == '0' ]]; then 
    DIR="$PWD" 
    DIR=$DIR 
    fi 

現在,這裏是棘手的部分,我需要弄清楚一種方式,來檢查第二段是否是異常或簡單的目錄,換句話說,我只是不能將它硬化爲我們已經啓動的大量參數。我試圖做的是創建一個參數來幫助我建立的,如果條件

I_DETECT="$1" 現在是什麼我不知道,如果,如何削減基本的話裏面的字符串,同時也保持空白控制。

只有我能想到的方法是基本回顯出來,然後使用剪切功能。問題是,我需要回聲它

我想這

I_DETECT=$(echo I_DETECT | awk '{print $1;})' 

    elif [[ $# == '1' && $I_DETECT != "-i" ]] then; 
    ... #you get the point 

問題是使用awk工具的性質,它最終還是打印出來到標準輸出,當所有我想要的是評估表達式if條件。

因此,任何想法更優雅的解決方案?

+1

我有很多問題:(1)「DIR = $ DIR」的缺點是什麼? (2)你爲什麼想要削減'$ 1'中的單詞?一個正確的'testprogram'調用要麼有'$ 1 = -i'或'$ 1 = someDir'。 ''-i「'只有一個字,'someDir'可能不應該被分割。 (3)你想分裂的單詞是什麼:把所有的單詞放入一個數組中,只提取第* n個單詞,...? – Socowi

+0

你在找'shift'嗎?另外,請閱讀[Bash FAQ/035](http://mywiki.wooledge.org/BashFAQ/035)和[ComplexOptionParsing](http://mywiki.wooledge.org/ComplexOptionParsing)。 –

回答

0

getopt是解析參數的好方法,包括--long-options。它將避免這份工作中最枯燥的部分。

+0

此外,對於更簡單的要求(比如沒有長選項),內置'getopts'可用。 –

相關問題