我有一个接受参数的脚本,如果未设置,则使用默认值。
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"