今天突然想在windows下利用cygwin执行一个脚本判断输入的文件名是目录还是文件,代码很简单,如下 #!/bin/shread -p enter file name: filenamepath=$filenameif [ -d $path ] then echo $filename is the directoryelif [ -f $path ] then echo $path is th
今天突然想在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! 放弃所有修改,从上次保存文件开始再编辑