shell 脚本与或费逻辑判断及磁盘管理实战 |学习笔记

简介: 快速学习 shell 脚本与或费逻辑判断及磁盘管理实战

开发者学堂课程【Linux Shell 编程入门与实战shell 脚本与或费逻辑判断及磁盘管理实战】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/551/detail/7624


shell 脚本与或费逻辑判断及磁盘管理实战


一、shell脚本编程基础

(一)条件测试

1、判断某需求是否满足,需要由测试机制来实现,专用的测试表达式需要测试命令辅助完成测试过程;

2、评估布尔声明,以便用在条件性执行中

(1)若真,则返回0

(2)若假,则返回1

 3、测试命令:

(1)test EXPRESSION

test命令可以用来判断后面的表达是否成立,test本身是一个内部命令,test命令的用法可以通过输入help test。输入help test 之后,可以看到后面跟了[expr]称为表达式。

执行结果或返回的状态是0或者1,0代表真,1代表假;test的结果是根据0或者1的状态来进行判断。

image.png

test 命令支持对各种各样的条件判断,比如对文件的判断、字符串的判断、数字运算的判断;

下面是列举几个较为简单的进行讲解:

字符串的比较:

比如有 str1=aaa;str2=bbb 进行比较两个字符串是否相同,就可以输入test $str1=$str2(注意等号前后有空格)进行比较;是否相等通过输入echo $?表示为0则为成功的,显而易见,两者并不相同为假。

通过更改数据,使str2=aaa,现在两者数据相同,最后得到的结果为0,即是真。

以上证实test命令可以进行比较。另外还可以判断字符串的长度、字符串的大小等。

判断字符串是否为空(就是是否为0)操作:

通过输入[ -z $var ],echo $?,结果为真,现在给它进行赋值:var=haha ,[ -z $var ] ,echo $?得到的结果为非空;-n为非空。

字符串比如为[“abc”]到底为真还是假,实际上输入[“abc”]等价-n,所以是非空。如果输入[“”]则为空、输入[ ]也为空;输入[ 0 ]则不为空。

不为空显示为0,为空显示为1;学习以上知识以后,再结合短路与短路或进行讲解。

短路与的逻辑关系是“cmd1 && cmd2”前面的命令如果为真,需要执行命令2,前面的命令为假,则不需要执行命令2。

执行x=haha;y=xixi; [“$x”= “$y”]  && echo equal] 或者写成x=haha;y=xixi;[“$x”= “$y”]  && echo equal] || echo no equa]。

如果[“$x”= “$y”] 为真,就执行echo equal] 命令,诚然echo equal]命令肯定为真,所以整体都为真,如果整体都为真,则为短路或,则后续命令不需要执行。

相反,如果[“$x”= “$y”] 不相等,即为假,则短路与不需要执行后续命令,则整体为假。 数字判断操作如下:

比方两个数字进行比较。执行m=10 n=20 [ $m -eq $n ] && echo equal]|| echo no equal ] 得到两个数值不相等,当改成相同时,输出结果相等。

一般带有-eq=equal表示相等,-nq=no equal表示不相等;less equal表示大小。

学习以上知识,如何判断分区定律。比如分区定律大于80,执行警报wall disk will be full;当然如果低于80,则不报警;执行N-diskcheck.sh脚本。该脚本的功能是检查分区定律。

分区定律的做法是将最大的数字找出,大于则报警;所以在进行操作的时候需进行排序。进行操作时可以先把dv开头的进行过滤,后续再用相关命令将数字进行取出。

需要注意的是在执行操作的时候,在中括号里面的变量要加双引号,否则就可能出现语法错误。

判断输入的是否是数字,需要用到“=~”(表示左侧字符串是否能够被右侧的PATTERN所匹备,

注意:

此表达式一般用于[[ ]]中;扩展的正则表达式-z”STRING” 字符串是否为空,空为真,不空为假;-n “STRING” 字符串是否为空,不空为真,空为假,

注意:

用于字符串比较时的用到的操作都应该使用引号)。比方现在表示需写成 [[ “$n” =~ ^[[:digit:]]+$ ]] && echo digit || echo no digit(为真时打印digit,为假时打印no digit)。需要注意的是在赋值时,数值必须为正数。

在前面讲过的例子,当时没有考虑数值的问题,如果不等于2或者不是数字或者只要有一个条件不符合,都应执行退出。如果是数字,判断方法,使用“=~”进行判断。

例如:

输入[$# -ne 2 ] && echo “Arg number ;[ “$1”=~ ^ [0-9]+$ ];如果执行非数字时,则输入[[  !  “$1” =~ ^[0-9]+$  ]]  && echo “ $1” is not digit “ && exit;同理:操作$2时,把$1换成$2即可。

注意在执行操作时,不仅要检查个数,还要检查$1和$2是不是数字。

进行以上操作之后,执行看结果,参数个数不对,原因出在其中有一个不是数字(一个是数字,一个是字母)前面如果不是数字也可以进行判断,所以要全面考虑;以上是正则表达式的用法。(如果是取非数字,则加!号)(逻辑运算:非:!;!1=0;!0=1;

短路运算:短路与:第一个为0,结果必定为0;第一个为1,第二个必须要参与运算。

短路或:第一个为1,结果必定为1;第一个为0,第二个必须要参与运算。异或:^;异或的两个值相同为假,不同为真。)

接下来实现一个功能,假如在当前的目录里存在多个文件,判断文件的后缀是否为ss后缀,如果是ss后缀需执行操作,如果不是ss后缀则不需要执行任何操作。

假设对$^clename变量进行判断它是否为ss后缀,写出表达式:[[ $filename =~*\.sh$ ]] && echo sh || echo no sh;

进行赋值:filename a.sh,执行操作,便可判断文件后缀。

test语句支持文件判断,以下都是文件判断

image.png

如上图所示:

前面加“-”都称为普通文件。比方判断[ -d /etc/ ]可以用-d,-d是判断文件夹。

注意,后面如果加上redhat-release就不是文件夹;所以进行判断时,注意细节。

以上文件判断只针对普通用户,比如判断:/etc/shadow的权限,执行结果显示没有权限,说明判断权限看的是实际权限,看实际权限和真正的权限,而不是表面权限。

结合全面所讲的工具和命令,有些问题就可以得到解决,比方实现一个创建用户的功能。

把用户名:

username=haha放入变量,针对变量创建功能:useradd $username。需要注意在创建时,应事先判断账号是否存在,如果有,则无需创建,没有则需要创建。同时指定用户的口令。创建时用户名跟在后边,创建时如果用户存在,则显示用户已经存在。

判断用户存在性,执行id root,判断是否成功执行id root &>/dev/null或者id root &> /dev/null。

(1)[EXPRESSION]

(2)[[EXPRESSION]]

注意:EXPRESSION前后必须有空白字符

相关文章
|
1月前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
53 2
6种方法打造出色的Shell脚本
|
16天前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
44 1
|
21天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
41 2
|
2月前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
49 6
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
Shell 数据安全/隐私保护
|
2月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
88 1
|
2月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
72 12
|
2月前
|
存储 运维 监控
自动化运维:使用Shell脚本简化日常任务
【9月更文挑战第35天】在IT运维的日常工作中,重复性的任务往往消耗大量的时间。本文将介绍如何通过编写简单的Shell脚本来自动化这些日常任务,从而提升效率。我们将一起探索Shell脚本的基础语法,并通过实际案例展示如何应用这些知识来创建有用的自动化工具。无论你是新手还是有一定经验的运维人员,这篇文章都会为你提供新的视角和技巧,让你的工作更加轻松。
67 2
|
3月前
|
Shell
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别