初学Unix shell脚本问题

时间:2014-12-09 03:33:51

标签: shell unix

我正在完成一项两部分任务。首先,我们被要求创建一个名为fileType.sh的shell脚本,该脚本能够判断文件是“Windows ASCII”类型还是“其他内容”。我已完成该部分,并将显示下面应该做的事情的示例。

./fileType.sh ~cs252/Assignments/ftpAsst/d3.dat
 Windows ASCII
 ./fileType.sh /bin/cat
 Something else
 ./fileType.sh fileType.sh
 Something else 
 ./fileType.sh /usr/share/dict/words
 Something else

它有效,这里是fileType.sh脚本的代码

#!/bin/sh                                                                       
file="$1"
case $(file "$file") in
    *"ASCII text, with CRLF line terminators" )
        echo "Windows ASCII"
    ;;
    * )
        echo "Something else"
    ;;
esac

此任务的第二部分要求我们:在同一目录中,编写一个脚本checkFiles.sh,它可以从命令行获取多个文件路径,并对每个文件路径执行相同的分析,打印包含文件名的行,冒号,空格,然后是第1阶段的两个输出字符串之一,用于命令行中的每个文件。

例如,

./checkFiles.sh /usr/share/dict/words fileType.sh /home/cs252/Assignments/ftpAsst/d3.dat
/usr/share/dict/words: Something else
fileType.sh: Something else
/home/cs252/Assignments/ftpAsst/d3.dat: Windows ASCII 

这是我写的checkFiles.sh脚本。

#!/bin/sh                                                                     
for i  in "$@"; do

    echo $i":" "`sh ./fileType.sh`" 

done

这是我运行时的输出。

./checkFiles.sh /usr/share/dict/words fileType.sh /home/cs252/Assignments/ftpAsst/d3.dat
/usr/share/dict/words: Something else
fileType.sh: Something else
/home/cs252/Assignments/ftpAsst/d3.dat: Something else

我从我的hw检查器得到的错误是:运行时失败:./ checkFiles.sh'aardvark.cpp''bongo.dat''cat.dog.bak'。我要测试.ccp和.bak,看看它是否会炸毁我的程序或其他东西。有没有人有任何想法?我一直在研究这个问题,任何帮助都会很棒。谢谢!

更新:好的,所以重新运行这个命令后我得到:

./checkFiles.sh /home/cs252/Assignments/ftpAsst/d3.dat
/home/cs252/Assignments/ftpAsst/d3.dat: Something else

但这不正确!而不是说“别的东西”它应该说“Windows ASCII”。问题出在我的checkFiles.sh脚本中。现在改变一些事情,但这是我到目前为止的地方。

1 个答案:

答案 0 :(得分:1)

您的主力工作人员缺少您要分析的文件名。

#!/bin/sh
for i  in "$@"; do
    echo $i":" "$(sh ./fileType.sh $i)"
done

HTH