将变量传递给bash脚本

时间:2012-11-17 12:32:17

标签: bash

我有一个bash脚本“test.sh”,我想要使用的一个参数是--no-email。

当我运行test.sh --no-email时,一切都按预期工作,我没有收到电子邮件状态报告。

然而,我真正想要运行的是“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 个答案:

答案 0 :(得分: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"