こんにちわ! 現在LinuC102学習中の@darry6335 です。
今日はシェルスクリプトに関して学習しました。
###1.bashとは?
bashとはBourne Again Shellを略した名前で、シェルの一種である。コマンド言語でシェルスクリプトの作成が可能で、大抵のLinuxディストリビューションに標準で入っている。他のシェルとしては、tcsh,zshなどがある。
###2.入力規則
1行目の宣言は、"#!/bin/bash"と記述する。(SHELLの実行ファイルのPATH)
スクリプトを解釈するシェルを指定。(シバンorシェバン)
シバンを記述しないと、bash機能は使用できない。
シバンを指定していないスクリプトに関しては、実行権限のあるユーザ、ないユーザで動作が異なる。
###3.コメントアウト
行頭に#を付けることで、スクリプトを無効化し、コメントと解釈される。
###4.変数
変数の宣言は、英数字かアンダーバーを用いて記述可能だが、数字から始まる変数の宣言はできない。
###4.1. 特殊変数
変数 | 表示するもの |
---|---|
$0 | ファイル名 |
$1...(連番) | 引数 |
$@ | 引数をspaceで区切って出力 |
$* | 引数をspaceで区切って出力 |
$# | 引数の数 |
$? | 直前の処理の成否 |
$$ | シェルのPID |
###5.改行コード
異なる改行コードは使用できない。
つまり、Linuxで作成したシェルスクリプトをWindowsで使い回しできないということ。
Windowsの改行コードは、CR+LF
Linuxの改行コードは、LF
###制御構文で指定できる条件式
###testコマンド
シェルスクリプトでは、testコマンドを使い条件式を評価することで
ファイルの有無や種類を判定したり数値や文字列を比較したりするコマンドで、真偽値を返す、bash内部コマンドである。
###ファイルやディレクトリの判定オプション
条件式 | 意味 |
---|---|
-f ファイル名 | ファイルが存在 |
-d ディレクトリ名 | ディレクトリが存在 |
-e ファイル/ディレクトリ | ファイル/ディレクトリが存在 |
-r ファイル/ディレクトリ | ファイル/ディレクトリが読み取り可能 |
###数値を判定する条件式
条件式 | 意味 |
---|---|
A -eq B | AとBが等しい |
A -ne B | AとBが等しくない |
A -it B | AがBより小さい |
A -le B | AがB以下 |
A -gt B | AがBより大きい |
A -ge B | AがB以上 |
###その他論理式での判定
条件式 | 意味 |
---|---|
!条件式 | NOT |
条件式1 -a 条件式2 | AND |
条件式1 -o 条件式2 | OR |
-n 文字列 | 文字列の長さが0ではない |
###変数にコマンドの実行結果を代入する書式
変数名=`コマンド`
変数名=$(コマンド)
###script記述ルール
1.処理の終わりは ;; を指定する(case文)
2.bash scriptの条件分岐では、構文のキーワードを逆にしてプログラムを終了させる。
・if~fi
・case~esac
##制御構文(条件分岐)
###【If文 書式】
#!/bin/bash
if 条件式
then
実行文1
else
実行文2
fi
###四則演算とcase文
exprコマンドを使用し、四則演算の結果を出力できる。
↓参考サイト
exprコマンドとは?? @IT参照
###【case文 書式】
#!/bin/bash
case 変数名 in
値1) 値1の時の処理;;
*) どの値にも合致しなかった場合の処理;;
esac
※case文の終わりには esac を指定する
##繰り返し構文
###【for文 書式】
#!/bin/bash
for 変数名 in
do
echo $変数名
done
###【while文 書式】
while 条件式
do
繰り返す処理
done
##関数の利用
function文を用いて関数を定義する
###【function文 書式】
fuction 関数名() { #functionは省略可能
処理
Return 値
}
#関数の呼び出し ()は不要
関数名 引数list
↓参考サイト
関数の使用方法
###スクリプトのデバッグ
bash実行時にオプションをを指定する
bash -v : 実行するコマンドを出力
bash -x : 実行するコマンドや変数の代入など、処理内容を出力
###シバンにオプション追加
-> それ以降は常にデバッグ情報を出力する
#!/bin/bash -x
###setコマンドのオプションで囲む
-> 部分的にデバッグを行える
set -x
i=0
set +x
###trapコマンドの利用
スクリプト内にtrapコマンドを記述することで
割り込みシグナルに対応する挙動を変更することができる。
###【trapコマンド】
シグナルを受け取った際の動作を設定、表示する
-> Ctrl+C,Z などキードードからの割り込みシグナルを受け取った時の動作を、
trapコマンドで変更することができる。
参考 trapコマンドとは?
参考 Linuxのシグナルとは?