2012-11-17 276 views
0

我有一個bash腳本「test.sh」,我想使用的一個參數是--no-email。將變量傳遞給bash腳本

當我運行test.sh - 沒有電子郵件,一切都按預期工作,我沒有收到電子郵件狀態報告。

但是我真正想運行的是「test.sh test.cnf」,其中--no-email參數與其他參數一起存儲在test.cnf文件中。我不能爲我的生活得到這個工作。也許我是完全愚蠢的,不理解?

非常感謝

echo $*|grep -se '--no-email'&>/dev/null 
SEND_MAIL=`echo $?` 

echo -e "DEBUG: \$*=$*" 

if [ ! "$SEND_MAIL" == "0" ]; then 
    echo 'Mail would have been sent!' 
else 
    echo 'NO MAIL WOULD HAVE BEEN SENT!' 
fi 

回答

1

如果您不能修改腳本test.sh來支持這一點,你仍然可以使用這個語法來從一個配置文件中的參數:

test.sh $(<test.cnf) 

如果這個假設是不正確的,即你想修改test.sh本身來支持這個,那麼你必須更具體地瞭解test.sh內部會發生什麼。

編輯:現在test.sh的內容已添加到問題中。從那裏開始,最簡單的事情就是這樣:

grep -sqe '--no-email' "$*" 
SEND_MAIL=$? 

但是你寫到你有一堆其他的參數。爲每一個做一個grep可能不方便。在這種情況下,你可以遍歷一個CNF文件中像這樣的話:

#!/bin/bash 

while read line; do 
    for word in $line; do 
     echo "examing $word" 
     case "$word" in 
     --no-email) 
      SEND_MAIL=0 
     ;; 
     --no-foo) 
      NO_FOO=0 
     ;; 
     *) 
      echo 1>&2 "WARNING: Unknown parameter: $word" 
     ;; 
    esac 
    done 
done < "$1" 
+0

更新,以顯示test.sh – user1183367

+0

@ user1183367裏面什麼:更新了我的答案 –