文 | 概要 | 文 | |
---|---|---|---|
演算子 | 算術演算子 | 文字列関係演算子 | ファイル検査演算子 |
機能 | 履歴機能 | バックグランドジョブ | 組込みコマンド |
シェル変数 | シェル変数 | 定義済シェル変数 | シェル引数 |
変数修飾子 | |||
文字 | メタ文字 | コマンド起動用特殊文字 | 引用符 |
入出力 | 入力 | 入出力切り替え | ヒアドキュメント |
環境 | オプション | 環境変数 | 環境ファイル |
その他 | デバッグ | エラー対処法 | 例 |
FAQ | 練習問題 | |
csh はコマンドインタープリタであり、かつプログラム言語です。 csh にはいくつかの組み込みコマンドがあります。
csh はプログラム言語として、 いくつかの構文とそこで使う変数から構成されています。 csh で書かれたプログラムは、シェルスクリプトとよばれ、 実行権限を付与すると、そのまま実行することができます。 簡単な特徴を以下に列挙します。
変数を定数定義で使う場合は全てを大文字で、 変数として使う場合は全てを小文字で、名前を付けましょう。 変数は配列でもよく、その添え字は1からはじまり、使用できる次元は1次元のみです。 配列の1要素に値を設定する場合は、すでに存在する要素でなければなりません。
変数に値を設定するには、以下のいずれかの構文が可能です。
= の前後には空白が必要です。
set 変数名 = 値 set 変数名 = "値" set 変数名 = '値' set 配列名 = ("値1" "値2" "値3" "値4" "値5" "値6") # 初期化 set 配列名[添え字] = '値3' # 変更
set val = "12345" set val_default = "abcde" echo "Value of val_default .... $val_default" echo "Value of val +_default .... ${val}_default"
実行結果
Value of val_default .... abcde Value of val +_default .... 12345_default
文種 | 書式 | 例および特記事項 |
---|---|---|
行頭 | #!/bin/csh -f | ~/.cshrc を実行しないので高速に実行できます #! はファイルのマジック番号を設定します。 |
コメント | # コメント | # This is a comment. |
継続行 | 行末に \ | echo aaaaaaaa \ bbbb |
変数に代入 | set VAR = 10 | set osver = `uname -r | sed 's/\.//' | awk '{ print $1*10 }'` |
選択文 | if (式) コマンド | if ($#argv != 1) exit 10 |
if (式) then コマンド群 else コマンド群 endif |
if ($#argv != 1) then echo " Usage : xx2eucall sj/jis" exit 10 else DO SOMETHING .... endif | |
switch (str) case str1: コマンド群 breaksw : default: コマンド群 breaksw endsw |
set OSNAME = `uname` switch ($OSNAME) case "SunOS": # OS=solaris setenv LANG ja breaksw case "HP-UX": # OS=HP-UX case "AIX": # OS=AIX setenv LANG ja_JP.eucJP breaksw case "Linux": # OS=Linux setenv LANG japanese.euc breaksw default: echo " Unknown OS" breaksw endsw echo "LANG=$LANG" | |
繰り返し文 | foreach var (wordlist) コマンド群 end |
foreach AWK (nawk gawk awk) $AWK '{print}' < /dev/null >& /dev/null if (! $status ) then goto disp endif end echo "Can't found awk Please set PATH or install awk" disp: echo $AWK |
while (式) コマンド群 end |
set DIR = $HOME while ($#argv) set FILE = $argv[1] set FNAME = {$FILE} echo "copy $FNAME to $DIR" cp $FNAME $DIR shift end | |
shift 配列変数名 | 変数の値を1つ左に移動させます 変数を指定しないときは argv に作用します | |
制御移行文 | break | 最も内側のループから抜けます |
continue | 最も内側のループの次の繰り返しへ実行を移します | |
goto ラベル | ラベルに分岐します | |
exit(式) | 式の値は $status に設定されます | |
現シェル として実行 |
source スクリプト名 | alias/setenv を現シェルで有効にできます |
![]() |
![]() |
記法 | 意 味 | 例:@ と変数の間および演算子の前後には空白が必要 | cnt(cnt=6) (num=10) |
---|---|---|---|
= | 式の値を変数に代入 | @ cnt = 6 | 6 |
+= | 式の値を変数に加算 | @ cnt += 2 | 8 |
-= | 式の値を変数に減算 | @ cnt -= 5 | 1 |
*= | 式の値を変数に乗算 | @ cnt *= 8 | 48 |
/= | 変数を式の値で割算 | @ cnt /= 4 | 1 |
++ | 式の値に 1 を加える | @ cnt ++ | 7 |
-- | 式の値に 1 を引く | @ cnt -- | 5 |
+ | 加算 | @ cnt = $num + 4 | 14 |
- | 減算 | @ cnt = $num - 5 | 5 |
* | 乗算 | @ cnt = $num * 10 | 100 |
/ | 割算 | @ cnt = $num / 6 | 1 |
% | 剰余 | @ cnt = $num % 3 | 1 |
>> | 右シフト | @ cnt = ($num >> 2) | 2 |
<< | 左シフト | @ cnt = ($num << 2) | 80 |
~ | 1 の補数 | @ cnt = ~$num | -11 |
! | 論理否定 | @ cnt = !$num | 0 |
| | ビット毎の or | @ cnt = ($num | 7) | 15 |
^ | ビット毎の exclusive or | @ cnt = ($num ^ 7) | 13 |
& | ビット毎の and | @ cnt = ($num & 6) | 2 |
|| | 論理和 | @ cnt = ($num>8 || $num <4) | 1 |
&& | 論理積 | @ cnt = ($num>4 && $num <8) | 0 |
== | 等しい | if ( $cnt == 5) | 0 |
!= | 等しくない | if ( $cnt != 5) | 1 |
> | より大きい | if ( $cnt > 5) | 1 |
>= | 以上 | if ( $cnt >= 5) | 1 |
< | より小さい | if ( $cnt < 5) | 0 |
<= | 以下 | if ( $cnt <= 5) | 0 |
![]() |
![]() |
記法 | 意味 | 例 | 説明 |
---|---|---|---|
== | 文字列比較 | if ( $XXX == "end") then | end と同じ? |
!= | 文字列比較 | if ( $XXX != "end") then | end でない? |
=~ | パターン照合 | if ( $XXX =~ [a-z]*) then | 始めが小文字? |
!~ | パターン照合 | if ( $XXX !~ [A-Z]*) then | 始めが大文字でない? |
![]() |
![]() |
演算子 | 意 味 | 例 |
---|---|---|
-d file | ファイルはディレクトリ | if (-d $FL_NAME) then |
-e file | ファイルは存在する | if (-e $FL_NAME) then |
-f file | ファイルは普通のファイル | if (-f $FL_NAME) then |
-o file | ユーザはファイルの所有者 | if (-o $FL_NAME) then |
-r file | ファイルをユーザが読める | if (-r $FL_NAME) then |
-w file | ファイルをユーザが書ける | if (-w $FL_NAME) then |
-x file | ファイルをユーザが実行できる | if (-x $FL_NAME) then |
-z file | ファイルの長さは0 | if (-z $FL_NAME) then |
![]() |
![]() |
コマンド | 意 味 | 例 |
---|---|---|
!! | 直前のコマンドの実行 | !! |
!N(N:履歴番号) | N 番目のコマンドの実行 | !6 |
!コマンド | 一番最近のコマンドの実行 | !make |
![]() |
![]() |
コマンド | 意 味 |
---|---|
stty tostop | 端末出力の抑制 |
stty -tostop | 端末出力の抑制解除 |
![]() |
![]() |
コマンド | 説明と記法 | 例 |
---|---|---|
alias | コマンドに別名を割当てます alias 名前 "定義" |
alias a alias alias fnd "(find . -name \!* >/dev/tty) >& /dev/null" alias datecmd 'date +"%y%m%d"' |
bg | 指定ジョブをバックグラウンドで実行します bg %ジョブ番号 |
bg %2 |
cd chdir |
ディレクトリを移動します cd ディレクトリ名 chdir ディレクトリ名 |
cd /home/taka chdir alias |
dirs | ディレクトリスタックを表示します dirs |
dirs -l |
echo | 標準出力に書きます echo "文字列" |
echo "a alias" |
eval | 引数をコマンドとして実行します eval 引数 |
eval datecmd |
exec | コマンドを実行してセッションを終ります exec コマンド |
exec javac a.java |
exit | 式値を返して、セッションを終ります exit 式 |
exit 0 |
fg | 指定ジョブをフォアグラウンドにします fg %ジョブ番号 |
fg %2 |
history | 履歴を表示します history N |
history 20 |
jobs | ジョブリストを表示します jobs |
jobs |
kill | ジョブを終了させます kill %N |
kill %20 |
limit | プロセスのリソース制限 limit coredumpsize 0 |
limit coredumpsize 0 |
logout | セッションを終ります logout |
logout |
onintr | 割り込み時の動作を制御します onintr LABEL |
onintr end_prc |
rehash | 内部ハッシュ表の再計算 rehash |
rehash |
setenv | 環境変数の設定 setenv VAR VALUE |
setenv 20 |
stop | ジョブの停止 stop %N |
stop %20 |
source | 現在のセッションに反映する source FILE_NAME |
source .aliases |
unalias | 別名を無効化 unalias ALIAS_NAME |
unalias lc |
unsetenv | 環境変数の無効化 unsetenv ENV_NAME |
unsetenv LANG |
![]() |
![]() |
意 味 | 記法 | 例 |
---|---|---|
変数名 | [a-zA-Z][a-zA-Z0-9_]* | aaa,_aaa,_aaa_bbb : OK aa.,aa[,aaa/,aaa] : NG |
変数の定義 | set 変数名 = 値 set 配列変数名 = ( 値リスト ) set 配列変数名[配列の添字] = 値 配列の添字は 1 オリジン |
set d = `date` echo $d[1] |
変数の参照 | ${ 変数名 } ただし {} は省略可能 | ${HOME},$HOME |
シェル変数名 | 意 味 | 既定値 |
---|---|---|
ignoreeof | EOF 文字を無視する。^D を入力しても logout しない。 logout コマンドを使う |
unset |
noclobber | 指定したファイルが既にあると上書きできない | unset |
noglob | メタ文字によるファイル名展開をしない(?,*,~) | unset |
prompt | プロンプト文字列を設定する。 | % |
status | 直前に起動したコマンドの終了コードを設定 | 0:成功 |
verbose | おしゃべりモードで、展開後のコマンドを表示する。 | unset |
![]() |
![]() |
シェル引数と配列変数は、以下と同様の機能があります。
argv を配列変数名で置き換えることが可能です。
記法 | 意 味 |
---|---|
$#argv | 引数の数 |
$argv[*] | 全引数 |
$argv | 全引数 |
$* | 全引数 |
$argv[1-n] | 引数 1 から n まで |
$argv[n] | 引数 n (1<= n <= $#argv) |
$1 $2 ... $9 | 引数 1,2,...,9 |
$0 | 引数 0 コマンド名 |
$argv[$#argv] | 最後の引数 |
![]() |
![]() |
記法 | 意 味 | 例: set A = /usr/local/src/tcsh.c |
---|---|---|
$A:r | 基本部分 | /usr/local/src/tcsh |
$A:h | 先頭部分 | /usr/local/src |
$A:t | 末尾部分 | tcsh.c |
$A:e | 拡張部分 | c |
$A:gr | 基本部分 | /usr/local/src/tcsh |
$A:gh | 先頭部分 | /usr/local/src |
$A:gt | 末尾部分 | tcsh.c |
$A:q | 全部 | /usr/local/src/tcsh.c |
$A:x | 全部 | /usr/local/src/tcsh.c |
![]() |
![]() |
メタ文字 | 意 味 | 例 |
---|---|---|
$ | 変数識別子 | $HOME,${HOME} |
<,>,&,! | 入出力の切換え | echo $HOME < /tmp/out |
!,^ | 履歴 | !vi |
$$ | 起動中のシェルのプロセス番号 | set out=/tmp/$$.out |
; | コマンド区切り | cd;pwd |
() | コマンドグループ | (cd; make) |
`コマンド` | コマンド置き換え | set file = `ls` |
& | バックグラウンドジョブ | tst & |
\,'," | 文字をエスケープする | echo '$HOME' |
\ | 文字をエスケープする | echo \$HOME |
\ | 継続行であることを示す(前に空白が必要) | XXXXXXX \ |
*,?,[,],,{,},|,~,- | ファイル名展開(文字としたい場合は set noglob) | ls t?.* |
![]() |
![]() |
特殊文字 | 意 味 | 例 |
---|---|---|
; | コマンドを区切る | cd XXX;pwd |
() | コマンドをグループにまとめる | (ls >/dev/tty) >& /dev/null |
| | stdout を stdin にパイプする | ls | more |
|& | stdout と stderr を stdin にパイプする | ls |& echo |
&& | 前コマンドが成功したら次を実行する | make && run |
|| | 前コマンドが失敗したら次を実行する | make >& out || cat out |
& | バックグランドで実行する | make & |
!* | コマンド行の引数を受け渡す | ls \!* |
引用符 | 意 味 | 例 |
---|---|---|
' | この引用符で囲まれた文字列中のメタ文字は無視します | echo '$HOME' |
" | この引用符で囲まれた文字列中の $ ` \ 以外のメタ文字は無視します | echo "$HOME" |
` | この引用符で囲まれた文字列をコマンドとして実行します () | ; 等も使えます |
echo `ls -l` |
set variable = $< variable に標準入力の値が設定されます
文字 | 意 味 | 例 |
---|---|---|
< | stdin | |
> | stdout | ls -l > $FILE |
>& | stdout and stderr | ls -l <& $FILE |
>! | stdout (ignore noclobber) | ls -l >! $FILE |
>&! | stdout and stderr (ignore noclobber) | ls -l >&! $FILE |
>> | stdout (append) | ls -l >> $FILE |
>>& | stdout and stderr (append) | ls -l >>& $FILE |
>>! | stdout append (ignore noclobber) | ls -l >>! $FILE |
<< str | 行の先頭に str が現れるまで入力行を読む | |
(XXX >/dev/tty) >& /dev/null | stdout は端末へ、stderr は破棄 | (find . -name XXX>/dev/tty)>& /dev/null |
![]() |
![]() |
シェルは << を見つけると、それに続く文字列 END-OF-FILE を EOF マークとして覚えます。 そして、その直後の行から次の EOF マークの直前の行までを コマンド grep への入力に結合します。 ヒアドキュメントの EOF マークは 1行単位で評価されますから EOFマークには途中のデータ行に出現しない文字 列を選ばなければなりません。
JAL:(03)5489-1111 JAS:(03)3438-1155 ANA:(03)3272-1212 ... KLM:(03)3216-0771 |
オプション | 意 味 | debug |
---|---|---|
-f | ~/.cshrc のコマンドの検索も実行もしない | |
-n | コマンドの構文解析はするが、実行はしない | |
-v | 履歴展開後のコマンド入力をエコーする | * |
-x | 変数展開後、実行前のコマンドをエコーする | * |
コマンド | 例 |
---|---|
setenv 変数名 値 | setenv LANG ja |
項目 | ファイル名 |
---|---|
ログイン時 | .cshrc -> .login |
C シェル実行時 | .cshrc |
終了時 | .logout |
履歴 | .history |
![]() |
![]() |
次のモードで実行することで、出力を得られます。
また echo することで、変数値を見ることができます。
オプション | ファイル名 |
---|---|
-n | 検査するだけで、実行はしない |
-v | おしゃべりモード:実行を echo する |
-x | 展開を echo する |
![]() |
![]() |
No | 誤りコード | エラーメッセージと理由 |
---|---|---|
1 | alias lu 'ls -u' time lu |
lu: コマンドが見つかりません。 0.0u 0.0s 0:00 0% 0+0k 0+0io 0pf+0w alias は行頭のコマンドにのみ有効です(time) |
2 | setenv JAVA_HOME /usr/java1.1 setenv CLASSPATH $JAVA_HOME/lib/classes.zip setenv CLASSPATH $CLASSPATH:$HOME/java/jar/gun.jar |
変数構文です。 $CLASSPATH に続く : は区切りコードとして解釈されません。 従って明確に変数を区切る必要があります。 setenv CLASSPATH ${CLASSPATH}:$HOME/java/jar/gun.jar |
3 | set STR = "Bill asked, \"How's tricks?\"" |
不整合 - ' " の中の " はエスケープしません。 また?はメタ文字ですので、特別な対処が必要です。 |
4 | set STR = " This \ and that." echo $STR echo "$STR" |
This and that. 不整合 - " 2つ目の例ですが " の中の \ は継続行としては処理されません |
5 | @ a = 4/2 echo $a |
@: 数値形式が正しくありません。 演算子の前後には空白が必要です |
7 | set DOUBLE ='"' |
set: 構文エラー set DOUBLE = '"'のように = の前後に空白を入れる |
![]() |
![]() |
項目 | コ ー ド | 結果 |
---|---|---|
引数配列 t_arg |
#!/bin/csh -f echo '$argv[*] ... ' $argv[*] echo '$argv ... ' $argv echo '$* ... ' $* echo '$#argv ... ' $#argv echo '$argv[1-$#argv] ... ' $argv[1-$#argv] echo '$0 ... ' $0 echo '$1 ... ' $1 echo "" echo "Argument lists ....... " while ($#argv) set ARG = $argv[1] echo $ARG shift end exit 0 |
ozzy-16 07/22 9:38am] t_arg a1 a2 a3 $argv[*] ... a1 a2 a3 $argv ... a1 a2 a3 $* ... a1 a2 a3 $#argv ... 3 $argv[1-$#argv] ... a1 a2 a3 $0 ... /home16/taka/csh/t_arg $1 ... a1 Argument lists ....... a1 a2 a3 |
変数配列 t_vars |
#!/bin/csh -f set VARS = ('Vars1' 'Vars2' 'Vars3' 'Vars4' 'Vars5' 'Vars6') echo '$VARS[*] ... ' $VARS[*] echo '$VARS ... ' $VARS echo '$#VARS ... ' $#VARS echo '$VARS[1] ... ' $VARS[1] echo '$VARS[2] ... ' $VARS[2] echo "VARS lists .... $#VARS" while ($#VARS) set ARG = $VARS[1] echo $ARG shift VARS end exit 0 |
ozzy-15 07/04 3:03pm] t_vars $VARS[*] ... Vars1 Vars2 Vars3 Vars4 Vars5 Vars6 $VARS ... Vars1 Vars2 Vars3 Vars4 Vars5 Vars6 $#VARS ... 6 $VARS[1] ... Vars1 $VARS[2] ... Vars2 VARS lists .... 6 Vars1 Vars2 Vars3 Vars4 Vars5 Vars6 |
文字列のリスト t_ppp |
#!/bin/csh -f set USAGE = "Usage : $0 8/16/24" if ( $#argv != 1) then echo $USAGE exit 2 endif set P8 = "00 01 02 03" set P16 = "10 11 12 13" set P24 = "20 21 22 23" switch($1) case "8": set PALNO = " $P8 " breaksw case "16": set PALNO = " $P16 " breaksw case "24": set PALNO = " $P24 " breaksw default: echo $USAGE exit 3 endsw foreach PPP ( $PALNO ) echo $PPP end exit 0 |
ozzy-15 06/13 4:13pm] t_ppp 8 00 01 02 03 ozzy-16 06/13 4:13pm] t_ppp 16 10 11 12 13 ozzy-17 06/13 4:13pm] t_ppp 24 20 21 22 23 ozzy-19 06/13 4:13pm] t_ppp 20 Usage : t_ppp 8/16/24 Exit 3 |
シェル変数を表示 t_env |
#!/bin/csh -f set ENV_LST = "SID BASE HOME" foreach TAIL ( $ENV_LST ) set NAME = "ORACLE_${TAIL}" echo `env|grep $NAME` end |
ozzy-14 06/21 4:07pm] t_env ORACLE_SID=ora816 ORACLE_BASE=/home12/ora816/app/oracle ORACLE_HOME=/home12/ora816/app/oracle/product/8.1.6 |
>CNTL.C を入れたら終了する t_exit |
#!/bin/csh -f onintr end_proc set OUT=ps.log set PROCNM=ltest set TM_SLEEP=1 if ( -e $OUT ) then rm $OUT endif while (1) ps -efl |grep $PROCNM|grep -v grep >> $OUT sleep $TM_SLEEP end end_proc: ls -l $OUT |
onintr は CNTL.C 入力でどこに飛ぶかを指定します。 無限ループを終了させる手段として有効です |
ログイン時にバックアップ t_backup |
#!/bin/csh -f unsetenv LANG set BACK_DIR = "backup" set DATE = `date +"%y_%m_%d"` set BACKUP = "awk csh ksh perl" set DO_BACKUP = `echo $DATE` cd $HOME # make backup dir if (! -e ${BACK_DIR}/$DO_BACKUP) then touch ${BACK_DIR}/$DO_BACKUP echo "Backup ......." foreach BK_DIR ( $BACKUP ) tar cvf ${BACK_DIR}/${BK_DIR}.tar ${BK_DIR} >/dev/null end ls -l $BACK_DIR endif exit 0 |
Backup ....... 合計 16320 -rw-r--r-- 1 taka dba 0 6月 16日 11:59 05_06_16 -rw-r--r-- 1 taka dba 0 6月 17日 08:16 05_06_17 -rw-r--r-- 1 taka dba 3993600 6月 17日 08:16 awk.tar -rw-r--r-- 1 taka dba 471040 6月 17日 08:16 csh.tar -rw-r--r-- 1 taka dba 675840 6月 17日 08:16 ksh.tar -rw-r--r-- 1 taka dba 3164160 6月 17日 08:16 perl.tar |
コマンドの有無チェック t_lsof |
#!/bin/csh -f set OUT = /tmp/out_out set LSOF = lsof # check to exist of lsof which $LSOF >& /dev/null if ( $status ) then echo "Please install or set PATH of $LSOF" exit 1 endif $LSOF > $OUT ls -l $OUT exit 0 |
ozzy-7 06/14 2:24pm] t_lsof -rw-r--r-- 1 taka dba 539137 6月 14日 14:24 /tmp/out_out |
find の結果のエラーは不要 | alias fnd "(find . -name \!* >/dev/tty) >& /dev/null" |
816ozzy-11 4:29pm] fnd core ./app/oracle/product/8.1.6/oem_webstage/oracle/core ./app/oracle/product/8.1.6/dbs/core_29083/core ./app/oracle/product/8.1.6/dbs/core_29085/core ./app/oracle/product/8.1.6/dbs/core_29089/core ./app/oracle/product/8.1.6/dbs/core_29087/core |
出力を表示しながらファイルに書く t_fnd |
#!/bin/csh -f set USAGE = "Usage : $0 FIND_FILE_NAME" if ($#argv != 1) then echo $USAGE exit 1 endif set OUT = /tmp/out_out find . -name $1 | tee -a $OUT exit 0 |
ozzy-66 06/14 3:06pm] t_fnd core ozzy-67 06/14 3:10pm] echo $status 0 ozzy-68 06/14 3:10pm] t_fnd Usage : t_fnd FIND_FILE_NAME ozzy-69 06/14 3:11pm] echo $status 1 |
![]() |
![]() |
#!/bin/csh -f set ACCT=system/manager set PRG="sqlplus $ACCT" set DOLL='$' set DUBL='"' set SQL1="set pagesize 1000" set SQL2="select s.sid, s.PROGRAM,s.LOGON_TIME ${DUBL}START${DUBL}, \ s.STATUS, s.PROCESS, s.SERVER, t.value \ from v${DOLL}session s, v${DOLL}sesstat t, v${DOLL}statname n, \ v${DOLL}process p \ where s.paddr = p.addr(+) \ and s.sid = t.sid and t.STATISTIC# = n.STATISTIC# \ and n.name = 'execute count' \ order by logon_time, p.pid;" $PRG << SQL_STMT $SQL1 $SQL2 SQL_STMT
$$ は自スクリプトの PID ですので、これを付ければ、 ユニークなファイル名を取得できます。
set TMP_FILE = /tmp/out.$$
例えば stderr をファイル1に stdout をファイル2にするには、
( find . -name core > /tmp/file2 ) >& /tmp/file1
/dev/null に出力すると、全出力はなくなります。
find . -name core >& /dev/null
\!* は引数と置き換わります。
ozzy-21 06/14 9:50am] alias ldir 'ls -l \!* |grep "^d"' ozzy-22 06/14 9:54am] ldir csh drwxr-xr-x 2 taka dba 512 4月 12日 2001年 DirList drwxr-xr-x 2 taka dba 512 12月 27日 2001年 FAQ drwxr-xr-x 2 taka dba 1536 4月 1日 2003年 bak drwxr-xr-x 2 taka dba 512 12月 11日 2001年 html drwxr-xr-x 2 taka dba 512 10月 26日 2001年 tmp
exit 式 を実行することで、status に式値が返ります。
ozzy-66 06/14 3:06pm] t_fnd core ozzy-67 06/14 3:10pm] echo $status 0 ozzy-68 06/14 3:10pm] t_fnd Usage : t_fnd FIND_FILE_NAME ozzy-69 06/14 3:11pm] echo $status 1
![]() |
![]() |
![]() |
![]() |