2013-02-25 79 views
0

這是我的問題。我有腳本,我想確保在腳本被調用時輸入的參數與腳本內的變量名稱匹配。Bash腳本:greping參數

例如:

./valid富< - 作爲腳本調用

#!/bin/bash 

PARAM=$1 
VAR=/foo/ 

if grep -c $PARAM == $VAR 
then 
echo yes 
fi 

echo no 

我用grep具有最糟糕的時候,我不知道如何正確使用它的內部腳本和淘寶互聯網之後,我想我需要一些關於我的問題的具體反饋。

感謝,

EA

+0

你確定你需要的grep?爲什麼不''如果[「$ PARAM」==「$ VAR」]' – ryanbwork 2013-02-25 21:17:42

+1

Eric,這應該是完全匹配還是正則表達式匹配? – 2013-02-25 21:39:15

回答

3

這並不強勁,但你可以這樣做:

if echo "$VAR" | grep -q "$PARAM"; then 

它可能是更好地簡單地做:

if test "$VAR" = "$PARAM"; then 

如果你是試圖匹配正則表達式,bash允許:

if [[ "$VAR" =~ "$PARAM" ]]; then 

匹配固定字符串$VAR與正則表達式$PARAM。如果$VAR是正則表達式,則應該顛倒參數的順序。 (也就是說,[[ "$PARAM" =~ "$VAR ]]

+1

可能需要'[[$ PARAM =〜$ VAR]]' - 看起來像$ VAR是模式。 – 2013-02-25 21:37:48

+0

@EricAnderson,在這裏請注意'$ VAR'應該是'「foo」'(沒有斜槓) – 2013-02-25 21:38:28

+0

也許'[[「$ PARAM」=〜$ VAR]] - PARAM可能需要引用,VAR不能如果它應該是一個正則表達式,則被引用。 – William 2013-02-25 21:41:45

0

你可以在你的腳本中進行搜索,因爲該聲明是在名稱後面加上一個等號:

 
if egrep "^\s*$PARAM=" $0 
then 
    echo yes 
else 
    echo no 
fi 
0

列出變量使用

set -o posix ; set 

的POSIX thingie阻止功能列表。

爲了分離參數本地腳本,從shell中運行它,並存儲結果,然後 從腳本運行和比較輸出

(set -o posix ; set) >/tmp/variables.before 
(set -o posix ; set) >/tmp/variables.after