初级unixshell脚本问题

初级unixshell脚本问题,shell,unix,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 So

我正在做一项分为两部分的作业。首先,我们被要求创建一个名为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
我从硬件检查器中得到的错误是:运行时失败:./checkFiles.sh“aardvark.cpp”“bongo.dat”“cat.dog.bak”。我将测试a.ccp和a.bak,看看它是否会破坏我的程序或其他东西。还有其他人有什么想法吗?我已经为此工作了相当长的一段时间,任何帮助都将是巨大的。谢谢

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

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

但这是不对的!与其说“其他”,不如说“Windows ASCII”。问题出在我的checkFiles.sh脚本的某个地方。现在改变了一些事情,但这就是我目前的处境

您的工作区缺少要分析的文件名

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

HTH

最好使用:
echo“$i:$(sh./fileType.sh“$i”)”
;它避免了包含空格的文件名出现问题,不需要使用进程替换。只需执行echo-n“$i:”/fileType.sh$i如果您想更便于携带(某些echo不支持-n),请使用“printf”而不是
echo-n