出席

シェルプログラミング

  • sh(SuperText 上巻 第40章 p.800)
  • cshプログラミング入門(SuperText 上巻 第39章 p.776)

シェルスクリプト

  • スクリプト:いくつかの処理手順をまとめて記述したプログラム
  • シェルスクリプト:シェル上で動作するスクリプトです.すなわち,一連のコマンドをファイル化し,一括実行できるようにしたものと考えられます.
  • tcsh:入力用として便利.ブログラミング言語として,一部欠陥がある.>   入力用に推奨
  • sh (bash):UNIX標準装備の古いシェルだが,プログラミング言語として十分 > シェルスクリプトに推奨

書式

  • 1行目に
    #!(シェルのパス)
    を記述することにより,シェルコマンドとして認識される.

csh系

#!/bin/csh -f
Command
Command

sh系

#!/bin/sh
Command
Command

hello.sh

#!/bin/sh
echo 'Hello world!'

test.sh

#!/bin/sh
ls
cal

実行法

sh hello.sh 

実行権をあたえると,直接ファイルをコマンドとして起動できる

chmod a+x hello.sh
./hello.sh

制御構造(sh系)

if コマンド1
then
   # コマンド1が正常終了した時に実行するコード
else
   # コマンド1がエラー終了した時に実行するコード
fi
while コマンド2
do
   # コマンド2が正常終了している間,実行するコード
done
for シェル変数名 in 値1 値2 値3…
do
   # 値1,値2,値3に関して実行するコード
done
case 文字列 in
パターン1)
   # 文字列がパターン1に合致するときに
   # 実行されるコード
   ;;
パターン2|パターン3)
   # 文字列がパターン2、あるいは3に
   # 合致するときに実行されるコード
   ;;
esac
# パターンとしてはワイルドカードの特殊文字が使える

変数

$n	nは数字であり、$0はシェルスクリプト名、以降$1、$2・・・は第1引数、第2引数・・・である。第10引数以降は${10}、${11}・・・で参照する。
$#	与えられた引数の個数
$@	$0以外の全ての引数("$@"のようにダブルクォーテーションで囲んだ場合"$1" "$2" ・・・"のように個別に展開される。)
$*	$0以外の全ての引数("$@"のようにダブルクォーテーションで囲んだ場合"$1 $2 ・・・"のように展開される。)
$?	最後に実行したコマンドの終了ステータス
$!	最後に実行したバックグラウンドコマンドのPID
$$	シェルのPID
$-	現在のオプションフラグ

例:test2.sh

#!/bin/sh
echo $#
echo $0 $1 $2 $3
echo $@
echo $*
echo $?
echo $!
echo $$
echo $-

シェルスクリプト

  • menu.sh

    pre>

    #!/bin/sh while true do

           echo "---------------"
           echo "メニュー"
           echo " 1. 日付"
           echo " 2. カレンダー"
           echo " 0. 終了"
           echo -n " command? > "
           read  request
           case $request in
               1)
                   date
                   ;;
               2)
                   cal
                   ;;
               0)
                   echo menu fished.
                   exit
                   ;;
               *)
                   echo "Wrong number!"
                   ;;
           esac

    done

    /pre>

csh系

  • menu.ch

    pre>

    #!/bin/tcsh

while(1)

	echo "---------------"
	echo "メニュー"
	echo " 1. 日付"
	echo " 2. カレンダー"
	echo " 0. 終了"
	echo -n " command? > "
	set request=$<
	switch( $request )
	    case 1:
		date
		breaksw
	    case 2:
		cal
		breaksw
	    case 0:
	    	echo menu fished.
		exit
	    default:
		echo "Wrong number!"
		breaksw
	endsw

end

/pre>

  • mkhtml.ch

    pre>

    #!/usr/local/bin/tcsh

    # カレントディレクトリ上にあるPNGファイルの一覧をHTMLファイルに書き出す set htmlfile=test.html

echo "<html>" > $htmlfile echo "<head>" >> $htmlfile echo "<title>PNG file list on $cwd</title>" >> $htmlfile echo "<body>" >> $htmlfile

foreach num (*.png)

	echo -n "<img src=$num>" >> $htmlfile
	echo "<caption>$num</caption>" >> $htmlfile
	echo "<hr>" >> $htmlfile

end

echo "</body>" >> $htmlfile echo "</html>" >> $htmlfile

/pre>

関連演習

  • 関連する演習課題がソフトウェア基礎演習I/05/第10回にて出題されますから注意してください.なおこの課題は,ソフトウェア基礎演習Iの課題として出題されています.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-06-20 (木) 14:45:26 (2344d)