シェルで変数に何かを代入するには、
set 変数名 = 値
で行なう。
変数名には英数字が使用できる。(頭文字は英字であること)
代入される値は数値、文字列の区別はない。(実際は、全て文字列として代入される)
C言語のように変数宣言(int x; など)の必要もない。
変数はコマンドラインからでも使用できる。
そして、代入された値を参照する時には、
$変数名
とする。
# set x = 123 # set y = 55.32 # set str = "this is strings." # echo $x 123 # echo $y 55.32 # echo $str this is strings.
シェルスクリプトを実行する時に、引数をとってくる方法として、
C言語における、main(int argc,char *argv[])
の argc, argv のようなものが存在する。
以前の docc.sh をこの変数を使って改良してみよう。
#!/bin/csh -f
vi $argv[1]
cc $argv[1]
a.out
ここで1行目におまじないをつけること。
すると、以下のようにいちいちdocc.shを書き換えなくてもファイル名を変えて実行できる。
# vi docc.sh < - 一度上のように書き直す # csh docc.sh tmp.c < - 今度はtmp.cをつけて実行 (ここでvi tmp.cが実行される) (viが終るとすぐにcc tmp.cが実行される) (cc tmp.cが終るとすぐにa.outが実行される) # csh docc.sh tmp2.c <- 今度はtmp2.cをつけて実行 (ここでvi tmp2.cが実行される) (viが終るとすぐにcc tmp2.cが実行される) (cc tmp2.cが終るとすぐにa.outが実行される)
じつは、このargvは配列になっていて、 $#argv は配列要素の個数を数えているだけである。