シェルスクリプトについてすこし学んだ
「今年はインフラやデプロイやシェルスクリプトはできなくていい」とはいったものの、ある人のスクリプトがたしかに便利でいい感じだった。ので、ちょっと触発されて少しだけかいて学んだ。以下、簡単なメモ。
[改訂新版] シェルスクリプト基本リファレンス ??#!/bin/shで、ここまでできる (WEB+DB PRESS plus)
- 作者: 山森丈範
- 出版社/メーカー: 技術評論社
- 発売日: 2011/04/27
- メディア: 単行本(ソフトカバー)
- 購入: 8人 クリック: 113回
- この商品を含むブログ (11件) を見る
最速文法的な
まあググるといいけど。以下、コメントにかく
# 宣言時はなにもつけない a='hoge' # 使用するときは $a と $ をつける # 変数を展開するときはダブルクォーテーション echo "$a" # 変数を展開しないときはシングルクォート echo '$a'
ここまではまあいいとして、if の [ の実態や () や $ のつかわれかたがまちまちでかなり混乱してた。メモ。
# if のあとの [ ] の実態は test コマンド # test のエイリアスが [ # [ コマンドの最終引数が ] だと test コマンドの終了を意味する if [ -f ~/path/to/file ]; then echo 'hoge' fi # なので以下と同等 if [ -f ~/path/to/file ] then echo 'hoge' fi # [[ ... ]] も test コマンドとして似たような挙動をするけど、判定や終了コードの扱いが若干違う # {} は関数定義などのブロック # 関数定義 func (){...} # (()) は算術式。そのなかで定義された変数はローカル変数として扱える # () はサブシェル。コマンドをまとめるときにつかう # 関数定義の () とは違う # 絶対パスを求める。 dirname $0 は相対パスになってしまうため BASE_DIR=$(cd $(dirname $0); pwd) # 関数定義で引数を使うときは $@ で可変長引数、 $1, $2 などで参照する # ${hoge:~/path/to/file}ってのはなんかこうラベルを貼った参照?あまりよくわからない
[[]] について if 文と test コマンド - UNIX & Linux コマンド・シェルスクリプト リファレンス
まあ
あんまりまだちゃんとできなくていいけど、ちょっとしたときに使える武器はほしい。実際簡単なスクリプトをつくったけど、なかなか便利だった。