2

我想要的是让这个脚本测试作为参数传递给它的文件是 ASCII 文件还是 zip 文件,如果它是 ascii 回显“ascii”,如果它是 zip 回显“zip”,否则回显“错误” .

这是我目前拥有的

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 
4

2 回答 2

3

您运行文件/grep 命令并检查其返回码的方式不正确。你需要做这样的事情:

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

之前,您将文件/grep 管道的文本输出捕获到变量中,然后将其与数字 0 作为字符串进行比较。上面将使用命令的实际返回值,这正是你所需要的。

于 2012-04-25T22:04:07.020 回答
2

对于file命令,请尝试-b --mime-type. 下面是一个过滤 MIME 类型的示例:

#!/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
于 2012-05-11T15:04:22.497 回答