平成15年度 専門コア情報処理演習
y
(理学部 数理情報科学科い組 対象、塩田教官)
y
12月15日の教材(3)
前へ
/
戻る
/
次へ
□ コマンド実行結果の変数への代入
コマンドの実行結果を変数に入れて利用したいことがあります。 このためには
` (back quote, @ のキーのシフト)
でコマンドを囲んでやります。
次の例では date コマンドの結果を変数に入れています。
#!/bin/csh -f
# clk --- banner clock
while (1)
clear
set t = `date +%T`
banner "$t"
sleep 1
end
上のスクリプトを clk という名前で作成し実行してみましょう。
# で始まる行にはコメントを書くことができます。
date +%T が現在の時刻を表示するコマンドで、
banner でそれをバナーに仕立てています。
□ コマンド引数
シェルスクリプトには引数を渡してやることが出来ます。
次の例ではシェルスクリプトが3つの引数 $1,$2,$3 を受け取るようになっています。
#!/bin/csh
@ i = $2
while ( $i <= $3 )
echo $1$i
@ i++
end
上のスクリプトを seq という名前で作成し、
seq 03ss 1 41
を実行すると
03ss1
03ss2
03ss3
...
03ss41
という出力がされます。
$1, $2, $3 はそれぞれ1番目、2番目、3番目の引数を表します。
@ は計算式を表します。
「 @ i = $2 」は「変数 i に $2 の値を代入せよ」という命令です。 実行例では、最初の i の値は 1 になります。
「 echo "$1$i" 」で $1 の文字列と i の値を続けて出力しています。 実行例では、最初の出力は 03ss1 になります。
「 @ i++ 」で変数 i の値が 1 足され、
変数 i の値が $3 以下の間、この作業が繰り返されます。
本当は皆さんのユーザIDを書きたかったので、 001, 002, ... になるように書けば次のようになります。
#!/bin/csh
@ i = $2
while ( $i <= $3 )
@ p = $i / 100
@ q = ( $i / 10 ) % 10
@ r = $i % 10
echo $1$p$q$r
@ i++
end
このように seq を編集し直して
seq 03ss 1 41
を実行すればめでたく
03ss001
03ss002
03ss003
...
03ss041
となります。百の位 p、十の位 q、一の位 r をそれぞれ計算しているところがミソです。
算術式の中では、/ は商を、% は余りを計算します。
前へ
/
戻る
/
次へ