はじめに
ドットインストールのシェルスクリプト入門を見たので、その視聴メモをまとめておきたいと思います。 この記事は、前半(#01~#09)のまとめです。
#01 シェルスクリプトとはなにか?
特に気になるところなし。
#02 はじめてのシェルスクリプト
1行目に実行するシェルを指定する
/bin/zsh で実行する場合、1行目に下記のように書く。
#!/bin/zsh
ファイルのアクセス権限を変更する
シェルスクリプトを実行するためにファイルに実行権限を与える。 hoge.shの所有者、グループ、その他のユーザの権限をそれぞれ、rwx r-- r--にする場合、下記のようにchmodコマンドを実行する。 (所有者は読み出し書き込み実行権限、グループとその他のユーザには読み出しのみの権限を許可する場合)
$ chmod 744 hoge.sh
#03 変数を使ってみよう
変数の使い方
- 変数に代入するとき = の前後にスペースを入れない
- ''(シングルクォート) で括ると変数が展開されない
# =の前後にスペースを入れない S="hoge" echo $s echo "$s" # シングルクォートで括ると展開されない echo '$s'
実行結果
$ ./hoge.sh
hoge
hoge
$s
#04 数値演算をしてみよう
数値演算の仕方
- 数値演算を行う時は ``(バッククォート) で括る
- 数値演算をを行う時は expr を使う
- 記号の前後にはスペースを入れる
x=10 # バッククォートで括ると計算する # 記号の前後にはスペースを入れる echo `expr $x + 2`
実行結果
$ ./hoge.sh
12
#05 四則演算をしてみよう
掛け算の仕方
- 掛け算する時は *(アスタリスク) を \(バックスラッシュ) でエスケープする
- 計算の順序の ()(括弧) も\でエスケープする
x=10 # 掛け算は*を\でエスケープする # $x × 2 echo `expr $s \* 2` # 括弧も\でエスケープする # ( $x + 5 ) × 2 echo `expr ¥( \x + 5 \) \* 2`
実行結果
$ ./hoge.sh 20 30
#06 配列を使ってみよう (1)
配列へのアクセス
- 配列で添字を使用する場合は {}(波括弧)で括る
- $array で先頭の要素
- ${array[@]} で全ての要素
- ${array#[@]} で要素数
#配列 a=(2 4 6) # 先頭の要素 echo $a # 添字を使用する場合は{}で括る echo ${a[1]} #全ての要素 echo ${a[@]} # 要素数 echo ${#a[@]} # {}で括るのを忘れると、$aが評価されて「2[1]」 となってしまう echo $a[1]
実行結果
$ ./hoge.sh 2 4 2 4 6 3 2[1]
#07 配列を使ってみよう (2)
配列への代入と要素の追加
- 配列への代入時は{}で括る必要はない
- 配列の要素の追加は array+=(hoge foo) とする
#配列 a=(2 4 6) # 配列への代入時は{}で括る必要はない a[2]=10 echo ${a[@]} # 配列の要素の追加 a+=(20 30) echo ${a[@]}
実行結果
$ ./hoge.sh 2 4 10 2 4 10 20 30
``(バッククォート) で括ると実行結果を返す。
この場合は、dateコマンドの結果を配列に格納する。
``で括ると実行結果を返す
- ``(バッククォート) で括ると実行結果を返す
# ``で括ると実行結果を返す d=(`date`) echo ${d[0]}
実行結果
$./hoge.sh
2015年
参考
dateコマンドは日付時刻を表示する。
$ date 2015年 6月25日 木曜日 23時00分00秒 JST
#08 条件式を評価してみよう (1)
条件式について
- $? は、直前の条件式の評価の戻り値(真なら0,偽なら1)が格納されている
- -eq は等しいかどうか(equal)
# 条件式の評価 # 数値の評価 # 1 = 2 test 1 -eq 2; echo $? # 1 = 1 test 1 -eq 1; echo $?
実行結果
$ ./hoge.sh 1 0
色々な条件式
- -eq : 等しいか(equal)
- -ne : 等しくないか(not equal)
- -gt : 大きい(greater than)
- -ge : 以上(greater than or equal)
- -lt : 小さい(less tahn)
- -le : 以下(less than or equal)
#09 条件式を評価してみよう (2)
文字列の条件式
- = : 等しいか
- != : 等しくないか
ファイル(ディレクトリ)の条件式
- -nt : 新しいか(newer than)
- -ot : 古いか(older than)
- -e : 存在するか(exist)
- -d : ディレクトリか(directory)
論理演算子
- -a : and
- -o : or
- ! : not
例
# ファイルの条件式 # カレントディレクトリにhoge.shが存在するかどうか test -e hoge.sh; echo $? #論理演算子 # 1は1と同じでかつ2は2と同じか # (1 = 1) and (2=2) test 1 -eq 1 -a 2 -eq 2; echo $?
実行結果
$ ./hoge.sh 0 0