シェルスクリプト その1
Completion requirements
シェルスクリプト1
入門
- シェルはコマンドインタプリタ機能だけでなく,プログラミング環境も提供する.
- B-シェルのシェルスクリプトが理解(少なくとも読むことが出来なければ),UNIX(Linux)システムの動きを理解することはできない.
- シェルスクリプトの基本は,コマンドを並べるだけ
- 次のファイル(bhello)をエディタで作成する.
#!/bin/sh
echo "Hello Shell Script"
date
ls
echo "Stop Shell Script"
- パーミッションを実行可能にし,実行してみる.
$ chmod u+x bhello
$ ./bhello
- プログラムの説明.
#!/bin/sh ファイルの先頭が #! の場合,このファイルを実行するプログラムが /bin/sh であることを示す.B-シェルの場合は省略可能.
echo "Hello Shell Script" Hello Shell Script と言う文字を標準出力に表示する.
date dateコマンドを実行する.
ls lsコマンドを実行する.
echo "Stop Shell Script" Stop Shell Script と言う文字を標準出力に表示する
演習1
- カレントディレクトリ以下の javaのソースファイルを見つけて表示する findjava コマンドを作りなさい.
- Hint:
- まず,キーボードからコマンドを入力して探す場合のコマンドを考える (find を使う)
- そのコマンドをそのままファイル(findjava)に記述する.
- chmod でファイルを実行可能にする
引数
- このままでは,毎回同じ動きをするプログラムしか作れない
- 次のファイル(args)をエディタで作成する.
#!/bin/sh
echo $*
echo $#
echo $1 $2 $3 $4 $5
echo $5 $4 $3 $2 $1 $0
- パーミッションを実行可能にし,実行してみる.
$ chmod u+x args
$ ./args ab cd ef g hi
- 上記のプログラムの引数 ab cd ef g hi をいろいろ替えて実行してみよう.
- 特殊変数の説明.
$* 引数全てを現す.
$# 引数の数を表す.
$0 コマンドそのものを表す.
$1 1番目の引数を現す.
$5 5番目の引数を現す.
演習2
- 指定したディレクトリ以下の javaのソースファイルを見つけて表示するように findjava を改良しなさい.
- 指定したファイルから,任意の部分(行で指定)を取り出すコマンド getlines を作りなさい.(Hint: head, tail)
$ ./getlines filename num1 num2
filename: ファイル名
num1 : どの行まで取り出すか
num2 : 取り出す行数.
例) $ ./getlines .bashrc 7 5 .bashrc の 7行目までの5行(つまり3-7行)を表示する.
- このコマンドの行指定は非常に分かりにくいので後で改良する.
変数
- シェルスクリプトの変数は全て文字列型である.
- 型宣言を行う必要はない.
- 変数に値を代入する場合,= の前後に空白を入れてはいけない. ○ ABC="XYZ" X ABC = "XYZ"
- 変数を評価する場合は,変数の先頭に $ を付ける.
- 変数を評価する場合,変数名の区切りがあいまいな場合は,変数名を {} で括る.
#!/bin/sh
A=ABC
B=A
C=$A
echo A
echo $A
echo $B
echo $C
#!/bin/sh
A="ABC"
ABC="XYZ"
echo $A
echo $ABC
echo ${A}BC
演習3
- 上記の2番目のシェルスクリプトで echo $AABC とした場合,どのような文字列が表示されますか?
- 上記の2番目のシェルスクリプトで 変数 A, ABC を使って ABCXYZ と表示させるにはどのような echo文を書けばよいでしょうか?
Last modified: Friday, 18 April 2014, 5:40 PM