cshスクリプトでよく使われる機能

					2007年06月22日
情報科学類 コンピュータリテラシ

                                       筑波大学 システム情報工学研究科 
                                       コンピュータサイエンス専攻, 電子・情報工学系
                                       新城 靖
                                       <yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2007/2007-06-22 /csh.html
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/

■cshスクリプトでよく使われる機能

入出力の切替え


<file		標準入力をfileに切替える。
>file		標準出力をfileに切替える。fileの内容が上書きされる。
>>file		標準出力をfileに切替える。fileの末尾に追加される。
>&file		標準出力と標準エラーをfileに切替える。
p1 | p2		p1 の標準出力をパイプに、p2 の標準入力をパイプに
p1 |& p2	p1 の標準出力と標準エラーをパイプに、p2 の標準入力をパイプに
p1 <<EOF	p1 の標準入力を、EOF という文字がが現れるで(here document)。
...
EOF

引数

$1 $2 $3 ...			n番目の引数
$argv[1] $argv[1] $argv[2] ...	n番目の引数
$0				プログラムの名前
$*				全引数
$#argv				引数の数
shift				引数のシフト

シェル変数

set var=value			シェル変数の設定
set var="value1 value2"		シェル変数の設定
set var=(value1 value2)		シェル変数の設定
unset var			シェル変数の解除
$var "$var" ${var} $var[index]	シェル変数の利用
$$				PID
@ var = 式			式の計算

環境変数

setenv var value		環境変数の設定
setenv var "value1 value2"	環境変数の設定
unsetenv var			環境変数の解除
$var "$var" ${var}		環境変数の利用

コメント


#		コメント

引用符、エスケープ


"..."		$、``、\を解釈した文字列
'...'		文字列
`...`		...にあるプログラムを実行
\c		cそのもの(\* や \")で使う
\改行		行末のキャンセルX(1行で書けない時の継続行)

ファイル名、文字列の展開

 *		0文字以上の任意の文字列
?		任意の1文字
[abc]		[]の中の任意の1文字
x{a,b,c}z	{}の中の展開。xaz xbz xczの意味。
~user		ユーザのホーム・ディレクトリ

if文

if( ... ) cmd

if( ... ) then
  cmd 
endif

if( ... ) then
  cmd
else
  cmd
endif

if( ... ) then
  cmd
else if( ... ) then
  cmd
else if( ... ) then
  cmd
else
  cmd
endif

ループ

while( ... )
   cmd
end

foreach var (w1 w2 w3 w4)
   cmd $var
end

switch 文

switch( string )
case label:
   breaksw
default:
   breaksw
endsw

その他

goto label
...
label:

exit 数			終了
exec cmd		fork しないで自分自身で cmd を実行。戻ってこない。
source script		fork しないで自分自身で script を実行。終了後、戻ってくる。

条件、式

if 文、while 文の条件式、「@ var = 式」の式としては、次のようなものが使 える。
+ - * / % << >>		計算(数)
< > <= >=		比較(数)
== !=			比較(数、文字列)
=~ !~			パタンマッチ。if( aaa =~ a*b ) のように使う。
~ &  |  ^ 		ビット演算
! && ||			論理演算
-r filename		読み込み可能
-w filename		書き込み可能
-x filename		実行可能
-e filename		ファイルが存在する
-f filename		普通のファイルが存在する
-d filename		ディレクトリが存在する
-z filename		ファイルが空(長さが zero)
-o filename		ファイルの owner の時1
{ command }		コマンドの実行。成功(exit(0))すれば 1。(C言語と逆なので注意。)
( )			式のグループ化

実行構造

p1 ; p2		p1 の実行後 p2 の実行。
p1 &		p1 のバックグランド実行(waitしない)
p1 && p2	p1 を実行して、失敗したら終わり。成功したら p2 を実行。
p1 || p2	p1 を実行して、成功したら終わり。失敗したら p2 を実行。

わかりにくいシェル変数と環境変数

シェル変数term		変更すると環境変数 TERM にも反映される。
シェル変数path		変更すると環境変数 PATH にも反映される。
シェル変数home		変更すると環境変数 HOME にも反映される。

foreach

foreach は、引数 $*、全てのファイル *、バック・クォート `` といっしょに使うことが多い。
% ls [←]
file1  file2  file3
% foreach f (*) [←]
foreach? echo $f[←]
foreach? end[←]
file1
file2
file3
% []
シェルスクリプトでは、foreach f(*) の代りに、foreach f ($*) を使えば引 数、`cat file` を使えば、file の内容つい てループを実行することができる。

計算

整数の計算が必要な時には、csh, tcsh では、@ を使う。
% @ x = 1 + 2 [←]
% echo $x [←]
3
% []

ループの中での文字列の結合

% set x="" [←]
% foreach i (a b c) [←]
foreach? set x="$x""$i"[←]
foreach? end[←]
% echo $x [←]
abc
% []

コマンドの実行結果

if 文では、コマンドが成功したか失敗したかを調べることができる。 exit(0); した時に、成功(true)、それ以外の時に失敗(false) と扱う。
% if ( { /usr/bin/true } ) echo ok [←]
ok
% if ( { /usr//bin/false } ) echo ok [←]
% []
コマンドの実行直後に変数 $status を見てもわかる。
% /usr/bin/true  [←]
% echo $status [←]
0
% /usr/bin/false [←]
% echo $status [←]
1
% []

Last updated: 2007/06/21 18:43:26
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>