条件参数

条件参数

启动 bash 脚本时如何传递参数以便在脚本中执行特定行

例如 (createfile.sh):

#!/bin/bash

export CLIENT1_DIR="<path1>"
export CLIENT2_DIR="<path2>"
chef-solo -c solo.rb -j client1.json
chef-solo -c solo.rb -j client2.json

然后

$ ./createfile.sh client1

应仅执行client1特定行,并将其替换为“client2应仅执行client2特定行”。

答案1

对此有很多解决方案。这是一个:

#!/bin/bash

client="$1"

case "$client" in
    "client1") export CLIENT1_DIR="<path1>" ;;
    "client2") export CLIENT2_DIR="<path2>" ;;
    *)  printf 'Invalid client argument: %s\n' "$client" >&2
        exit 1 ;;
esac

chef-solo -c solo.rb -j "$client".json

client变量获取第一个命令行参数的值。

case语句根据该值设置 或CLIENT1_DIRCLIENT2_DIR或者如果使用了无效值则退出并显示错误消息)。

然后chef-solo使用与命令行上给出的内容相对应的 JSON 文件进行调用。

答案2

函数中有以下几行:

#!/bin/bash
clientOne(){
    ## client1 specific lines
    echo "one"
}
clientTwo(){
    ## client2 specific lines
    echo "two"
}

case "$1" in
    "client1")
        clientOne
        ;;
    "client2")
        clientTwo
        ;;
    *)
        echo "Wrong option" >&2
        ;;
esac

## Common lines
echo foo

相关内容