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 | |
~/.bashrc | bash起動時に実行 |
~/.bash_logout | ログアウト時に実行 |
/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