シェルスクリプトの基本
基本的には拾ってきたものばかりだけど、自分がわかりやすいようにまとめる。
何かあれば順次追加予定。
基本の基本
- 拡張子は
.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!
と表示されるはず。