建立网站 域名 服务器,秦皇岛海三建设,网站title keywords,天网查询企业查询一、条件测试
Shell 环境根据命令执行后的返回状态值 $? 来判断是否执行成功#xff0c;当返回值为0时表示成功#xff0c;否则表示失败或异常#xff08;非0值#xff09;。使用专门的测试工具 test 命令#xff0c;可以对特定条件进行测试#xff0c;并…一、条件测试
Shell 环境根据命令执行后的返回状态值 $? 来判断是否执行成功当返回值为0时表示成功否则表示失败或异常非0值。使用专门的测试工具 test 命令可以对特定条件进行测试并根据返回值值为0来判断是否成立。
格式1test 条件表达式
格式2[ 条件表达式 ]
注意[]空格否则会失败
测试 是否成功使用 $? 返回值
[ 操作符 文件或目录 ]
help test
test命令格式
test 条件表达式
或
[ 条件表达式 ] #条件表达式的两边都需要有空格且此方法更为常用
或
[[ 条件表达式 ]]1、文件测试
文件测试指的是根据给定的路径名称判断对应的是文件还是目录或者判断文件是否可读、可写、可执行等。
基本格式
[ 操作符 文件或目录 ] 注意两端要有空格
常用的选项
选项说明-d测试是否为目录-e测试目录或文件是否存在-f测试是否为文件-r测试当前用户是否有权限读取-w测试当前用户是否有权限写入-x测试当前用户是否有权限执行-b测试是否为设备文件-c测试是否为字符设备-s测试存在且文件大小为空-L测试是否为链接文件
条件测试判断某需求是否满足需要由测试机制来实现专用的测试表达式需要由测试命令辅助完成测试过程实现评估布尔声明以便用在条件性环境下进行执行若真则状态码变量 $? 返回0若假则状态码变量 $? 返回1 比较两个文件时常用的选项
-nt判断文件A是否比文件B新-ot判断文件A是否比文件B旧-ef判断两个文件是否为同一个文件用来判断两个文件是否指向同一个inode。
2、整数数值比较
整数值比较是指根据给定的两个整数值来判断第一个数与第二个数的关系如是否大于、等于、小于第二个数。
基本格式
[ 整数1 -操作符 整数2 ] 公式
格式说明-eq第一个数等于第二个数-ne第一个数不等于第二个数-gt第一个数大于第二个数-lt第一个数小于第二数-le第一个数小于或等于第二个数-ge第一个数大于或等于第二个数
[rootlocalhost test]# a5
[rootlocalhost test]# b10[rootlocalhost test]# [ $a -eq $b ]
[rootlocalhost test]# echo $?
1[rootlocalhost test]# [ $a -lt $b ]
[rootlocalhost test]# echo $?
0[rootlocalhost test]# [ $a -le $b ]
[rootlocalhost test]# echo $?
0 3、字符串比较
字符串比较通常用来检查用户输入、系统环境等是满足条件在提供交互式操作的Shell脚本中也可用来判断用户输入的位置参数是否符合要求。
格式
[ 字符串1 字符串2 ] ##是否相同[ 字符串1 ! 字符串2 ] ##是否不相同[ -z 字符串 ] ##是否为空[ -n 字符串 ] ##字符是否存在
常用的操作符
第一个字符串和第二个字符串相同!:第一个字符串与第二个字符串不相同其中“!”符号表示取反-z字符串内容为空
[rootlocalhost test]# str1liu
[rootlocalhost test]# str2yuan[rootlocalhost test]# [ $str1 $str2 ] ##比较是否相同
[rootlocalhost test]# echo $?
1 ##不相同[rootlocalhost test]# [ $str1 ! $str2 ] ##比较是否不相同
[rootlocalhost test]# echo $?
0 ##两者比较不相同所以返回值为0正确4、逻辑运算(短路运算)
格式
格式1[ 表达式1 ] 操作符 [ 表达式2 ] ...
格式2命令1 操作符 命令2 ...
且 与 或 ! 取反且 第一一个命令为真才需要执行第二个命令
全真才为真一假即为假第一个命令假了一定假了 cmd1 cmd2全真才为真 一假即为假
第一个CMD1结果为真 第二个CMD2必须要参与运算才能得到最终的结果
第一个CMD1结果为假 总的结果必定为假因此不需要执行CMD2或 ||一真即为真全假才为假
第一个命令为真不需要执行第二个命令了 一定为真了
第一个命令为假需要执行第二个命令来看 整个式子的结果cmd1 || cmd2 常见的条件
-a或逻辑与“而且”的意思全真才为真-o或||逻辑或“或者”的意思一真即为真逻辑否 5、双中括号
[[ expression ]] 用法左侧字符串是否和右侧的PATTERN相同注意:此表达式用于[[ ]]中PATTERN为通配符
~ 左侧字符串是否能够被右侧的正则表达式的PATTERN所匹配注意: 此表达式用于[[ ]]中扩展的正则表达式 6、() {}
格式
CMD1;CMD2;...和 { CMD1;CMD2;...; } 都可以将多个命令组合在一起批量执行
#会开启子shell
[rootcentos8 ~]#echo $BASHPID
1920
[rootcentos8 ~]#( echo $BASHPID;sleep 100)
1979
[rootcentos8 ~]#pstree -p
├─sshd(719)───sshd(1906)───sshd(1919)─┬─bash(1920)───bash(1979)───sleep(1980)#{ } 不会开启子shell
[rootcentos8 ~]#echo $BASHPID
1920
[rootcentos8 ~]#{ echo $BASHPID; }
1920
()表示执行过直接显示结果{}要执行操作也显示结果()不需要结尾{}需要结尾()会开启子进程{}不会开启子进程 实操
1.磁盘使用量 发邮件
vim mail.sh#!/bin/bash
usedf|grep /dev/sda|tr -s |cut -d -f5| tr -d %[ $use -ge 80 ] echo 磁盘使用量不足 |mail -s warning 224----432qq.com || echo 磁盘使用量足够bash mail.sh 二、if语句
1、单分支if语句
单分支if语句对于单分支的选择结构只有在“条件成立”时才会执行相应的代码否则不执行任何操作。
语法格式
if 条件测试操作
then命令序列
fi 2、双分支if语句
对于双分支的选择结构要求针对条件成立 条件不成立两种情况分别执行不同的操作。
语法格式
if 条件测试操作
then命令序列1
else命令序列2
fi 3、多分支if语句
多分支结构能够根据多个互斥的条件分别执行不同的操作实际上等同于嵌套使用的if语句。 方式 if 判断条件1 then 条件1为真的分支代码 elif 判断条件2 then 条件2为真的分支代码 elif 判断条件3;then 条件3为真的分支代码 ... else 以上条件都为假的分支代码 托底 fi 三、case分支
case 语句可以使脚本程序的结构更加清晰、层次分明常用于服务的启动、重启、停止的脚本有的服务不提供这种控制脚本需要用case语句编写。 case 语句主要适用于以下情况 某个变量存在多种取值需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支的 if 语句非常相似只不过 if 语句需要判断多个 不同的条件而 case 语句只是判断一个变量的不同取值。
1、case语句结构
case 变量值 in
模式一)命令序列
;;
模式二)命令序列
;;
……
*)默认命令序列
esac
2、case注意事项
case行首必须为单词 “in”每一模式必须以单个右括号)结束。双分号 “;;” 表示命令序列的结束。模式字符串中可以用方括号表示一个连续的范围如[0-9]还可以用竖杠符号 “|”表示或如“A|B”。最后的*)表示默认模式其中的 *相当于通配符。case行首必须为单词 “in”每一模式必须以单个右括号)结束。双分号 “;;” 表示命令序列的结束。模式字符串中可以用方括号表示一个连续的范围如[0-9]还可以用竖杠符号 “|”表示或如“A|B”。最后的*)表示默认模式其中的 *相当于通配符。 小实验
石头剪刀布 鸡兔同笼 yes or no 判断服务是否开启 判断是否安装