シェルスクリプト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:
  1. まず,キーボードからコマンドを入力して探す場合のコマンドを考える (find を使う)
  2. そのコマンドをそのままファイル(findjava)に記述する.
  3. 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"   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