上次在写shell的时候发现vi和vim不一样:vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。vim要比vi好用许多。
这次接着上次的内容,基础知识,继续学习,本文作者也在自学中,纰漏错误在所难免,若有人发现问题请指出谢谢!
Lee出品,转载请注明出处http://blog.csdn.net/hnulwt/article/details/43155797
布尔运算符
先大致熟悉一下布尔相关的三个运算符
! 非运算
-o 或运算(or)
-a 与运算(and)
接着写程序熟悉一下:
1 #!/bin/sh 2 3 a=4 4 b=6 5 6 if [ $a != $b ] 7 then 8 echo "$a != $b a is not equal to b" 9 else 10 echo "a = b" 11 fi 12 13 if [ $a -gt 3 -a $b -lt 10 ] 14 then 15 echo "and && true" 16 else 17 echo "a < 3 or b > 10" 18 fi运行结果:
Lee@Lee-PC /Desktop
$ sh test.sh
4 != 6 a is not equal to b
and && true
布尔运算符比较简单,和我们平时自己使用的编程语言区别不大,只需注意他的或运算和与运算符号即可。
shell脚本有俩类较为特殊的运算符:1,字符串相关运算符 2文件测试运算符
字符串 和 字符串运算符
提到了字符串,先讲讲shell中的字符串,他大概是shell中最常用的数据类型了(貌似除了他也没有其他类型了),先来看看字符串的表示方式
字符串可以用单引号,也可以用双引号,也可以不用引号
单引号
俩点需要注意:
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字串中不能出现单引号(对单引号使用转义符后也不行)
双引号
双引号基本没有什么限制,一般常用双引号,双引号里面可以使用转义字符,可以带入变量
例:
1 animal="dog" 2 say="Hi, \"$animal\"" 3 4 echo $say运行结果:
$ sh teststr.sh
Hi, "dog"
可以看出俩个冒号被转义了,animal代表的字符串被代入新的句子中。
这里再说有关于字符串的几个方法
1,获取字符串长度的方法
1 animal="dog" 2 3 echo ${#animal}输出结果:3 (这里不能用echo $#animal ,你可以测试一下,输出结果就不对喔,这样$#会代表 传递给脚本或函数的参数个数,所以会输出:0animal)
2,查找字符串
1 animal="dog, pig, cat, lion and so on" 2 3 echo `expr index "$animal" cat`
好了,接着我们来看看字符串运算符有哪些
= 和 != 判断俩个字符串是否相等(还记得判断数字是否相等的运算符么(-eq和-ne))
-z 、 -n 或者直接将字符串代入 判断字符串长度是否为零(-z当字符串长度为0返回 true,)
下面看测试程序:
1 #! /bin/sh 2 3 a="abasdf" 4 b="sdfa" 5 6 if [ $a = $b ] 7 then 8 echo "1" 9 else 10 echo "2" 11 fi 12 13 if [ -z $a ] 14 then 15 echo "3" 16 else 17 echo "4" 18 fi 19 20 if [ $a ] 21 then 22 echo "5" 23 else 24 echo "6" 25 fi
$ sh test.sh
2
4
5
文件测试运算符
首先我们在桌面上创建一个文件,执行命令touch file.test
这时候我们已经创建了文件,但是我们并不知道他的权限是什么,运行命令:ls -l | grep file.test查看权限,运行结果如下图所示:
这里我们对Linux权限做简单的介绍:
上图中权限最开始是-(常规文件),而还有可能的开头还有,
“d”目录(非常常见,你随便找一个目录,在这个目录的上一层目录ls -l一下就可以看到)
“l”符号链接(通过ln 创建的一些链接)
“c”字符专门设备文件
“b”块专门设备文件
“p”先进先出
“s”套接字
然后我们开始看第一个-后面的字段,三个为一组看,第一个三元字符组(rw-)代表文件所有者的权限,第二个(r--)代表文件的组的权限,第三个(r--)代表所有其他用户的权限
r 和 w分别代表什么意思呢?分别代表 可读read 和 可写write。还有一个目前文件没有该权限,即x 可执行(execute),那我们现在到底有什么权限呢,一般我们拥有 第一个三元字符组 代表的权限,即:可读可写
好了,那我么赋于他可执行权限 chmod +x file.test,这样是赋予三个文件所有者可执行权限,我们也可以执行 chmod u+x file.test仅仅给我们自己加权限。
有关于chmod指令详细介绍,可以执行chmod --help查看
现在权限已经赋于文件了。准备工作已经做好,接下来我们准备对我们新增的这个文件做个测试。
写如下shell用于熟练和测试:
1 #! /bin/sh 2 3 file="/Desktop/file.test" 4 5 if [ -r $file ] 6 then 7 echo "1" 8 fi 9 10 if [ -w $file ] 11 then 12 echo "3" 13 else 14 echo "4" 15 fi 16 17 if [ -f $file ] 18 then 19 echo "file is an ordinary file" 20 else 21 echo "special file" 22 fi 23 24 if [ -d $file ] 25 then 26 echo "directory" 27 else 28 echo "not direcotry" 29 fi
$ sh test.sh
1
3
file is an ordinary file
not direcotry
可能还对上面的某些操作符不熟悉,下面附详细的操作符表。
操作符 | 说明 |
-b file | 检测文件是否是块设备文件,如果是,则返回 true。 |
-c file | 检测文件是否是字符设备文件,如果是,则返回 true |
-d file | 检测文件是否是目录,如果是,则返回 true。 |
-f file | 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 |
-g file | 检测文件是否设置了 SGID 位,如果是,则返回 true。 |
-k file | 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 |
-p file | 检测文件是否是具名管道,如果是,则返回 true。 |
-u file | 检测文件是否设置了 SUID 位,如果是,则返回 true。 |
-r file | 检测文件是否可读,如果是,则返回 true。 |
-w file | 检测文件是否可写,如果是,则返回 true。 |
-x file | 检测文件是否可执行,如果是,则返回 true。 |
-s file | 检测文件是否为空(文件大小是否大于0),不为空返回 true。 |
-e file | 检测文件(包括目录)是否存在,如果是,则返回 true。 |
原文地址:http://blog.csdn.net/hnulwt/article/details/43155797