基本的には拾ってきたものばかりだけど、自分がわかりやすいようにまとめる。
何かあれば順次追加予定。
基本の基本
- 拡張子は
.sh - 1行目は
#!/bin/shとかく(おまじないみたいなもの) - 実行するには
./(ファイル名)もしくはsh (ファイル名)
基本コマンド
コメント
#以降はコメントとなる
入出力
readが入力、echoが出力
変数
変数名は半角英数字とアンダーバーが使える。
値代入には、=を前後空白なしで入れる。
型を記述せずにいきなりvar="変数"とか定義してよい。
が、定数宣言する時は、readonlyを変数名の前に書く。
変数へのアクセスは、変数名の前に$を入れるか、$を入れた後に{}で囲む。
例えば、以下のようなシェルスクリプト(hello.sh)なら
#!/bin/sh # この行はコメントです echo "What's your name? " read NAME mes="Good luck!" echo "Hello, $NAME!" echo "$mes"
出力結果は以下のようになる(入力をKenとした場合)
$ ./hello.sh What's your name? Ken Hello, Ken! Good luck!
特殊変数・特殊文字
$0 スクリプト名
$1~9 引数。n番目の引数が$nとなる。
$# 引数の数
$? 直前実行したコマンドの終了値
特殊文字は\と併用。例:\*。
演算子
expr 数字 演算子 数字(変数に代入するなら両端を`で囲む必要あり)で計算できる
+、-、* 、/、%、=、==、!=、!はよくある意味でそのまま
気をつけるべきは以下
-gt >を表す
-le <を表す
-o or
-a and
-z 文字列が空ならTRUEを返す
-n 文字列に何か指定していればTRUEを返す
配列
ARRAY=(要素1 要素2 ‥)のように定義する。
n番目の要素を参照する時はARRAY[n]とすれば良い。
条件分岐・ループ
if文
if [ 条件式1 ]; then 実行文 elif [ 条件式2 ]; then 実行文 else 実行文 fi
for文
for 変数 in 範囲 do 実行文 done
while文
while [ 条件式 ] do 実行文 done
Switch文
case 変数名 in 条件・値1) 実行文 ;; 条件・値2) 実行文 ;; : esac
ループの時のお決まりbreakやcontinueも使える
関数
関数を定義するときは以下のようにする。
関数名 () {
実行文
}
関数を実行するときは関数名 引数で。関数名のあとに()はいらない
たとえば、以下の関数を実行するときはhello Alice Bobでいい
hello () {
echo "$1: Hello, $2!"
}
このとき、Alice: Hello, Bob!と表示されるはず。