您的位置:首页 > 运维架构 > Shell

快速入门shell脚本编写(二)

2015-01-26 20:26 302 查看
上次在写shell的时候发现vi和vim不一样:vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。vim要比vi好用许多。

这次接着上次的内容,基础知识,继续学习,本文作者也在自学中,纰漏错误在所难免,若有人发现问题请指出谢谢!

Lee出品,转载请注明出处/article/8644584.html

布尔运算符

先大致熟悉一下布尔相关的三个运算符

! 非运算

-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`


输出结果:11(注意这里第三行,expr 和 cat之后有特殊符号,该符号不是单引号,是Esc键下面那个)

好了,接着我们来看看字符串运算符有哪些

= 和 != 判断俩个字符串是否相等(还记得判断数字是否相等的运算符么(-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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: