linux shell判断一个文件名判断它是目录还是文件以及在windows下出现"syntax error near unexpected token"的解决方法
2015-01-02 14:50
946 查看
今天突然想在windows下利用cygwin执行一个脚本判断输入的文件名是目录还是文件,代码很简单,如下
可是在编写完之后,执行IsDirectOrFile却提示IsDirectOrFile.sh: line 12: syntax error near unexpected token `fi',一开始以为语法错误,但是检查了几遍后仍没有发现错误,后来上网查看了一下资料,突然就明白了是什么原因造成了。因为在windows下换行是cr/cl,而linux下换行是cl,而在notepad++默认的保存格式windows,所以不是语法错误,是文本编辑器保存的格式错误,解决方法如下图1:
图1
执行转换后的脚本two.sh,效果如下图:
图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! 放弃所有修改,从上次保存文件开始再编辑
#!/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! 放弃所有修改,从上次保存文件开始再编辑
相关文章推荐
- shell出现syntax error near unexpected token `<' 解决方法
- syntax error near unexpected token(关于跨平台非法字符(^M)的解决方法)
- syntax error near unexpected token `('解决方法
- 关于Cygwin中运行sh文件出现syntax error near unexpected token `$'{\r''
- windows7下系统保护中出现错误“文件名、目录名或卷标语法不正确。(0x8007007B)“ 以及保护设置列表中出现“Windows7_os(c:)(找不到)”选项时的解决方法
- npm install出现"Unexpected end of JSON input while parsing near"错误解决方法
- angular 出现"Unexpected end of JSON input while parsing near"错误解决方法
- shell “syntax error near unexpected token '$'\r''” 错误解决方法
- Linux 中出现的-bash: syntax error near unexpected token `('错误-------终端中无法识别“()”问题解决
- Linux -bash: syntax error near unexpected token `(' 问题及解决
- "xxxx".zip:这个压缩文件格式未知或者数据已经被损坏,打不开压缩文件,总出现这个提示的解决方法
- 嵌入式 Linux下判断是否是一个目录还是一个文件的方法
- syntax error near unexpected token `原因及解决办法
- Linux 判断是否是一个目录还是一个文件的方法
- 安装Office时出现windows installer服务不能更新一个或多个受保护的windows文件错误的解决方法
- 安装Office时出现windows installer服务不能更新一个或多个受保护的windows文件错误的解决方法
- syntax error near unexpected token `then'问题的解决
- syntax error near unexpected token `then'问题的解决
- syntax error near unexpected token `原因及解决办法
- Linux 判断是否是一个目录还是一个文件的方法