Mono Works

株式会社Mono Works OfficialSite

hugo用のスクリプトまとめ(huto関連スクリプト 第5回)

hugo関連スクリプトまとめ(hugo関連スクリプト5回)

前回の予告どおり、今回は、第1回から第4回までに紹介したスクリプトをひとつにまとめたものです。

201807isogiyoshi05 ブルーさん

スクリプトを追加

.htaccessファイルの同期をおこなう前に、ローカル側のファイルが存在するものかどうかをチェックするスクリプトを追加しました。

    if [ -s "${HUGO_DIR}/htaccess/${HTACCESS_NAME}" ]; then
      :
    else
      echo "指定のファイル(yyyyMMdd.htaccess)が存在しません。"
      exit
    fi
    rsync -avz --update --chmod=0604 ${HUGO_DIR}/htaccess/${HTACCESS_NAME} monoworks@monoworks.sakura.ne.jp:/home/monoworks/www/.htaccess

気になったところ

こちらの4つは、どれも同じことを表現してます。

if [ -s file ]; then
  echo "存在する"
else
  echo "存在しない"
fi
if [ -s file ]
then
  echo "存在する"
else
  echo "存在しない"
fi
if test -s file ; then
  echo "存在する"
else
  echo "存在しない"
fi
if test -s file
then
  echo "存在する"
else
  echo "存在しない"
fi

;を付けると、左側が終了したら右のコマンドへ進みます。 shell scriptでは、1行ずつコマンドが進んでいきますが、;を付けると、複数行を1行にまとめることができるようになります。

[ ]は、testコマンドと同じです。どこからどこまでが testの内容か分かりやすいので、[ ]を使うことにしました。

あとハマったところ

作成したスクリプトファイルは、改行コードは LFにします。.htaccessファイルもね。

まとめたスクリプト

長いです…

#!/bin/bash

# シェル変数:hugoの作業ディレクトリ
readonly HUGO_DIR="/mnt/c/《自分なりのPath》"
# シェル変数:ローカル環境での確認時テーマファイル
readonly HUGO_LOCAL_THEME="home"
# シェル変数:ローカル環境のURL
readonly HUGO_LOCAL_URL="http://《コンピュータ-名》"
# シェル変数:本番環境用のテーマファイル
readonly HUGO_RELEASE_THEME="release"
# シェル変数:VSCode 実行ファイルの場所
readonly VSCODE_DIR="/mnt/c/Program Files/Microsoft VS Code/Code.exe"
# シェル変数:同期に使用する.htaccessファイル
readonly HTACCESS_NAME="20180612.htaccess"

if cd "$HUGO_DIR"; then
  :
else
  echo "存在しないディレクトリがhugoの作業ディレクトリに指定されています。"
  exit
fi

echo -n "hugoを始める
  1. Webサーバ起動
  2. ブログを書く
  3. 会社のお知らせを書く
  4. ビルド
  5. シンク
  6. シンク(.htaccess)
  7. メンテナンスメニュー
  8. キャンセル
選択(1-8):"
read -r choice_to_do

case $choice_to_do in
  [1]* )
    echo -n "Webサーバの起動方法を選択
      a. hugoでローカルWebサーバ起動(ファイル生成しない)
      b. hugoでローカルWebサーバ起動(_localフォルダにファイル生成)
      c. ngrok経由で外部にローカルWebサーバを公開(ファイル生成しない)
      d. ngrok経由で外部にローカルWebサーバを公開(_localフォルダにファイル生成)
      e. キャンセル
    選択(a-e):"
    read -r select_method

    case $select_method in
      [aA]* )
        hugo server -D -w -t $HUGO_LOCAL_THEME -b="$HUGO_LOCAL_URL" --bind="0.0.0.0"
      ;;

      [bB]* )
        rm -r _local/*
        hugo server -d _local -D -w -t $HUGO_LOCAL_THEME -b="$HUGO_LOCAL_URL" --bind="0.0.0.0"
      ;;

      [cC]* )
        cmd.exe /c "start ngrok.exe http 1313"
        echo -n "別ウインドウで開いたプロンプト内の
        https://《8桁の英数字》.ngrok.io 部分の
        8桁の英数字を入力:"
        read -r ngrok_adress
          hugo server -D -t ngrok -b="https://${ngrok_adress}.ngrok.io" --bind="0.0.0.0" --appendPort=false --liveReloadPort=443 --navigateToChanged
      ;;

      [dD]* )
        cmd.exe /c "start ngrok.exe http 1313"
        echo -n "別ウインドウで開いたプロンプト内の
        https://《8桁の英数字》.ngrok.io 部分の
        8桁の英数字を入力:"
        read -r ngrok_adress
          rm -r _local/*
          hugo server -d _local -D -t ngrok -b="https://${ngrok_adress}.ngrok.io" --bind="0.0.0.0" --appendPort=false --liveReloadPort=443 --navigateToChanged
      ;;

      [eE]* )
        exit
      ;;

      * )
        echo "a から e の半角英字を入力して下さい。"
      ;;
    esac
  ;;

  [2]* )
    echo -n "ブログ slug(日付以外の部分)
    ※ 半角英数とハイフンのみ使用可、スペースを入れない
    (入力):"
    read -r headline
    echo -n "ブログ 日付
    ※ 半角数字とハイフンのみ使用可、スペースを入れない
    yyyy-mm-dd(空白なら当日の日付)形式で
    (入力):"
    read -r date
    echo -n "ブログ タイトル(フリー入力)
    ※ クォーテーション「\"」は、HTMLエンティティ化して「"」と記述
    (入力):"
    read -r title
    # archetypes/default.md を使用して記事を生成
    if [ -z "$date" ]; then
      date="$(date +"%Y-%m-%d")"
    fi
    slug="$date-$headline"
    file_name="post/${slug}.md"
    file_path="content/$file_name"
    if [ ! -e "$file_path" ]; then
      hugo new "$file_name"
      sed -i -e "s/title = \".*\"/title = \"${title}\"/g" "$file_path"
      sed -i -e "s/slug = \".*\"/slug = \"${slug}\"/g" "$file_path"
      sed -i -e "s/# タイトルをここに/# ${title}/g" "$file_path"
    else
      echo "$file_name はすでに存在します。"
    fi
    "$VSCODE_DIR" "$file_path"
  ;;

  [3]* )
    echo -n "お知らせ slug(日付以外の部分)
    ※ 半角英数とハイフンのみ使用可、スペースを入れない
    (入力):"
    read -r headline
    echo -n "お知らせ 日付
    ※ 半角数字とハイフンのみ使用可、スペースを入れない
    yyyy-mm-dd(空白なら当日の日付)形式で
    (入力):"
    read -r date
    echo -n "お知らせ タイトル(フリー入力)
    (入力):"
    read -r title
    # archetypes/news.md を使用して記事を生成
    if [ -z "$date" ]; then
      date="$(date +"%Y-%m-%d")"
    fi
    slug="$date-$headline"
    file_name="news/${slug}.md"
    file_path="content/$file_name"
    if [ ! -e "$file_path" ]; then
      hugo new "$file_name"
      sed -i -e "s/date = \".*\"/date = \"${date}T00:00:01+09:00\"/g" "$file_path"
      sed -i -e "s/title = \".*\"/title = \"${title}\"/g" "$file_path"
      sed -i -e "s/slug = \".*\"/slug = \"${slug}\"/g" "$file_path"
      sed -i -e "s/# タイトルをここに/# ${title}/g" "$file_path"
    else
      echo "${file_name} はすでに存在します。"
    fi
    "$VSCODE_DIR" "$file_path"
  ;;

  [4]* )
    rm -r public/*
    hugo -t $HUGO_RELEASE_THEME
  ;;

  [5]* )
    rsync -avz --update --delete --exclude='.htaccess' --chmod=D0755,F0644 ${HUGO_DIR}/public/ {ユーザ名}@{サーバアドレス}:{ホストのディレクトリ}
  ;;

  [6]* )
    if [ -s "${HUGO_DIR}/htaccess/${HTACCESS_NAME}" ]; then
      :
    else
      echo "存在しないファイルが yyyyMMdd.htaccess に指定されています。"
      exit
    fi
    rsync -avz --update --chmod=0604 ${HUGO_DIR}/htaccess/${HTACCESS_NAME} {ユーザ名}@{サーバアドレス}:{ホストのディレクトリ}.htaccess
  ;;

  [7]* )
    echo -n "
    メンテナンスメニュー
      a. WSL環境のアップデート
      b. hugoのインストール
      c. キャンセル
    選択(a-c):"
    read -r select_method

    case $select_method in
      [aA]* )
        sudo apt update
        sudo apt upgrade
      ;;

      [bB]* )
        echo -n "ダウンロードするhugoのバージョンを入力
        参考URL:https://github.com/gohugoio/hugo/releases
        0.xx.x 形式で入力:"
        read -r hugo_version
        wget "https://github.com/gohugoio/hugo/releases/download/v${hugo_version}/hugo_${hugo_version}_Linux-64bit.deb"
        sudo dpkg -i hugo*.deb
        rm hugo*.deb
      ;;

      [cC]* )
        exit
      ;;

      * )
        echo "a から c の半角英字を入力して下さい。"
      ;;
    esac
  ;;

  [8]* )
    exit
  ;;

  * )
    echo "1 から 8 の半角数字を入力して下さい。"
  ;;
esac

これにてひとまずお仕舞です。

comments powered by Disqus
Googleブログ検索
Amazon検索
執筆者
"ぽぽろんち" pporoch
pporoch120
Mono Worksの中の人。DQX内では "ぬここ" の中の人もやってます。好きなことをつらつらと書き留めてます。
"DQX@ぬここ(UD487-754)"
採用案内