上次在写shell的时候发现vi和vim不一样:vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。vim要比vi好用许多。
这次接着上次的内容,基础知识,继续学习,本文作者也在自学中,纰漏错误在所难免,若有人发现问题请指出谢谢!
Lee出品,转载请注明出处http://blog.youkuaiyun.com/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}
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。 |