Jim*_*Jim 0 shell bash shell-script
我有一个接受参数的脚本,如果未设置,则使用默认值。
VALUE=$1
if [[ -z "$VALUE" ]];
VALUE=foo #some function returns the default
fi
Run Code Online (Sandbox Code Playgroud)
然后脚本继续做一些事情。
我想“增强”它并提供一些dry run选择。因此,如果通过了,我们将有类似的东西
if [[ -z "$DRY" ]];
echo "command x y z"
else
command "x" "y" "z"
fi
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
进行适当的命令行解析,然后选择如何进行实际的空运行。
命令行解析:
#!/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
Run Code Online (Sandbox Code Playgroud)
现在,$dry_run将true在用户与调用脚本-n的命令行选项。
然后,选择如何进行空运行。一个简单的方法是使用set -v(显示 shell 读取的命令),然后是set -n(实际上不运行任何东西):
if "$dry_run"; then
set -v
set -n
fi
Run Code Online (Sandbox Code Playgroud)
这可能不是您想要的,因为它只会显示脚本。
相反,你可以选择做
if "$dry_run"; then
cmd=echo
else
cmd=''
fi
Run Code Online (Sandbox Code Playgroud)
然后在您想要试运行的特定命令前加上前缀$cmd:
$cmd ls -l
$cmd echo "hello world"
Run Code Online (Sandbox Code Playgroud)