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

上次在写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`

输出结果: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。


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。