SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【LPIC102】シェルスクリプトの基本 LPICで学ぶLinux3

シェルスクリプトの基本

今回はやっとシェルスクリプトを扱います。
Linuxシステムを扱ったことがあれば、コマンド自体には詳しくなくてもシェルスクリプトの存在を知らない人は少ないでしょう。

シェルスクリプトは一連のコマンドライン作業(コマンド)を一括で実行できる仕組みになります。
見方によっては一種のプログラミングとみなすこともできます。

実行だけなら必須ではありませんが、本ブログでは他のファイルとの区別のためにシェルスクリプトのファイルには拡張子「.sh」をつけることとします。

シバン

試験的な重要度は低い可能性がありますが、基本事項として簡単に。
シェルスクリプトを初めて覗いたときにまず目につくのが先頭行の以下のような記述です。

#!/bin/bash

この行をシバン(またはシェバンとも言うらしい)と言います。
これはなくても動作はしますが、そのスクリプトを実行するインプリンタ言語(シェル)を明示的に定めている行になります。

なのでbash以外にも以下のような記述がされていることがあると思います。

#!/bin/sh
#!/bin/csh

なお、「sh」は最近のディストリビューションではbashのシンボリックリンクになっていることが多いようです。

[wantan@localhost lpic]$ ll /bin/sh
lrwxrwxrwx. 1 root root 4  73 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 1031 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 1031 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 113 23:22 .
drwx------. 7 wantan group1 159 113 23:22 ..
-rwxr-xr-x. 1 wantan group1 134 113 23:12 shell_test.sh
-rwxr-xr-x. 1 wantan group1  68 113 23:22 shell_test2.sh
0
ls: test.txt にアクセスできません: そのようなファイルやディレクトリはありません
2


ーーーーーーーーーーーーーーー

区切りが悪いので一旦ここまでで。

・前回(第二回)
www.wantanblog.com