コンテンツにスキップ

8. シェルとシェルスクリプト

8.1. シェル環境のカスタマイズ

8.1.1. 環境変数とシェル変数

Linuxの変数には環境変数シェル変数がある。 特徴は以下の通り。

変数 説明 代表的な
環境変数 シェル自身とそのシェルから起動されるすべてのプロセスに引き継がれる PATH, HOMEなど
シェル変数 そのシェル内のみで有効な変数 -

詳しくはコチラ

8.1.2. 環境変数/シェル変数を表示するコマンド

env/printenvコマンド

環境変数を表示するコマンド。 printenvは環境変数名を指定可能。

env

printenv HOME

setコマンド

環境変数とシェル変数を表示するコマンド。

set <オプション>
オプション 説明
-o 一覧表示
-a 自動的にエクスポート
--help ヘルプ
-o / +o オプション有効/無効化
ignoreeof Ctrl + D のキー入力でログアウトしないようにする
noclobber 既存ファイルへの上書き出力 ( リダイレクト ) を禁止する
noglob メタキャラクタを使用したファイル名の展開を無効化する

8.1.3. エイリアス

エイリアスはコマンドに別名を付けたりコマンドとそのオプションをひとまとめにできたりするもの

ailias/unailiasコマンド

エイリアスの作成と削除ができるコマンド

ailias <エイリアス名>='<コマンド>'

unailias <エイリアス名>

8.1.4. シェル関数

シェル関数はbashシェル上で利用できる独自の関数を定義できるもの。 シェル関数はエイリアスと異なり条件分岐などを含む複雑なコマンドの組み合わせの場合に使用する。

functionコマンド

シェル上で利用できるシェル関数を定義するコマンド。

function <関数名>() { <コマンド> }

unsetコマンド

シェル関数を削除するコマンド。

unset <関数名>

declareコマンド

設定されたシェル関数一覧を見るコマンド。

declare -F

8.1.5. bashの設定ファイル

シェルの起動時と終了時に「環境変数、エイリアス、シェル関数」などの定義を自動的に行うための設定ファイルには以下のようなものがある。 /etc/以下は全ユーザーから参照される。

ファイル 説明
/etc/profile ログイン時に実行
/etc/bash.bashrc bash起動時に実行される
/etc/bashrc ~/.bashrcから参照
~/.bash_profile ログイン時に実行
~/.bash_login ~/.bash_profileがない場合、ログイン時に実行
~/.profile ~/.bash_profileも~/.bash_loginもない場合、ログイン時に実行
~/.bashrc bash起動時に実行
~/.bash_logout ログアウト時に実行

Bash

/etc/profile, /etc/profile.dディレクトリ以下

これらのファイルには基本的な環境変数などが設定される。

/etc/bash.bashrc

全ユーザから参照される。一部ディストリビューションにはない。

~/.bash_profile, ~/.bash_login, ~/.profile

ユーザごとの環境変数の設定等を行える。

~/.bashrc

対話型シェルが起動されるたびに実行される。全ユーザ設定用。

~/.bash_logout

ログインシェル終了時に実行される。

8.2. シェルスクリプト

8.2.1. シェルスクリプトとは

シェルスクリプトは特定の処理を行うために作成したプログラをシェルプログラムで記述したもの。 Bashの場合は冒頭に以下を記述する。拡張子は.sh

なおシェルスクリプトは実行したユーザの権限で動作する。 以下はシバンと呼ばれる記述。

#!/bin/bash

なおファイルの改行コードはLinuxでLF、WindowsでCRLFとなるので注意する。

8.2.2. シェルスクリプトの実行コマンド

sourceコマンド

元のbashでシェルスクリプトを実行するコマンド。

source restart.sh

bashコマンド

新しいbashサブシェルが立ち上がってシェルスクリプトを実行するコマンド。

bash start.sh

.を付けて実行

sourceと同じく元のbashでシェルスクリプトを実行するコマンド。

. start.sh

./を付けて実行

./start.sh

8.2.3. シェルスクリプトの特殊変数

スクリプトに渡す引数で特殊なものには以下のものがある。

変数名 説明
$0 シェルスクリプトファイル名
$1 1番目の引数。※ 2番目の引数の場合は $2 と指定する。
$$ 現在のシェルのプロセス番号
$# コマンドラインに与えられた引数の数
$? シェルが最後に実行したコマンドの終了ステータス ( 0 = 正常終了、1 = 異常終了、それ以外はエラー )
$@ 全ての引数 ( 区切りはスペース )
$* 全ての引数 ( 区切りは環境変数IFSで指定したもの )

8.2.4. シェルスクリプトに関するコマンド

readコマンド

readコマンドはユーザーからの入力値を受け取り変数に格納してそれを次の処理で使用したい場合に使用するコマンド。

#!/bin/bash
echo -n " あなたのお名前を教えてください "
read yourname
echo " こんにちは、$yourname さん "

testコマンド

testコマンドは条件分岐が行われる条件式の真偽を判断してその結果を返すために使用されるコマンド。

test <条件式>

seqコマンド

シェルスクリプトで数値を1つずつ増加または減少させる処理を行うために使用するコマンド。

seq <開始数値> <終了数値>
seq <終了数値>

8.2.5. シェルスクリプトの制御構文

if文

if test -f data.txt
 then
    echo "data.txtファイルは存在します"
 else
    echo "data.txtファイルは存在しません"
fi

for文

for i in $(seq 1 10)
do
    echo $i
done

while文

i=1
while test $i -le 10
do
    echo $i
    let i=i+1
done