LinuCレベル1合格教本で、勉強を進める。
今回は、第6章 シェルおよびスクリプトである。
シェル環境のカスタマイズ
シェル変数 | 環境変数 | |
設定 | 変数名=値 | export 変数名もしくはexport 変数名=値 |
一覧表示 | set | env |
削除 | unset 変数名 | unset 変数名 |
エイリアスの設定
- alias [エイリアス名='実行内容']:エイリアスの定義・確認
- エイリアスを無効にして実行するには、先頭に「\」を付ける。
- unalias エイリアス名:エイリアスの解除
コマンドの連続実行
- command1; command2:command1に続いてcommand2を常に実行
- command1 && command2:command1が成功したらcommand2を実行
- command1 || command2:command1が失敗したらcommand2を実行
bashシェルの環境設定
全員が参照 | ユーザー個別で参照 | |
ログイン時に読み込み | /etc/profile |
|
bash起動時に読み込み | /etc/bash.bashrc(CentOS) /etc/bashrc(Debian) | ~/.bashrc |
ログアウト時に読み込み | - | ~/.bash_logout |
- cat .bashrc:エイリアスの確認
- vi .bashrc:エイリアスの設定
- set -o:オプション設定の状況確認
- set +/-o オプション名:bashシェルのオプション指定
+:オプションを無効化
-:オプションを有効化
シェルスクリプト
シェルスクリプトの基本的な書き方
- シェルスクリプトを実行するときの構文
- bash シェルスクリプト名
- source シェルスクリプト名
- . シェルスクリプト名
- ./シェルスクリプト名
- スクリプトが格納されているディレクトリを$PATHに追加する
- $PATH=PATH:/ディレクトリ名
- シバン(shebang)行でシェルを指定。
- #!/bin/bash
変数の利用
主な特殊変数
変数 | 表示するもの |
$0 | スクリプトファイル名 |
$1,$2,... | 引数($1は1つめの引数、$2は2つめの引数...) |
$@ | 引数すべてをスペースで区切って出力 |
$* | 引数すべてを$IFSで指定された値で区切って出力 |
$# | 引数の数 |
$? | 直前の処理の成否(成功は0、失敗は0以外) |
$$ | シェルのPID |
制御構文の利用
主な制御構文
制御構文 | 意味 |
if | 条件分岐 |
case | 条件分岐(多岐分岐) |
for | 繰り返し(値リスト) |
while | 繰り返し(条件指定) |
- if文の書式
if 条件式1 then 条件式1に合致した場合の処理 elif 条件式2 条件式2に合致した場合の処理 else どの条件にも合致しなかった場合の処理 fi |
ファイル・ディレクトリに関する条件式
条件式 | 意味 |
-f ファイル名 | ファイルが存在 |
-d ディレクトリ名 | ディレクトリが存在 |
-e ファイル/ディレクトリ名 | ファイル/ディレクトリが存在 |
-r ファイル/ディレクトリ名 | ファイル/ディレクトリが読み取り可能 |
!条件式条件を満たさない(NOT) 条件式1 -a 条件式2条件1と条件2の両方を満たす(AND) 条件式1 -o 条件式2条件1と条件2のどちらかを満たす(OR) -n 文字列文字列の長さが0ではない(文字列が存在する)
数値の条件式
条件式 | 意味 |
値1 -eq 値2 | 値1と値2が等しい |
値1 -ne 値2 | 値1と値2が等しくない |
値1 -lt 値2 | 値1が値2より小さい(値2を含まない) |
値1 -le 値2 | 値1が値2以下(値2を含む) |
値1 -gt 値2 | 値1が値2より大きい(値2を含まない) |
値1 -ge 値2 | 値1が値2以上(値2を含む) |
その他論理式など
条件式 | 意味 |
!条件式 | 条件を満たさない(NOT) |
条件式1 -a 条件式2 | 条件1と条件2の両方を満たす(AND) |
条件式1 -o 条件式2 | 条件1と条件2のどちらかを満たす(OR) |
-n 文字列 | 文字列の長さが0ではない(文字列が存在する) |
- exit 終了ステータス:引数で指定した終了ステータスを格納し、その次の処理の際に利用できる。
四則演算とcase文の利用
- expr 数値1 演算子 数値2:四則演算の結果を出力!条件式条件を満たさない(NOT) 条件式1 -a 条件式2条件1と条件2の両方を満たす(AND) 条件式1 -o 条件式2条件1と条件2のどちらかを満たす(OR) -n 文字列文字列の長さが0ではない(文字列が存在する)
+:足し算、-:引き算、\*:掛け算、/:割り算、%:剰余 - case文の書式
case 変数名 in 値1) 値1だった場合の処理;; ・・・ *) どの値にも合致しなかった場合の処理;; esac |
繰り返し構文
- for文の書式
for 変数名 in 値1 値2・・・(値リスト) do 繰り返す処理 done |
- while文の書式
while 条件式 do 繰り返す処理 done |
関数の利用
- function文の書式
function 関数名() { 処理 } |
スクリプトのデバッグ
bash実行時にデバッグ情報を出力するオプション
オプション | 意味 |
-v | 実行するコマンドを出力 |
-x | 実行するコマンドや変数への代入など、処理内容を出力 |
- シバンの箇所にオプションを指定すると、それ以降は常にデバッグ情報を出力するようになる。
- setコマンドのオプションで囲む(set -x; ;set +x)ことにより、その部分だけデバッグ情報を出力することができる。
trapコマンドの利用
- trap "処理" シグナル:シグナルが送られた場合、指定した処理を実行
感想
内容として難しいわけではないが、結局覚えていられるかが問題。
あと、途中途中で出力メッセージに使われている英語が気になる。
- echo $0 is necessary 2 arguments
→ echo $0 requires 2 arguments - echo $2 is exists
→ echo $2 exists
※コメント投稿者のブログIDはブログ作成者のみに通知されます