シェルスクリプトの基本
今回はやっとシェルスクリプトを扱います。
Linuxシステムを扱ったことがあれば、コマンド自体には詳しくなくてもシェルスクリプトの存在を知らない人は少ないでしょう。
シェルスクリプトは一連のコマンドライン作業(コマンド)を一括で実行できる仕組みになります。
見方によっては一種のプログラミングとみなすこともできます。
実行だけなら必須ではありませんが、本ブログでは他のファイルとの区別のためにシェルスクリプトのファイルには拡張子「.sh」をつけることとします。
シバン
試験的な重要度は低い可能性がありますが、基本事項として簡単に。
シェルスクリプトを初めて覗いたときにまず目につくのが先頭行の以下のような記述です。
#!/bin/bash
この行をシバン(またはシェバンとも言うらしい)と言います。
これはなくても動作はしますが、そのスクリプトを実行するインプリンタ言語(シェル)を明示的に定めている行になります。
なのでbash以外にも以下のような記述がされていることがあると思います。
#!/bin/sh #!/bin/csh
なお、「sh」は最近のディストリビューションではbashのシンボリックリンクになっていることが多いようです。
[wantan@localhost lpic]$ ll /bin/sh lrwxrwxrwx. 1 root root 4 7月 3 08:53 /bin/sh -> bash
私は基本的には/bin/bashで統一しています。
まぁbash以外のシェルをほとんど知らないということもありますが
実行方法
シェルスクリプトの実行方法にはいくつかの方法があります。
実践的には一種覚えていればほとんど困ることはないような気もしますが、試験的には複数の方法を把握しておいた方がよいでしょう。
今回は事前にサンプルで作成したtest.shという実行ファイルを実行していきます。
■bash実行
bashコマンドで実行ファイルを指定することで実行できます。
こちらの実行方法では元bashの子プロセスが生成され、スクリプトはそちらで実行されます。
bash test.sh
また、シンボリックリンクが生成されている場合には「sh」でも同様の実行を行うことができます。
sh test.sh
■source実行
スクリプトの基本的な(よく知られている)実行方法の一つだと思います。
source test.sh
■. 実行
LPICでやるまでは知りませんでしたが「.」でも実行が可能なようです。
実態としてこちらはsourceの省略形です。
. test.sh
■./ 実行
この実行方法は、Linuxコマンドに詳しくない人にも広く知られている印象があります。
上記実行方法と大きな違いがあり、この方法ではファイルの実行権限を付与されている必要があります。
./test.sh
・実行権限の確認と付与の例
[wantan@localhost lpic]$ ll test.sh -rw-r--r--. 1 wantan group1 40 10月 31 03:04 test.sh [wantan@localhost lpic]$ ./test.sh bash: ./test.sh: 許可がありません [wantan@localhost lpic]$ chmod 755 ./test.sh [wantan@localhost lpic]$ ll test.sh -rwxr-xr-x. 1 wantan group1 40 10月 31 03:04 test.sh [wantan@localhost lpic]$ ./test.sh 15
スクリプトの引数
シェルスクリプトでは引数を取り扱うことができます。
スクリプト内では以下のような形式で記述を行います。
・引数の記述方法
変数 | 内容 |
---|---|
$0 | スクリプトのフルパスファイル名 |
$1 | 1番目の引数(N番目の引数) |
$# | 引数の数 |
$@ | 全ての引数 |
$? | 実行結果 |
引数をサンプルファイルを使用して確認してみます。
・shell_test.sh(サンプルファイル)
#!/bin/bash # ファイルフルパス echo $0 # 一つ目の引数 echo $1 # 引数の数 echo $# # 全ての引数 echo $@
・単一引数で実行
[wantan@localhost lpic2]$ ./shell_test.sh one ./shell_test.sh one 1 one
・複数の引数で実行
[wantan@localhost lpic2]$ ./shell_test.sh one 2 san ./shell_test.sh one 3 one 2 san
・実行結果の表示
「$?」を使用すると直前に実行したコマンド結果の表示を行うことができます。
コマンドの実行ごとに結果が格納され直すのでシェルスクリプト内ではエラーの制御などに使用される場合も多いと思います。
コマンドが正常終了した場合には「0」、異常終了した場合には0以外の数値が結果として返されます。
スクリプトの記述例。
#!/bin/bash # 通常 ls -la echo $? # エラー ls test.txt echo $?
実行結果。
[wantan@localhost lpic2]$ ./shell_test2.sh 合計 8 drwxr-xr-x. 2 wantan group1 49 11月 3 23:22 . drwx------. 7 wantan group1 159 11月 3 23:22 .. -rwxr-xr-x. 1 wantan group1 134 11月 3 23:12 shell_test.sh -rwxr-xr-x. 1 wantan group1 68 11月 3 23:22 shell_test2.sh 0 ls: test.txt にアクセスできません: そのようなファイルやディレクトリはありません 2
ーーーーーーーーーーーーーーー
区切りが悪いので一旦ここまでで。
・前回(第二回)
www.wantanblog.com
・次回(第四回)
www.wantanblog.com