addictionwhite’s diary

考え中のことを整理と忘備録のために綴ります。ここに書かれている考えは翌日には変わる可能性があります

シェルスクリプト備忘録


環境構築用のシェルスクリプトを組んだ際の備忘録。
実施した内容は基本的にgithubリポジトリやdockerコンテナの準備、設定ファイルのとりまわし。
どこかのサーバに何かをインストールする、みたいなものは行っていないので(それはすでにDockerで用意されている)冪等性を保つのが楽だった
(リポジトリやコンテナの破棄が楽なため)。

軽くハマったところは
sedコマンドの仕様(macの場合は-iオプションでバックアップをとらなくてはいけない)
curl叩く際にエラー。()でコマンドをくくらなければいけない
・Docekrの同期したディレクトリを削除してつくりなおしたら同期先のディレクトリがない的なエラーが出た
(一度docker落として立ち上げ直さないといけない)

 

その他

コマンドが成功したかを成果物(ディレクトリが存在しているかなど)で見ようとしていたが、
$?のステータスコード見れば済むことを忘れていた
(厳密にチェックしたい場合などでは二重に見てもいいかもしれない)
(ただバックで動いてプロセスチェックするような処理はループしてチェックみたいな処理が必要そう)

 

sedの区切り文字は/でなくてもよい(なんでもいいらしい。なので/を置換したいときなどは@など使えばいい(sedで覚えたことはvimでも使えるので嬉しい)

  

以下参考にした記事

--

Bashの便利な構文だがよく忘れてしまうものの備忘録
https://qiita.com/Ping/items/57fd75465dfada76e633
連結するには演算子などは必要なく、つなげれば良い。
ダブルクォーテーションマークで囲んだ文字列では、式が展開される5。


`curl -i`の出力結果(レスポンスヘッダ)をシェルスクリプトの変数に代入したい
https://teratail.com/questions/67052


bash】現在の日付時刻 がファイル名
https://qiita.com/moonsubaru/items/7e51446db8b570e21c65

bashコーディング規約
https://qiita.com/mashumashu/items/f5b5ff62fef8af0859c5
#!/bin/shは実行環境によって様々なシェルにシンボリックリンクになっているので、bashなら#!/bin/bashと明示しよう
インデントは半角スペース2つ

Googleの肩に乗ってShellコーディングしちゃおう
https://qiita.com/laqiiz/items/5f72ca668f1c58176644
小さいツールやスクリプト実行時のラップ程度にShellの利用を抑えること。
100行超えるとPythonとか他の言語を使おうこと。


MacLinuxでは、sedの動作が異なるので注意
https://it-ojisan.tokyo/mac-linux-sed/
Macsedのmanにも説明があるのですが、Macsedの場合は、-iオプションの後に、必ずバックアップ用の拡張子をつける必要があります。
そこで、下記のように-iオプションの後に拡張子をつけると、実行できます。


sedで指定行(特定の行)だけ置換する、指定行(特定の行)に文字列挿入する
https://qiita.com/nii_yan/items/c93ab315f78a069f988d

docker exec を使いこなす
https://unicorn.limited/jp/item/347
VPS仮想マシンと同様の使い方をしたい場合にコンテナログインは直感的ですが、コンテナ上のコマンドを実行するには単にdocker execに直接コマンドを指定するだけで足りるため、ログインしないオペレーションに慣れた方が良いでしょう。

bashでファイルやディレクトリの存在確認方法まとめ
https://qiita.com/nii_yan/items/73f4caacdc2ca6f45135


コマンドラインで文字色をつける? シェルスクリプトで文字色を変えて表示
https://shell-script.info/show-color-text/

何もしない組み込みコマンド ":" (コロン)の使い道
https://qiita.com/xtetsuji/items/381dc17241bda548045d


スクリプト中で実行しているコマンドを表示する
http://sig9.hatenablog.com/entry/2015/12/15/220312
#!/bin/sh -x
これを実行すると以下の結果になります。結果だけで無く、実行しているコマンドも表示されているのが分かります

 

ポケットがチケットでいっぱい

http://fukuchiharuki.me/wiki/index.php?%E3%82%B7%E3%82%A7%E3%83%AB/sed%E3%81%A7%E3%82%B9%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%82%92%E5%8F%96%E3%82%8A%E6%89%B1%E3%81%86

エスケープすることもできるが、別の文字で正規表現を書いてもいい。

sed -e "s%hoge/moge%foo/bar%g"