csh 入門 ---- 算術計算, 変数

csh で変数をもちいることはすでに set でわかりました。 まずここでは、数の演算を考える。

4.1 算術計算

数字の設定は、set の代わりに @ を使う。変数を数として使う時 は $ を使うのは 文字変数と同じ。

; (セミコロンを使うと 1 行に複数のコマンドが書ける。


#!/bin/csh     
#           4.1 算術計算 keisan 
#
@ i = 12
@ j = 14
@ k = $i + $j ; echo "和 =" $k
@ k = $j % $i ; echo "余り =" $k
@ k += 3    ; echo "k に 3 を足すと" $k

実行してみましょう。
% keisan
和 = 26
余り = 2
k に 3 を足すと 5
うまくいっていますね。この他の演算として、

+, - , * , / , %   : 和, 差, 積, 商, 余
+=, -=, *=, /=, %= : 左側の変数に 右側の変数を操作して左に代入 
++, --             : 1 足す、1 引く
<<, >>             : 左シフト, 右シフト
| , &              : bit or,  bit and
この演算は c 言語と同じです。c 言語に近い shell なので、 csh というわけです。

注意: csh script は整数しか扱えません。不動点小数を使いたい場合には perl scriptを使うと出来ます。

4.2 予約変数

あらかじめ予約されている変数が使えます。$< 入力は既に使いま した。環境変数 (printenv で表示される変数) は全て使えます。 また setenv で 環境変数を設定すると、その子プロセスは全て 変数は踏襲されます。(逆に上位のプロセスには波及しません。)
#!/bin/csh     
#           4.2 予約変数 yoyaku 
echo "こんにちは $USER さん。いま $PWD にいますね。"
echo "引数全体は $argv です。$* も同じで alias で良く使われます。"
echo "引数の数は $#argv です。"
echo "2 番目の引数は $argv[2] です。$2 でもあります。"
echo "コマンドの file 名は、$0 です。"
echo "1 番目 から 3 番目までの 引数は、$argv[1-3] と書かれます。"
# file の一部を取り出し使います。
set file = "/home/rsaito/tex/anzu.tex"
echo $file, $file:r, $file:h, $file:t, $file:e

実行結果を示します。上と比べれば、対応がわかると思います。
% yoyaku a b c d e
こんにちは rsaito さん。いま /home/rsaito/csh-nyuumon にいますね。
引数全体は a b c d e です。a b c d e も同じで alias で良く使われます。
引数の数は 5 です。
2 番目の引数は b です。b でもあります。
コマンドの file 名は、yoyaku です。
1 番目 から 3 番目までの 引数は、a b c と書かれます。
/home/rsaito/tex/anzu.tex, /home/rsaito/tex/anzu, /home/rsaito/tex, anzu.tex, tex
特殊な変数として、現在の process ID として $$ があります。こ れは、重なってはいけない file 名を作りたい場合に良く、 file.$$ として使います。こうすれば、file が重複してできる場 合は極めて少なくなります。

4.3 引用記号 'ABC', "ABC", `ABC`

3 つの引用記号は、シングルコーテーション、ダブルコーテーショ ン、バックコーテーション と呼ばれます。シングルコーテーショ ンではさむと、'$file' のような文字も変数でなく文字として扱われ ます。"$file" とすると、$file の中身を文字として扱います。 `command` とすると command を実行した結果を文字に引き継ぎま す。
#!/bin/csh     
#           4.3 引用記号 inyou
echo 'シングルコーテーションではさむと $USER のままです。'
echo "ダブルコーテーションではさむと $USER が代入されます。"
echo `who` "とすると who の結果がでます。"
echo "`who`" "と比べてみてください。"
echo " echo で シングルコーテーションやダブルコーテーション"
echo " を表示させるのは、結構難問です。試してみてください。"
実行結果を示します。
% inyou
シングルコーテーションではさむと $USER のままです。
ダブルコーテーションではさむと rsaito が代入されます。
rsaito tty1 Jul 6 21:01 rsaito ttyp0 Jul 6 21:01 (:0.0) とすると who の結果がでます。
rsaito   tty1     Jul  6 21:01 rsaito   ttyp0    Jul  6 21:01 (:0.0) と比べてみてください。
 echo で シングルコーテーションやダブルコーテーション
 を表示させるのは、結構難問です。試してみてください。

変数をうまく使うためには、実際に使っている スクリプトを見な がら、真似るのが良いと思います。
rsaito@ee.uec.ac.jp