Shell Scripting - 不能生成额外的消息,但不是,但我说

时间:2013-05-15 14:04:38

标签: shell unix

关于这个问题也有类似的问题。但不是同一个解决方案。

我要创建一个带有两个参数的shell脚本: 1.所需的文件扩展名 2.要使用该扩展名重命名的单个文件的名称

脚本应使用所需的文件扩展名重命名该文件。如果该文件不存在,则应打印出“fileName:No such file”。它正在产生这个消息,但是教授的测试表明它正在产生意外的消息(额外的消息),但事实并非如此。我的shell脚本是:

#!/bin/sh
fileExtension="$1"
shift
oldName="${@}"
extension=${oldName##*.}
if test -r "$oldName"
then
   if "$fileExtension" == $oldName.*
   then
      echo "$oldName"
   else
      newName="${oldName%.*}.$fileExtension"
      mv "$oldName" "$newName"
   fi
else 
   echo "$oldName": No such file
fi

每当我测试它时,它会产生“fileName:no such file”而不会产生任何其他内容。

测试由

执行
./chExt2.sh cpp aardvark.CPP

其中aardvark.CPP不在目录中。

非常感谢任何帮助或指导。谢谢

1 个答案:

答案 0 :(得分:0)

你的shebang告诉你的shell使用/bin/sh来运行脚本。 /bin/sh通常是主机上实际/默认shell的符号链接。例如,我的bash:

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 27  2009 /bin/sh -> bash

听起来教授的计算机/bin/sh正在使用与您预期不同的shell。例如,此脚本在kshbash中正常运行,但如果/bin/shtcsh,则会生成“额外输出”:

fileExtension=cpp: Command not found.
Illegal variable name.