shell编程基础(二)

红米2年前技术文章618

1、条件表达式

1.1 文件判断

常用文件测试操作符:

-d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立

-f文件,f的全拼为file 文件存在且为普通文件则为真,即测试表达式成立

-e文件,e的全拼为exist 文件存在则为真,即测试表达式成立。注意区别于“-f”,-e不辨别是目录还是文件

-r文件,r的全拼为read 文件存在且可读则为真,即测试表达式成立

-s文件,s的全拼为size 文件存在且文件大小不为0则为真,即测试表达式成立

-w文件,w的全拼为write 文件存在且可写则为真,即测试表达式成立

-x文件,x的全拼为executable    文件存在且可执行则为真,即测试表达式成立

-L文件,L的全拼为link 文件存在且为链接文件则为真,即测试表达式成立

fl -nt f2,nt 的全拼为 newer than 文件fl比文件f2新则为真,即测试表达式成立。根据文件的修改时间来计算

fl -ot f2,ot 的全拼为 older than 文件fl比文件f2旧则为真,即测试表达式成立。根据文件的修改时间来计算

1.2 字符串判断

常用字符串测试操作符:

-n "字符串" 若字符串的长度不为0,则为真,即测试表达式成立,n可以理解为no zero

-Z "字符串" 若字符串的长度为0,则为真,即测试表达式成立,z可以理解为zero的缩写

"串 1"== "串 2" 若字符串1等于字符串2,则为真,即测试表达式成立,可使用"=="代替"="

"串 1" != "串 2"         若字符串1不等于字符串2,则为真,即测试表达式成立,但不能用"!=="代替"!="


1.对于字符串的测试,一定要将字符串加双引号之后再进行比较。

2.空格非空

-z 判断字符串长度

-n 判断字符串长度

"串 1" == " 串 2 "       使用定义变量的方式进行判断

1.3 整数判断

在[]以及test中

使用的比较符号

在(())和[[]]中

使用的比较符号

-eq ==或=  相等,全拼为equal

-ne != 不相等,全拼为not equal

-gt >  大于,全拼为greater than

-ge >= 大于等于,全拼为greater equal

-lt <  小于,全拼为丨ess than

-le <= 小于等于,全拼为less equal

判断两数是否相等

大于等于

小于

大于

不等于

1.4 逻辑符号

在[]和test中使用的操作符说明在[[]]和中使用的操作符

-a

条件A -a  条件B ]

AB都要成立,整个表达式才成立

&&and,与,两端都为真,则结果为真
-o [ 条件A -o  条件B] A与B都不成立,整个表达式才不成立||

or,或,两端有一个为真,则结果为真


!
!not,非,两端相反,则结果为真

逻辑操作与整数判断结合

[root@clsn ~]# [ 11 -ne 1 ] && echo "成立" || echo "不成立"
成立

取反

[root@clsn ~]# [ ! 11 -ne 1 ] && echo "成立" || echo "不成立"
不成立

感叹号的特殊用法

使用历史命令,感叹号加上history中的序号,即可执行

[root@clsn ~]#  !516
 ls
anaconda-ks.cfg  bootime.avg  setup.sh  vim

1.5 【练习题】开发3个shell脚本比较2个整数大小

要求:

1. 分别以定义变量,脚本传参以及read读入的方式写3个脚本。

2. 用条件表达式(禁止if语句)进行判断。

3. 将2个整数的比较结果输出到屏幕,出错需要提示。

使用定义变量方法

[root@clsn panduan1]# cat panduan1.sh 
#!/bin/bash
#############################################################
# File Name: panduan1.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-06 11:27:32
# Description:
#############################################################
NUM1=6
NUM2=2
expr 1 + $NUM1  &>/dev/null
[ $? -eq 2 ] && echo "$NUM1 不是整数 " &&  exit 2
expr 1 + $NUM2 &>/dev/null
[ $? -eq 2 ] && echo "$NUM2 不是整数 " &&  exit 2
[ "$NUM1" -eq "$NUM2" ] && echo $NUM1 = $NUM2  && exit
[ "$NUM1" -gt "$NUM2" ] && echo $NUM1 \> $NUM2 && exit
[ "$NUM1" -lt "$NUM2" ] && echo $NUM1 \< $NUM2

使用传参方法

[root@clsn panduan1]# cat panduan_chuanchan.sh 
#!/bin/bash
#############################################################
# File Name: panduan1.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-06 11:27:32
# Description:
#############################################################
[ $# -ne 2 ] && echo "UASGE $0 num1 num2 " && exit
NUM1=$1
NUM2=$2
expr 1 + $NUM1  &>/dev/null
[ $? -eq 2 ] && echo "$NUM1 不是整数 " &&  exit 2
expr 1 + $NUM2  &>/dev/null
[ $? -eq 2 ] && echo "$NUM2 不是整数 " &&  exit 2
[ "$NUM1" -eq "$NUM2" ] && echo $NUM1 = $NUM2  && exit
[ "$NUM1" -gt "$NUM2" ] && echo $NUM1 \> $NUM2 && exit
[ "$NUM1" -lt "$NUM2" ] && echo $NUM1 \< $NUM2

使用read读入方法

[root@clsn panduan1]# cat panduan_read.sh 
#!/bin/bash
#############################################################
# File Name: panduan1.sh
# Version: V1.0
# Author: clsn
# Organization: http://blog.znix.top
# Created Time : 2017-12-06 11:27:32
# Description:
#############################################################
read -p "请输入第一个整数:" NUM1
read -p "请输入第二个整数:" NUM2
expr 1 + $NUM1  &>/dev/null
[ $? -eq 2 ] && echo "$NUM1 不是整数 " &&  exit 2
expr 1 + $NUM2  &>/dev/null 
[ $? -eq 2 ] && echo "$NUM2 不是整数 " &&  exit 2
[ "$NUM1" -eq "$NUM2" ] && echo "$NUM1 = $NUM2"  && exit
[ "$NUM1" -gt "$NUM2" ] && echo "$NUM1 > $NUM2" && exit
echo "$NUM1 < $NUM2"

相关文章

证书不识别问题处理

证书不识别问题处理

生成证书时客户端进入显示不识别在172.16.121.210生成一个证书后,使用keytool -importkeystore命令将其他节点172.16.121.114的条目进行合并,问题并没有解决,...

PromQL查询解析

一. 概述Prometheus除了存储数据外,还提供了一种强大的功能表达式语言 PromQL,允许用户实时选择和汇聚时间序列数据。表达式的结果可以在浏览器中显示为图形,也可以显示为表格数据,或者由外部...

CDP实操--HDFS角色迁移

CDP实操--HDFS角色迁移

    hdfs角色迁移功能在cdp页面中就可以实现该功能,迁移的时间与namenode元数据大小,以及block数量多少有关,注意迁移过程中集群需要关闭,要预留出操作时间窗口。1、页面选择迁移角色2...

 MySQL 两阶段提交

MySQL 两阶段提交

说明MySQL 开启 Binlog 后,所有的事务都会产生 Binlog Event,这些 Event 也是事务数据的一部分。本篇文章介绍 MySQL 如何保证事务 Binlog Event 和 In...

MySQL Group Replication(二)监控篇

MySQL Group Replication(二)监控篇

说明组复制搭建成功后,为保证其正常运行,用户需要对组复制进行监控。MySQL 的 performance_schema 库中提供一些表,用于监控组复制的复制过程。[performance_schema...

SQL Server优化入门系列(一)——快速定位阻塞SQL

SQL Server优化入门系列(一)——快速定位阻塞SQL

引言我们在运维数据库的时候,经常会面对这样的问题:数据库现在运行得怎么样有哪些会话在执行,当前状态是什么,在执行什么SQL哪些会话被阻塞,阻塞原因是什么会话是从哪些IP连接过来的,使用了什么账号通过这...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。