前回の予告どおり、今回は、第1回から第4回までに紹介したスクリプトをひとつにまとめたものです。
スクリプトを追加
.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
これにてひとまずお仕舞です。
コメント
コメントなどありましたら、GitHubのディスカッションへお願いします。(書き込みには、GitHubのアカウントが必要です)