【Linux】シェルスクリプトとは?使い方やコマンドの初心者向けまとめ

この記事からわかること
- Linux:シェルスクリプトとは?
- 基本的なコマンドの使い方と作成方法
- 意味やメリット
- 演算子やif文、比較式
index
[open]
\ アプリをリリースしました /
シェルスクリプトとは?
- コマンドをまとめて実行できる仕組み
- テキストファイルとして保存
- コマンドラインで読み込むと実行される
- 記述方法にはルールがある
- 変数やif文、ループ処理も実現可能
シェルスクリプトとはScript(台本)の意味からも連想できる通り、あらかじめコマンドを複数記述しておき一括で自動実行させることができる仕組みです。
シェルスクリプトはテキストファイルとして保管しておき、必要な時に実行して使用します。ログの記録や決まったファイルの移動、変数の定義、条件によるコマンドの分岐などシェルから操作できるさまざまな処理を一度の実行で行うことができるようになります。
例:スクリプトファイルの中身
コマンドを短縮できる簡易版にエイリアスがあるので併せて参照してみてください。
基本構文と記述ルール
- 拡張子は「.sh」
- ファイルの1行目に「#!/bin/sh」
- コメントアウトは「#」
厳密には拡張子に決まりはありませんが識別しやすいように「.sh」がおすすめされています。
スクリプトファイルの1行目には「#!」から始まる文を記述します。「シェルスクリプトだよ」という区別と実行するシェルを明示するための1行です。(「#!」はシェバン(shebang)と読みます。)
スクリプトファイル内でコメントを残すには行頭に「#」を記述します。
シェルスクリプトファイルを作成する
作成する方法はいろいろありますが今回はviエディタを使用して作成してみます。作成したい階層に移動したらvi
コマンドの引数にスクリプトファイル名を記述します。引数に指定したファイルがあればそのファイルを、なければ自動で作成してそのファイルを編集できる状態で開いてくれるのがvi
コマンドです。
実行すると以下のようになります。~
はその行に文字が何もないことを表しています。
この状態でi
キーを押しインサートモードに切り替えて中にスクリプトファイルの記述ルールに沿ってコマンドなどを記述します。
記述できたらESC
キーでインサートモードを解除し:wq
で保存してviエディタを閉じます。viエディタの詳しい使い方は以下の記事を参考にしてください。
シェルスクリプトを実行する方法
実行するにはsh
コマンドを実行するだけです。カレントディレクトリを作成時から移動していた場合は相対パスなどで指定してください。
実行するコマンド
実行するコマンド(bash)
使用しているシェルがbashの場合はbash
コマンドでも実行できます。
シェル変数を組み込んだ場合の実行コマンド
シェル変数をスクリプト内で使用したい場合はsource
コマンドを使います。(shやbashでは不可)
シェルスクリプト外で定義されたシェル変数を参照する場合は上記の通りですが、スクリプトファイル内で変数を定義、使用する際にはsource
コマンドでなくても問題ありません。
スクリプトファイル自体に実行権を付与する
スクリプトファイル自体に実行権を持たせればコマンドのように使用することもできます。
実行させるにはスクリプトファイルを入力してEnterを押すだけです。しかし絶対パスもしくは相対パスで指定する点に注意してください。
カレントディレクトリの配下にあっても./
が必要になります。そのまま実行しようとするとエラーが出るので注意してください。
環境変数である$PATH
にファイルまでのパスを登録しておけばよりコマンドらしく扱うこともできます。
実行時に引数を渡す
通常のコマンドのように実行時に引数を渡すことも可能です。渡された引数にアクセスするには$1
と言った$数字
形式の特殊な変数で参照します。(数字は引数の番号)例えば先ほどの第一引数に渡した「ame」を参照するにはファイル内で$1
とします。
特殊な意味を持つ変数
このようにスクリプトファイル内で特殊な意味を持つ変数が他にも存在します。
変数名 | 概要 |
---|---|
$0 | スクリプトファイル名 |
$1〜9 | 引数を参照 2番目なら$2、5番目なら$5 |
$? | 1つ前のコマンドの成否(成功なら0) |
$# | 引数の数 |
$* | 引数をまとめて参照 |
if文条件分岐
シェルスクリプトの中ではif文も使用できます。条件にはもちろん真偽値を返す式を記述します。構文は以下の通りです。
複数の条件や条件を満たさない場合
計算式
シェルスクリプトでは数値などの計算は`expr 計算式 `
に形式で記述します。expr
を書き忘れるとcommand not found
などと出るので注意してください。
変数を式に混ぜる
式に変数を混ぜる際は""
で囲みます。
使用できる演算子
演算子 | 意味 |
---|---|
+ | 足し算 |
- | 引き算 |
\* | 掛け算 |
/ | 割り算 |
% | あまり |
使用できる比較式
演算子 | 意味 |
---|---|
== (または-eq) | 等しい |
!= (または-ne) | 異なる |
-gt | >(より大きい) |
-lt | <(より小さい) |
-ge | =>(等しいか大きい) |
-le | =<(等しいか小さい) |
! | 否定 |
-a | AND |
-o | OR |
-z | 文字列が空か |
-n | 文字列に値があるか |
使用例
入力を受け入れる
read
コマンドを使えば実行時に入力値を組み込むことができます。引数に入力値を格納する変数を渡します。
実行すると入力待ちの状態になるので文字列を入力するとそれが出力(echo)されます。
ループ処理
条件が真の間ループ
条件が偽の間ループ
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。