シェルスクリプトに入門した。何回かに分けて備忘録を残しておく。
シェルスクリプトとは
複数の処理をまとめて行うときに使われる,OSのシェルが直接解釈・処理できるスクリプト。シェルスクリプトはシェルごとに独自の機能を使用して処理されるため,起動の方法や文法はシェルによって変わってくる。例えばUNIX系OSでは,シェルにシェルスクリプトを引数として渡して実行したり,シェルスクリプトの冒頭に起動プログラムを書き込んでシェルスクリプト自体を実行したりすると起動できる。
Hello Worldを書いてみる
文字列を出力する簡単なシェルスクリプトを書いてみる。以下,サンプルソースである。
#!/bin/sh
echo Hello World!
これをHelloWorld.shという名前でホームディレクトリに保存する。
次に,以下のコマンドをシェルに打ち込み,ファイルに実行権限を与える。
sudo chmod 777 HelloWorld.sh
以下のコマンドでHelloWorld.shを実行する。
./HelloWorld.sh
シェルにHello World!
と出力されれば,成功である。
1行目の#!/bin/sh
はシェルのプログラムのパスを指定している。シェルスクリプトを書く際には必ずこれを指定しなければならない。2行目のecho Hello World!
では,echo
コマンドによって,Hello World
を出力している。
変数の扱い方
シェルスクリプトの変数の扱い方は少し特殊なので,ここで紹介しておく。
変数には以下の2つのルールがある。
- 変数に代入を行う時は=の間にスペースを挟むことはできない。
- 変数を参照する際には$マークを付けなければいけない。
#!/bin/sh
x=1
echo $x
上記のサンプルコードでは変数xに1を代入し,変数xを出力している。
特殊な変数
これらの特殊な変数は参照専用で値を代入することはできない。
変数 | 意味 |
---|---|
$$ | シェル自身のPID(プロセスID) |
$! | シェルが最後に実行したバックグラウンドプロセスのPID |
$? | 最後に実行したコマンドの終了コード(戻り値) |
$- | setコマンドを使って設定したフラグの一覧 |
$* | 全引数リスト。”$*”のように「”」で囲んだ場合、”$1 $2 … $n” と全引数を一つにくっついた形で展開される。 |
$@ | 全引数リスト。”$@”のように「”」で囲んだ場合、”$1″ “$2″ … “$n” とそれぞれの引数を個別にダブルクォートで囲んで展開される。 |
$# | シェルに与えられた引数の個数 |
$0 | シェル自身のファイル名 |
$1~$n | シェルに与えられた引数の値。$1は第1引数、$2は第2引数…となる。 |
整数計算を行うにはexprコマンドを使用する
続いて,簡単な足し算を行うプログラムを作成する。
以下,サンプルコードである。
#!/bin/sh
x=1
x=`expr $x + 1`
echo $x
2行目で変数xに1を代入し,3行目で変数xに1を足し,4行目で変数xを出力している。実行結果は2と出力される。
3行目について詳しく解説すると,まずバッククォートによって,expr $x + 1
をコマンドとして評価し,コマンドの実行結果として置換が行われる。expr
は整数計算を行うコマンドなので,引数として$x + 1
を与えることで足し算を行う。ここで注意するべきことは,$x + 1
はあくまでもexprコマンドへの引数なので,適切にスペースを挟まなければいけないことである。
整数計算では以下の算術演算子を使用することが出来る。
演算子 | 意味 |
---|---|
a + b | aとbの和 |
a – b | aとbの差 |
a \* b | aとbの積 |
a / b | aとbの商 |
a % b | aとbの剰余 |
参考
UNIX & Linux コマンド・シェルスクリプト リファレンス
シェルの計算、処理結果を変数へ代入するサンプル – omoisanのmemo
if 文と test コマンド – UNIX & Linux コマンド・シェルスクリプト リファレンス
シェルスクリプトとは 【 shell script 】 – 意味/解説/説明/定義 : IT用語辞典
【 expr 】 整数計算を行う
【 コマンドの実行結果の置換 】