Você tem variáveis não citadas ( $TIME
) e erros de sintaxe ( $$(...)
). Além disso, se TYPE
for uma variável de shell (em vez de uma variável de ambiente), seu valor não será visível de forma alguma dentro do único script sh -c
citado.
A declaração deve ser parecida com
sh -c "mongodump --host mongo_db --gzip --db db \"$(if [ \"$TYPE\" = \"hour\" ]; then echo \"--archive=/backup/hour/$(date +%H).gz\"; elif [ \"$TYPE\" = \"day\" ]; then echo --archive=/backup/day/$(date +%d).gz; fi)\""
(ou algo assim ...)
É problemático obter a citação correta, já que você gostaria que o shell expandisse $TYPE
na subcamada mais interna e ainda tivesse citações duplas.
Se você não precisa do sh -c
(não há nada que exija que eu veja), fica um pouco mais fácil para os olhos:
mongodump --host mongo_db --gzip --db db "$(if [ "$TYPE" = "hour" ]; then echo "--archive=/backup/hour/$(date +%H).gz"; elif [ "$TYPE" = "day" ]; then echo "--archive=/backup/day/$(date +%d).gz"; fi)"
No entanto, como isso forneceria uma substituição de comando vazia se $TYPE
não for day
nem hour
, sugiro que você faça isso:
case "$TYPE" in
hour) archive="/backup/hour/$(date +%H).gz" ;;
day) archive="/backup/day/$(date +%d).gz" ;;
*)
printf 'Error: Unknown TYPE "%s"\n' "$TYPE" >&2
exit 1 ;;
esac
sh -c "mongodump --host mongo_db --gzip --db db --archive=$archive"
# or just
mongodump --host mongo_db --gzip --db db --archive="$archive"
Isso torna muito mais fácil ler, entender e manter.