一、条件判断式语句
1-1.概述
用来判断是与否,客观的而非主观判断,用于进行基本的管理
1-2.按文件类型判断
补充:
&& 命令1&&命令2 逻辑与(没有数据传递)
当命令1正确执行,则命令2才会执行
当命令1执行不正确,则命令2不会执行
|| 命令1||命令2 逻辑或(没有数据传递)
当命令1执行不正确时,命令2才会执行
当命令1正确执行时,命令2不会执行
按文件类型判断
记住蓝色部分
两种判断格式:
test –e /root/install.log
[-e /root/install.log]; e:exist
[-d /root] && echo “yes” || echo “no”
第一个判断命令如果正确执行,则打印“yes”,否则打印“no”
注意Linux中0表示命令成功;1,表示命令失败,区别于Python中对象为空数字为0代表假,非0非空代表真。
例子:
[root@localhost ~]# ls
anaconda-ks.cfg install.log …
[root@localhost ~]# [-e /root/install.log]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [-e /root/install,login] | echo $?
[root@localhost ~]# 1
[root@localhost ~]# [-e /root/install.log] && echo yes || echo no
yes
[root@localhost ~]# [-e /root/install.log] && echo yes || echo no
no
其实上面是if的单分支语句,注意顺序不可以变化,如果no执行了那么yes也会出现,毕竟正确执行了
1-3.按文件权限判断
按文件权限进行判断
例子:[-w student.txt] && echo “yse” || echo “no”
判断文件是否拥有写权限
[root@localhost ~]# ll
总用量 52
-rw-r—r—.1 root root 7690 8月 14 16:34 install.log
…
[root@localhost ~]# [-w install.log] && echo yes || echo no
yes
不会判断是所有者有写权限还是所属者有写权限还是其他人有写权限,当然,我们可以用字符截取三个位置的权限分布情况进行分析
1-4.两个文件之间的比较
测试选项
作用
文件1 –nt 文件2
判断文件1的修改时间是否比文件2的新(如果新则返回真)n,new;t,time
文件1 –ot 文件2
判断文件1的修改时间是否比文件2的旧(如果旧则返回真)o,old;t,time
文件1 –ef 文件2
判断文件1是否和文件2的inode号一直,可以理解为两个文件判断是否属于同一个文件,用于判断硬链接的很好的方法,s
因为硬链接的inode号一致,软链接不一样
[root@localhost ~]# ln /root/student.txt /tmp/stu
[root@localhost ~]# [/root/student.txt –ef /tmp/stu] && echo yes || echo no
yes
[root@localhost ~]# ll –i
262154 -rw-r—r—.2 root root 60 8月 14 16:50 student.txt
[root@localhost ~]# ll –i /tmp/stu
262154 –rw-r—r—.2 root root 60 8月 14 16:50 /tmp/stu
源文件和链接文件的inode是一样的
.硬链接特征:
1、拥有相同的i节点和存储block块(一般4KB一个block),可以看做是同一个文件
相当于一个存储文件的不同的获取入口,镜像一样存储double份
2、只能对已经存在的文件进行创建
3、不能跨分区 ,不能交叉文件系统进行硬链接的创建
4、不能针对目录使用,只能针对文件创建
5、删除一个硬链接文件不影响其它有相同inode号的文件
.软链接特征:
1、类似windows快捷方式,方便打开
2、软链接拥有自己的i节点和block块,但是数据块中保存原文件的文件名和i节点号,并没有实际的文件数据,而是原文件的i节点和block块
3、lrwxrwxrwx |软链接
软链接文件权限都为rwxrwxrwx,查看软链接文件的权限,区别于原文件
4、修改任意文件,另一个都改变
5、删除原文件,软链接不能使用
限制少,而且灵活
1-5.两个整数之间比较
测试选项
作用
整数1 –eq 整数2
判断整数1是否和整数2相等(相等为真)
整数1 –ne 整数2
判断整数1是否和整数2不相等(不相等为真)
整数1–gt 整数2
判断整数1是否大于整数2(大于为真)
整数1 –lt 整数2
判断整数1是否小于整数2(小于为真)
整数1 –ge 整数2
判断整数1是否大于等于整数2(大于等于为真)
整数1 –le 整数2
判断整数1是否小于等于整数2(小于等于为真)
例子:
[root@localhost ~]# [23 –ge 22] && echo yes || echo no
yes
判断23是否大于等于22
[root@localhost ~]# [23 –le 22] && echo yes || echo no
no
判断23是否小于等于22,no
1-6.字符串的判断
测试选项
作用
-z 字符串
判断字符串是否为空(为空返回真)
-n 字符串
判断字符串是否为空(非空返回真)Null
字符串1 == 字符串2
判断字符串1是否和字符串2相等(相等返回真)
字符串1 != 字符串2
判断字符串1是否和字符串2不想等(不想等返回真)
例子:
1).判断字符串是否为空
[root@localhost ~]# name=fengj
[root@localhost ~]# [-z $name] && echo yes || echo no
no
不为空
[root@localhost ~]# name=””
[root@localhost ~]# [-z $name] && echo yes || echo no
yes
为空
2).判断字符串是否相等
[root@localhost ~]# aa=11
[root@localhost ~]# bb=22
[root@localhost ~]# [“aa”==”bb”] && echo yes || echo no
no
[root@localhost ~]# [“aa”eq”bb”] && echo yes || echo no
no
[root@localhost ~]# aa=22
[root@localhost ~]# [“aa”==”bb”] && echo yes || echo no
yes
[root@localhost ~]# [“aa”eq”bb”] && echo yes || echo no
yes
判断两个变量的值是否相等,不想等返回假,记得字符串加上双引号“$aa”,没加可能出现错误
1-7.多重条件的判断
测试选项
作用
判断1 –a 判断2
逻辑与,判断1和判断2都成立,最终结果才为真;and
判断1 –o 判断2
逻辑或,判断1和判断2只要有一个为真,最终结果就为真;or
!判断
逻辑非,是原始的判断式取反
例子1:
[root@localhost ~]# aa=11
[root@localhost ~]# [-n “aa”−a“aa”-gt 23] && echo yes || echo no
no
-n “$aa”:判断aa是否为空
-gt “$ss”:判断aa的值是否大于23
-a:逻辑与,因为aa<23,为假,所以结果也为假
[root@localhost ~]# [-n “aa”−a“aa”-gt 2] && echo yes || echo no
yes
二、单分支if语句
2-1.概述
Shell的语法结构不同于一些常见的语言
1).目的:
掌握语法结构
了解Shell的作用
分析编程思想
2).建立编程思想的方法:
熟悉Linux基本命令、规范、语法及Shell语法
实际与所学相互结合,了解每个程序的思路,也就是编程思想
具体方式:
抄写程序并正确运行
为程序打上注释
删除注释,为代码重新加注释
看注释写代码
删除代码程序,从头开始写
2-2.单分支if语句
格式:
if [条件判断式];then
程序
fi
或者
if [条件判断式]
then
程序
fi
fi来标识结束,finish
解释:
if语句使用fi结尾,和一般的语言使用大括号结尾不同
[条件判断式]就是使用test命令判断,所以中括号和条件判断式之间必须有空格
then后面跟符合条件之后执行的程序,可以放在中括号[]之后,用分号”;”分割,也可以换行写入,就不需要分号“;”了
1).例子1:判断登录用户是否是root
!/bin/bash
test=$(env | grep “USER”| cut –d “=”-f2)
if [ “$test” == root ]
then
echo “Current user is root.”
fi
[root@localhost ~]# ls
anaconda-ks.cfg sh ….
[root@localhost ~]# cd sh/
[root@localhost sh]# ls
b1.sh hello.sh read.sh
[root@localhost