csh

概要
演算子 算術演算子 文字列関係演算子 ファイル検査演算子
機能 履歴機能 バックグランドジョブ 組込みコマンド
シェル変数 シェル変数 定義済シェル変数 シェル引数
変数修飾子

文字 メタ文字 コマンド起動用特殊文字 引用符
入出力 入力 入出力切り替え ヒアドキュメント
環境 オプション 環境変数 環境ファイル
その他 デバッグ エラー対処法
FAQ 練習問題



概要

csh はコマンドインタープリタであり、かつプログラム言語です。 csh にはいくつかの組み込みコマンドがあります。

csh はプログラム言語として、 いくつかの構文とそこで使う変数から構成されています。 csh で書かれたプログラムは、シェルスクリプトとよばれ、 実行権限を付与すると、そのまま実行することができます。 簡単な特徴を以下に列挙します。

  1. 変数名は英字ではじまり、英数と _ を続けられます。
    変数を参照する場合は変数名の前に $ をつけます。 字句解析時、最長語句を取り出そうとするので、明示的に変数を分離したい場合は、 変数名を {} で囲みます。

    変数を定数定義で使う場合は全てを大文字で、 変数として使う場合は全てを小文字で、名前を付けましょう。 変数は配列でもよく、その添え字は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

  2. 基本的に数値も文字扱いです。計算に使うときは @ を使います。
    このとき、すべての単語の間には空白が必要です。
  3. 関数を作ったり使ったりはできません。
  4. スクリプト名は文を構成する単語 (while if switch など) と同じではいけません。

文種 書式 例および特記事項
行頭 #!/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




ヒアドキュメント(here document)

シェルは << を見つけると、それに続く文字列 END-OF-FILE を EOF マークとして覚えます。 そして、その直後の行から次の EOF マークの直前の行までを コマンド grep への入力に結合します。 ヒアドキュメントの EOF マークは 1行単位で評価されますから EOFマークには途中のデータ行に出現しない文字 列を選ばなければなりません。

grep $1 << END-OF-FILE
JAL:(03)5489-1111 
JAS:(03)3438-1155 
ANA:(03)3272-1212 
      ... 
KLM:(03)3216-0771 
END-OF-FILE

オプション

オプション意      味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 = '"'のように = の前後に空白を入れる




注意すべき項目

  1. パラメータが必要な場合は、必ずパラメータの有無をチェックし、 必要なメッセージを出力しましょう。(使用法)
  2. 終了コードを必ず設定しましょう。
  3. 複雑なスクリプトの場合は、機能、引数、 エラーコードなどのコメントを書きましょう。

csh スクリプト例

  1. 引数配列
  2. 変数配列
  3. 文字列のリスト
  4. シェル変数を生成
  5. CNTL.C を入れたら終了する
  6. ログイン時にバックアップ
  7. コマンドの有無チェック
  8. find 結果のエラーは不要
  9. 出力を表示しながらファイルに書く

項目コ   ー   ド結果
引数配列

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




FAQ

  1. 文中に特殊文字を入れるには?
  2. 一時作業ファイル名をユニークにするには?
  3. stderr と stdout の出力を分けるには?
  4. 出力をなくすには?
  5. alias 定義に引数を渡すには?
  6. シェルスクリプトの戻り値を返すには?

  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
    

  2. 一時作業ファイル名をユニークにするには?

    $$ は自スクリプトの PID ですので、これを付ければ、 ユニークなファイル名を取得できます。

    set TMP_FILE = /tmp/out.$$
    

  3. stderr と stdout の出力を分けるには?

    例えば stderr をファイル1に stdout をファイル2にするには、

    ( find . -name core > /tmp/file2 ) >& /tmp/file1
    

  4. 出力をなくすには?

    /dev/null に出力すると、全出力はなくなります。

    find . -name core  >& /dev/null
    

  5. alias 定義に引数を渡すには?

    \!* は引数と置き換わります。

    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
    

  6. シェルスクリプトの戻り値を返すには?

    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
    




練習問題

  1. sjis ディレクトリに sjis コードのファイルが複数あります。 これらを全て EUC に変換して euc ディレクトリに入れます。
    何回実行しても、正常に動作するようにします。 solaris では日本語のコード変換ツールは、sjtoeuc(1) です。

  2. エラー対処法の3は、どうすれば正しく動くでしょうか?

  3. sqlplus system/manager で以下のビューを取得するスクリプトを作ります。

  4. あるディレクトリに SQL.0 から SQL.20 があります。 これを SQL.1 から SQL.21 に変えてください。

  5. netstat -s コマンドを指定した回数、1分ごとに実行し、 その結果を netstat_s.out に書き出すプログラムを作りなさい。

【 関連項目 】

csh(1)