在case语句中使用grep命令



所以我有这个脚本,我试图确定文件的类型并采取相应的行动,我使用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输出捕获到一个变量中,当然可以这样做;但是要避免您的私有变量使用大写。

默认情况下,bzip2unzip会修改它们的输入文件。也许你想避免这种情况?

case $(file "$arg") in
*bzip2*) bzip2 -dc <"$arg";;
*Zip*)   unzip -p "$arg";;
esac |
grep "stuff"

还要注意shell是如何方便地让您从条件语句中导出(和导入(条件语句的。

相关内容

  • 没有找到相关文章

最新更新