このコマンドに問題がありますか?構文エラーがあるようですが、どこにいるのかわかりません。
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)'
TYPE変数に基づいてアーカイブ名を設定する必要があります。
- タイプが「時間」の場合、出力は次のようになります。
/backup/hour/10.gz
- タイプが「day」の場合、出力は次のようになります。
/backup/day/1.gz
- タイプが「月」の場合、出力は次のようになります。
/backup/2017-09.gz
ベストアンサー1
sh -c 'echo mongodump --host mongo_db --gzip --db db --archive="$(
case "$1" in
hour) f="%H";;
day) f="%d";;
month) f="%Y-%m";;
*) f="unknown"; set -- "";;
esac
date "+/backup/$1/$f.gz"
)"' x "$TYPE"
- 乾いた
case
長いより読みやすいif/elif/elif...
- これは
x "$TYPE"
、参照ゲームをする必要なく「外部」変数をsh本体に渡す方法です。 sh本文の「x」は$ 0になり、$ TYPEは$ 1になります。 - 内部的に改行が許可されています
$(...)
%
書式文字列に非表示を配置できますdate
。