我对 C Shell 非常陌生。我正在尝试从命令行读取文件,并确定它是否是 zip 文件、.txt、符号链接、管道或其他文件(“未知”)。
然后我想根据类型执行一些指令。例如,如果它是一个 txt 文件,则打印有关它的信息(“它是一个文本文件”)并给出其大小。
这是我到目前为止所得到的:
!/bin/csh
if ( "echo ${1} | cut -d'.' -f2" == "zip" ) then
echo $1 is a zip file
else
echo sorry, $1 is not a zip file
endif
答案1
用于switch
分析文件名。
switch ($1)
case *.zip:
echo "$1 is a zip file"
breaksw
default:
echo "${1}: not supported"
endsw
要分析文件类型,请解析 的输出ls
:第一个字符是文件类型。
switch ("`ls -logd "$1"`")
case d*:
echo "$1 is a directory"
breaksw
# ...
endsw
事实上您可能正在寻找file
命令,它分析文件的内容以确定它包含的数据格式(并报告非常规文件的文件类型)。
file -- "$1"
答案2
使用反引号来计算内部命令的结果,这与其他 shell 相同。所以,而不是
"echo ${1} | cut -d'.' -f2"
这是一个肯定不等于字符串“zip”的字符串,请使用
`echo ${1} | cut -d'.' -f2`
它评估内部命令并返回结果。