シェルスクリプト

目次

シェルスクリプトとは?

参考になるページ

シェルスクリプト

シェルにおける一連のコマンド操作をプログラムとしてファイルに記録しておいて、あとで再現する(実行させる)ことができます。たとえば、以下のような手順でシェルスクリプトを作成します。

  1. テキストエディタで、以下の内容のファイルを作成する。
    #! /bin/sh
    echo "---start---"
    ps -aux | grep X
    echo "----end---"
  2. ファイルを、psxという名前で保存する。
  3. 次のようにタイプして、psxを実行可能にする。
    chmod 755 psx
  4. psxを実行する。どのようになりましたか?
    ./psx

つまり、以上のようにすると、コマンドラインで「./psx」と打つことで、「ps -aux | grep X」と打ったのと同じ効果が得られるようになります。このように、シェルでよく行う手順をあらかじめ記録しておくのがシェルスクリプトです。

なお、1行目の「#! /bin/sh」はシェルスクリプトを実行するシェルを指定するもので、必ずこのように書くようにしてください。

シェルスクリプトの文法

シェル変数

シェルスクリプトの中では(中でなくても)、変数を使うことができます。

制御構造

シェルスクリプトの中では、各種制御構造が使えます。

課題(シェルスクリプト)

【問1】 以下のような手順を実現するシェルスクリプトを作成し、(添付ファイルではなく)電子メールの本文に貼り付けて、アドレス「report@fig.ele.eng.tamagawa.ac.jp」まで提出してください。

  1. 画面に「I am an iMac!」と表示するシェルスクリプト。
    • 実行例
      $ ./imac        ← たとえば imac という名前のシェルスクリプトにした。 
      I am an iMac!   ← 実行結果。
    • ヒント: echo
  2. コマンド引数で指定したディレクトリに、C言語のソースファイルがあるか調べるシェルスクリプト。
    • 実行例
      $ ./findc prog  ← prog というディレクトリを調べる。
      prog/test1.c    ← 実行結果。見付かったファイルが列挙される。
      prog/test2.c
      prog/test3.c
    • ヒント: find, 引数の取り出し($1)
  3. キーボードからの入力を求め、それが「L」だったら「LEFT」、「R」だったら「RIGHT」と表示するシェルスクリプト。
    • 実行例
      $ ./asklr       ← シェルスクリプトの実行。
      Input L or R ?  ← 「L」か「R」を入力するように要求してくる。
      R               ← ユーザが「R」と入力。
      RIGHT           ← 結果表示。
    • ヒント: read, if
  4. コマンドの引数で与えられた複数の文字列をたてに表示するシェルスクリプト。
    • 実行例
      $ ./vecho yamada takeuchi nakamura shiozawa gogo!
      yamada
      takeuchi
      nakamura
      shiozawa
      gogo!
    • ヒント: for, 引数の取り出し($*)

【問2】 以下のような動作をするシェルスクリプトを作成しなさい。

  1. コマンド引数で与えられたファイルを、誰からも読めなくするシェルスクリプト。
    • 実行例
      $ ./secret himitsu.txt
  2. C言語のソースファイル(拡張子が .c のファイル)を全部つなげて、1つの大きなテキストファイルにするシェルスクリプト。
    • 実行例(リダイレクト(>)が不要にしてもよい)
      $ ./cmerge > cfiles.txt
  3. 「I am an iMac!」と表示するシェルスクリプトを改良して、自分のホスト名(コンピュータ名)を表示するシェルスクリプト。
    • 実行例
      $ ./hi
      Hi! My name is a01.cad.eng.tamagawa.ac.jp.
  4. ユーザが「stop」と入力するまで、時刻を表示し続けるシェルスクリプト。
    • 実行例
      $ ./dateloop                          ← シェルスクリプトを起動すると、
      2005年  5月 11日 水曜日 11:44:01 JST  ← 時刻を表示して入力待ちになる。
                                            ← ただ [Enter] を押したり、
      2005年  5月 11日 水曜日 11:44:05 JST
      aaaa                                  ← 適当な文字や、
      2005年  5月 11日 水曜日 11:44:36 JST
      123                                   ← 適当な数字を入れると続行する。
      2005年  5月 11日 水曜日 11:44:40 JST
      stop                                  ← 「stop」と入力すると終了する。
  5. コマンドラインで指定した月(複数)のカレンダを表示するシェルスクリプト。
    • 実行例
      $ ./mcal 4 5           ←コマンドの入力。4月と5月を指定。
           April 2005        ←以下、結果出力。4月と5月のカレンダー。
      Su Mo Tu We Th Fr Sa
                      1  2
       3  4  5  6  7  8  9
      10 11 12 13 14 15 16
      17 18 19 20 21 22 23
      24 25 26 27 28 29 30
      
            May 2005
      Su Mo Tu We Th Fr Sa
       1  2  3  4  5  6  7
       8  9 10 11 12 13 14
      15 16 17 18 19 20 21
      22 23 24 25 26 27 28
      29 30 31

【問3】 以下の言葉をすべて使って、UNIXのサーバについて簡潔に説明する文章を作成しなさい。その際、用語集のような箇条書きではなくて、教科書のようにつながった文章で書くようになさい。なお、無駄に長い文章(コピペ)を送りつけてくる者がいるが、文章は説明すべき内容にふさわしい簡潔な長さにまとめること。

以上


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-10-20 (木) 07:24:54