2006年06月23日
コンピュータリテラシ

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

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

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

入出力の切替え

YHM_Shell3( file 標準出力をfileに切替える。fileの内容が上書きされる。 >>file 標準出力をfileに切替える。fileの末尾に追加される。 >&file 標準出力と標準エラーをfileに切替える。 p1 | p2 p1 の標準出力をパイプに、p2 の標準入力をパイプに p1 |& p2 p1 の標準出力と標準エラーをパイプに、p2 の標準入力をパイプに p1 <引数

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

シェル変数

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

環境変数

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

コメント

YHM_Shell3(` # コメント ')

引用符、エスケープ

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

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

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

if文

YHM_Shell3(`dnl 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 ')

ループ

YHM_Shell3(`dnl while( ... ) cmd end foreach var (w1 w2 w3 w4) cmd $var end ')

switch 文

YHM_Shell3(`dnl switch( string ) case label: breaksw default: breaksw endsw ')

その他

YHM_Shell3(`dnl goto label ... label: exit 数 終了 exec cmd fork しないで自分自身で cmd を実行。戻ってこない。 source script fork しないで自分自身で script を実行。終了後、戻ってくる。 ')

条件、式

if 文、while 文の条件式、「@ var =式」の式としては、次のようなものが使 える。 YHM_Shell3(`dnl + - * / % << >> 計算(数) < > <= >= 比較(数) == != 比較(数、文字列) =~ !~ パタンマッチ。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言語と逆なので注意。) ( ) 式のグループ化 ')

実行構造

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

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

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

foreach

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

計算

数の計算が必要な時には、csh, tcsh では、@ を使う。 YHM_Shell3(``dnl % @ x = 1 + 2 % echo $x 3 % '')

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

YHM_Shell3(`dnl % set x="" % foreach i (a b c) foreach? YHM_User(set x="$x""$i")YHM_CR() foreach? YHM_User(end)YHM_CR() % echo $x abc % ')

コマンドの実行結果

if 文では、コマンドが成功したか失敗したかを調べることができる。 exit(0); した時に、成功(true)、それ以外の時に失敗(false) と扱う。 YHM_Shell3(`dnl % if ( { /bin/true } ) echo ok ok % echo $status 0 % if ( { /bin/false } ) echo ok % echo $status 1 % ') コマンドの実行直後に変数 $status を見てもわかる。
Last updated: 2006/06/23 01:52:54
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>