こんにちは。iOSをメインに開発しているロッキーカナイです。
久々の記事となって、少し緊張気味ですw
今日はswiftではなくシェルスクリプトについて書いてみます。
というのも今業務で、とるCMSのサイトの更新作業があって、ちまちまターミナルで作業していたのですが、さすがにやる事が多くてゲンナリ。転送時にファイルパスの入力ミスなんてしてしまうものですから、AWSのサーバへログインして正しいところへ移動させたりで、てんやわんやになってしまうのです。
そこで、これらの作業をシェクスクリプトで書いてコマンド一発でできましたので、抜粋を備忘録として残そうと思った次第です。
OS:Mac OSX 10.13.4
やること(簡易版)
- 該当場所にフォルダを作って、その中に画像を追加
- 該当場所にhtmlファイルを作って、1の画像urlを追加する
- 1と2で作ったものをAWSサーバに転送する
- 1のフォルダと画像名、2のhtmlファイル名はシェルスクリプト実行時の引数名を使う
サーバの階層
こんな感じ
/home/ec2-user/html/(ここにフォルダ)/(ここに画像)
/home/ec2-user/html/(ここにhtmlファイル)
用意
ローカルのどっかに実行シェルスクリプトファイルを置きます。そんでもって、画像は同階層に用意してあるものとします。今回はDesktop上としてみますので、コードを使う場合は環境によってパスを読み替えてくださいな。
あとhtmlファイルはテンプレートを用意して、画像urlは置換する方法で行います。以下のhtmlも同階層に置きます。
1 2 3 4 5 6 7 8 9 10 |
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>!name!</title> </head> <body> <img src="!image_url!"> </body> </html> |
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#!/usr/bin/bash #定数 readonly aws_account="ec2-user@00.000.00.000" readonly aws_key="key.pem" readonly img_name="shell.jpg" readonly tmp_html="template.html" readonly site_url="https:\/\/test.com\/" #変数 name=$1 #引数チェック if [ $# -ne 1 ]; then echo "error:引数か、なにかがおかしいです。" exit 1 fi #フォルダ作成 mkdir -p ${name} #画像をフォルダ内にコピーしリネームする cp -r ${img_name} ${name}/${name}.jpg #テンプレートhtmlをコピーして置換してリネームする #テンプレートの!name!には$nameが、!image_url!には$name.jpgが置換される sed -e "s/!name!/$name/g" -e "s/!image_url!/$site_url\/$name\/$name.jpg/g" ${tmp_html} > ${name}.html #画像(フォルダ)の転送 scp -r -i ${aws_key} ${name} ${aws_account}:/home/ec2-user/html #htmlファイルの転送 scp -i ${aws_key} ${name}.html ${aws_account}:/home/ec2-user/html echo finished! exit 0 |
実行時に名前を引数を指定してあげます。
1 2 3 4 5 |
user:desktop user$ sh test.sh test test.jpg 100% 100KB 286.9KB/s 00:02 test.html 100% 1KB 100.3KB/s 00:00 finished! user:desktop user$ |
成功です。
引数エラーも仕込みましたので、引数がないと以下のようになります。
1 2 |
user:desktop user$ sh test.sh error:引数か、なにかがおかしいです。 |
今回のシェルスクリプトで使い方など備忘録として残しました。
なお、動作チェックしてませんので、動く保証はありません。時間があればチェックしますので、動かなねーぜこらと怒らないでくださいね。
2018/8/26動作した事を確認しました。
