プロが教えるわが家の防犯対策術!

Cシェルを用いてディスク容量チェックのツールを作ろうとしています。

df -k で容量(capacity)が80%以上の場合、ファイルシステム名と容量を出力したいと考えています。

ちなみに色々調べていると、Bシェルでほぼ似たような処理を見つけました。(以下抜粋)

df -m | grep / | while read READDATA
do
RATE=`echo "${READDATA}" | awk -F' ' '{print $5}'`
RATE1=`echo "${RATE}" | awk -F'%' '{print $1}'`
VOL1=`echo "${READDATA}" | awk -F' ' '{print $6}'`
if [ $RATE1 -gt $CMAX ];then
echo '('${VOL1}') DISK_SPACE_ERROR ' "${RATE1}" %
cwc_secall.sh DISK_SPACE_${VOL1}
else
echo '('${VOL1}') DISK_SPACE_OK ' "${RATE1}" %
fi                
                  以上

Cシェルで上記のようにreadコマンドがうまく使えません。
長くなりましたが、どなたかご教授願います。

A 回答 (3件)

ど~せシェルスクリプトにするんでしょうから, 無理に Cシェル用に直す必要はないと思います.

    • good
    • 0
この回答へのお礼

今回はどうしてもCシェルで作る必要があったもので・・・。

お礼日時:2006/09/25 16:58

こんばんは。


コマンドの出力結果を1行ずつ処理するときは、こんな風にしてます。

# cat sample.csh

#!/bin/csh

foreach line ( "`/bin/df -k | egrep '^/'`" )
  set device = `echo ${line} | awk -F' ' '{print $1}'`
  set percent = `echo ${line} | awk -F' ' '{print $5}'`

  echo $device " : " $percent
end


# ./sample.csh
/dev/dsk/c0d0s0 : 63%
/devices : 0%
/dev/dsk/c0d0p0:boot : 15%
/usr/lib/libc/libc_hwcap1.so.1 : 63%
/dev/dsk/c0d0s1 : 10%
/dev/dsk/c0d0s5 : 32%
/export/home/hoge : 63%


あとは、$percentから「%」を削除して、if文で「80」と数値比較するだけです。
awkの中で削除するか、変数に取り出した後、sed等で削除してください。
    • good
    • 0
この回答へのお礼

教えていただいた方法でうまくいきました。
foreach文ってとても便利なんですね。
またよろしくお願いします☆

お礼日時:2006/09/25 16:54

こんばんは



cshでは、while readのような利用はできないみたいですね。下記が参考になるかもしれません。

参考1.
http://www.kiso.tsukuba.ac.jp/~makimura/text/nod …
参考2.
http://www.lab3.kuis.kyoto-u.ac.jp/misc/guide/ma …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
教えていただいたページを見たのですが
私には難しかったようです。
またよろしくお願いします。

お礼日時:2006/09/25 17:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!