linux判断变量等于一个定值,Shell编程之条件判断与流程统制

本文详细介绍了Shell编程中的条件判断,包括文件类型、权限、整数、字符串的比较,以及逻辑运算符的使用。同时讲解了单分支、双分支if语句和case语句的结构和应用,并提供了多个实战例子,如判断文件存在、用户身份、磁盘使用率等。此外,还探讨了for循环和while/until循环的使用方法,用于批量操作和条件控制。
摘要由CSDN通过智能技术生成

一、条件判断式语句

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值