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/
入出力の切替え
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>