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

本文介绍了一个简单的Cygwin脚本,用于判断输入路径是目录还是文件,并解决了因Windows与Unix换行符不同导致的运行错误。文章还列举了Linux下文件属性检测命令及vi编辑器的基本操作。

  今天突然想在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! 放弃所有修改,从上次保存文件开始再编辑

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值