2012-04-25 4 views
2

このスクリプトでは、パラメータとして渡されたファイルがASCIIファイルかzipファイルかどうかをテストしたい場合は、asciiエコー "ascii" echo "zip"、そうでない場合は "ERROR"をエコーし​​ます。ここでシェルスクリプト内のファイル形式をテストする

は、ファイル/ grepのコマンドを実行し、そのリターンコードをチェックする方法が適切ではない瞬間

filetype = file $1 
isAscii=`file $1 | grep -i "ascii"` 
isZip=`file $1 | grep -i "zip"` 

if [ $isAscii -gt "0" ] then echo "ascii"; 
else if [ $isZip -gt "0" ] then echo "zip"; 
else echo "ERROR"; 
fi 
+0

ファイル*に* asciiまたはzipが含まれているかどうかを確認するのは間違いありませんが、これはファイルの種類を保証するものではありません。 –

+0

@Wayneどういう意味ですか? 'man file'はファイルの種類を決定します。 –

+0

@WayneWerner:いいえ、彼はファイルを見ているfile(1)プログラムを使っています。 –

答えて

2

fileコマンドの場合は、-b --mime-typeを試してください。

#!/bin/sh 
type file || exit 1 
for f; do 
    case $(file -b --mime-type "$f") in 
     text/plain) 
      printf "$f is ascii\n" 
      ;; 
     application/zip) 
      printf "$f is zip\n" 
      ;; 
     *) 
      printf "ERROR\n" 
      ;; 
    esac 
done 
3

で私が持っているのです。あなたは変数にファイル/ grepをパイプラインのテキスト出力をキャプチャして、文字列として数0と比較して、前に

if file "$1" | grep -i ascii; then 
    echo ascii 
fi 

:あなたはこのような何かをする必要があります。上記のコマンドの実際の戻り値を使用します。これは必要なものです。

+0

grepの出力が意図した出力と混ざらないように、/ dev/nullに送るべきです: 'if file" $ 1 "| grep -i ascii>/dev/null; ' –

+1

@RSamuelKlatchko:grep --quietを使うことをお勧めします。 –

+0

非常にありがとうございますそれを解決する:) – josephino

関連する問題