我有一个接受参数的脚本,如果未设置,则使用默认脚本。
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
我怎样才能做到这一点?
做适当的命令行解析,然后选择如何进行实际的空运行。
命令行解析:
#!/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"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句