向脚本添加一些试运行选项

向脚本添加一些试运行选项

我有一个接受参数的脚本,如果未设置,则使用默认值。

VALUE=$1
if [[ -z "$VALUE" ]];  
   VALUE=foo #some function returns the default  
fi  

然后脚本继续做一些事情。
我想“增强”它并提供一些dry run选择。所以如果通过的话我们就会得到类似的东西

if [[ -z "$DRY" ]];  
  echo "command x y z"  
else 
  command "x" "y" "z"  
fi  

我怎样才能做到这一点?

答案1

进行适当的命令行解析,然后选择如何进行实际的空运行。

命令行解析:

#!/bin/sh

dry_run=false

while getopts 'n' opt; do
    case "$opt" in
        n) dry_run=true ;;
        *) echo 'error in command line parsing' >&2
           exit 1
    esac
done

现在,$dry_run如果true用户使用-n命令行选项调用脚本。

然后,选择如何进行空运行。一种简单的方法是使用set -v(显示 shell 读取的命令),然后使用set -n(实际上并不运行任何事物):

if "$dry_run"; then
    set -v
    set -n
fi

但这可能不是您想要的,因为它只会显示脚本。

相反,你可以选择这样做

if "$dry_run"; then
    cmd=echo
else
    cmd=''
fi

然后在您想要空运行的特定命令前面加上前缀$cmd

$cmd ls -l
$cmd echo "hello world"

相关内容