所以我有这个脚本,我试图确定文件的类型并采取相应的行动,我使用file命令和grep来确定特定字符串的文件类型,例如,如果文件被压缩,然后解压缩,如果它被gzipped,然后gunzip,我想添加很多不同类型的文件。
我正在尝试用case
替换if
语句,但无法计算
我的脚本如下:
##$arg is the file itself
TYPE="$(file $arg)"
if [[ $(echo $TYPE|grep "bzip2") ]] ; then
bunzip2 $arg
elif [[ $(echo $TYPE|grep "Zip") ]] ; then
unzip $arg
fi
感谢所有提供帮助的人:(
一般语法为
case expr in
pattern) action;;
other) otheraction;;
*) default action --optional;;
esac
因此,对于您的代码段,
case $(file "$arg") in
*bzip2*) bunzip2 "$arg";;
*Zip*) unzip "$arg";;
esac
如果您想首先将file
输出捕获到一个变量中,当然可以这样做;但是要避免您的私有变量使用大写。
默认情况下,bzip2
和unzip
会修改它们的输入文件。也许你想避免这种情况?
case $(file "$arg") in
*bzip2*) bzip2 -dc <"$arg";;
*Zip*) unzip -p "$arg";;
esac |
grep "stuff"
还要注意shell是如何方便地让您从条件语句中导出(和导入(条件语句的。