Faça a análise correta da linha de comando e, em seguida, escolha como executar o funcionamento a seco real.
A análise da linha de comando:
#!/bin/sh
dry_run=0
while getopts 'n' opt; do
case "$opt" in
n) dry_run=1 ;;
*) echo 'error in command line parsing' >&2
exit 1
esac
done
Agora, $dry_run
será 1 se o usuário invocar o script com a opção de linha de comando -n
.
Em seguida, escolha como fazer a corrida a seco. Uma maneira simples seria usar set -v
(exibir os comandos conforme eles são lidos pelo shell) seguido por set -n
(não executar qualquer coisa ):
if [ "$dry_run" -eq 1 ]; then
set -v
set -n
fi
Isso pode não ser o que você deseja, pois exibiria o script.
Em vez disso, você pode optar por fazer
if [ "$dry_run" -eq 1 ]; then
cmd=echo
else
cmd=''
fi
e, em seguida, prefixar os comandos específicos que você gostaria de executar com $cmd
:
$cmd ls -l
$cmd echo "hello world"