您的位置:首页 > 运维架构 > Shell

linux shell判断一个文件名判断它是目录还是文件以及在windows下出现"syntax error near unexpected token"的解决方法

2015-01-02 14:50 946 查看
  今天突然想在windows下利用cygwin执行一个脚本判断输入的文件名是目录还是文件,代码很简单,如下

#!/bin/sh
read -p "enter file name:" filename
path=$filename
if [ -d $path ]
then
echo "$filename is the directory"
elif [ -f $path ]
then
echo "$path is the file"
else
echo "$path is nothing"
fi


  可是在编写完之后,执行IsDirectOrFile却提示IsDirectOrFile.sh: line 12: syntax error near unexpected token `fi',一开始以为语法错误,但是检查了几遍后仍没有发现错误,后来上网查看了一下资料,突然就明白了是什么原因造成了。因为在windows下换行是cr/cl,而linux下换行是cl,而在notepad++默认的保存格式windows,所以不是语法错误,是文本编辑器保存的格式错误,解决方法如下图1:

图1



       执行转换后的脚本two.sh,效果如下图:

图2



      当然也可以采用如下命令:

vi  xxx.sh
:set fileformat=unix
:wq
       执行后的效果如图2。
       以上两种方法做的效果是把windows下的格式转换为unix的格式,具体说明如图3(网上找来的图)

图3



       另外需要注意的是:

       1.if中的两边的[]要空格,如if [ $name="Chinese" ]

       2.linux下参数的说明如下:

          -b 当file存在并且是块文件时返回真

          -c 当file存在并且是字符文件时返回真

          -d 当pathname存在并且是一个目录时返回真

          -e 当pathname指定的文件或目录存在时返回真

          -f 当file存在并且是正规文件时返回真

          -g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真

          -h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效

          -k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真

          -p 当file存在并且是命令管道时返回为真

          -r 当由pathname指定的文件或目录存在并且可读时返回为真

          -s 当file存在文件大小大于0时返回真

          -u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真

          -w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的

          -o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真

       3.退出vi如何保存

           按esc键跳到命令模式,然后:

           :w 保存文件但不退出vi

           :w  file 将修改另外保存到file中,不退出vi

           :w! 强制保存,不推出vi

           :wq 保存文件并退出vi

           :wq! 强制保存文件,并退出vi

           :q  不保存文件,退出vi

           :q! 不保存文件,强制退出vi

           :e! 放弃所有修改,从上次保存文件开始再编辑
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐