2013-02-25 116 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