if/else コマンドの構文エラー

if/else コマンドの構文エラー

このコマンドに問題がありますか?構文エラーがあるようですが、どこにいるのかわかりません。

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

おすすめ記事