LinuxOSについて#3
シェルプログラミングについて
シェル・スクリプトとは
シェル用に作成されたプログラムで、テキスト形式のファイルです。bashなどのシェルがテキスト形式のファイルを解釈して実行します。同じ手順を自動的に実行したい場合によく利用されます。
viを起動し、sample.shとして下記のスクリプトを記述。
例)#! /usr/bin/sh #shebangですね。 echo '現在の日付と時刻' date
起動する前に、テキストファイルへの権限を変更する必要があります。
chmod u+x ファイル名 #uはそのファイルの所有者、xは実行権限です。
オプション | 意味 |
---|---|
u | そのファイルの所有者 |
g | そのファイルの所有グループ |
o | その他の人 |
w | 書き込み権限 |
r | 読み込み権限 |
x | 実行権限 |
+ | 権限を与える |
- | 権限を拒否する |
実行方法は下記の3通り。
例1) $ sh sample #shコマンドを実行 例2) $ ./sample #ファイル名を直接入力して実行(相対パス名で実行) 例3) $ . ./sample #.コマンド(相対パス名で実行)。shコマンドと異なり、.コマンド自体が処理します
カレントディレクトリは、コマンド検索パスに設定されてないのでファイル名だけを入力しても実行されないのです。
構造化プログラミング
プログラミング言語を2種類に分類。
「手続き」は、処理をする内容の形態。構造化プログラミングの基本的な部品(基本構造)は,「連接(連続ですね)」,「選択」,「反復」の3つ。構文を以下にまとめました。
- if文
- case文
- while文
- until文
- for文
- break文
- exit文
例) #! /usr/bin/sh #shebang fname = file #変数代入 if test -f $fname #条件コマンドでtestコマンドを実行します。 then echo 'ファイル名' $fname 'は存在します' else echo 'ファイル名' $fname 'は存在しません' fi
上記の場合、-fオプションを渡しているので、ファイルが存在し、かつ通常ファイルの場合は真を返します。testコマンドで使用する条件は以下の通りです。
条件 | 内容 |
---|---|
-a ファイル名 | ファイル名が存在すれば真を返す |
-e ファイル名 | ファイル名が存在すれば真を返す |
-f ファイル名 | ファイル名が存在し、かつ通常ファイルならば真を返す |
-d ファイル名 | ファイル名が存在し、かつディレクトリならば真を返す |
-r ファイル名 | ファイル名が存在し、かつ読み出し可能ならば真を返す |
-w ファイル名 | ファイル名が存在し、かつ書き出し可能ならば真を返す |
-x ファイル名 | ファイル名が存在し、かつ実行可能ならば真を返す |
-n 文字列 | 文字列の長さが1以上ならば真を返す |
-z 文字列 | 文字の長さが0(空文字)ならば真を返す |
数値1 ne 数値2 | 数値1と数値2が等しくないならば真を返す |
数値1 gt 数値2 | 数値1が数値2より大きければ真を返す |
数値1 ge 数値2 | 数値1が数値2以上ならば真を返す |
数値1 lt 数値2 | 数値1が数値2より小さいならば真を返す |
数値1 le 数値2 | 数値1が数値2以下ならば真を返す |
スクリプトの引数
コマンド同様、スクリプトにも引数を渡すことは可能です。一度に参照できる引数は9つまでです。
$ ./example_arg abc def $# 2 #スクリプトに指定された引数の数は,シェル変数$#で参照 $0 ./example_arg #$0はスクリプト自身 $1 abc #$1は第1引数 $2 def #$2は第2引数 $* abc def #$*は指定した全ての引数をまとめたものを表示する
スクリプトshow_argに3つの引数を渡すプログラム
#! /usr/bin/sh echo '引数の数:' $# echo 'スクリプト名:' $0 echo echo '*** 方法1 ***' for arg in $@ #$*と同じだが、引数がそれぞれ別の文字列として扱われる do echo '引数:' $arg done echo echo '*** 方法2 ***' for arg in $* do echo '引数:' $1 shift #shiftは1回実行すると引数の番号を-1移動する done
スクリプト内で実行したコマンドの実行結果を引数とすることも可能なのです。 setコマンドとバッククウォート(``)を用います。
#! /usr/bin/sh echo "'who'コマンドの実行結果:" #特殊文字を使用しているので、ダブルクオテーション使用 who echo set `who` #バッククウォートとsetコマンドによって、whoコマンドの実行結果を引数に指定 for arg in $@ do echo '引数: ' $arg done
最後に
シェルスクリプトについては以上です。