条件测试类型:

整数测试
字符测试
文件测试

条件测试的表达式的三种方法:

1、[ expression ]     命令测试
2、[[ expression ]] 关键字测试
3、test expression

整数比较:

-eq:测试两个整数是否相等;相等为真,不等为假
-ne:测试两个整数是否不等;不等为真,相等为假
-gt:测试一个数是否大于另一个数;大于为真,否则为假
-lt:测试一个数是否小于另一个数;小于为真,否则为假
-ge:大于或等于
-le:小于或等于

命令间的逻辑关系:

!:表示非(取反)
逻辑与:&&
逻辑或:|| CMD1 && CMD2
Example:id aaa && echo "hello aaa"
如果&&前的执行结果是假,总的结果就是假,没必要执行&&后的操作
如果CMD1成功了(真),就可执行CMD2
如果CMD1失败了(假),就不执行CMD2
如果aaa用户存在,则打印hello aaa;如果用户aaa不存在,则不进行打印 CMD1 || CMD2
Example:id aaa || useradd aaa
如果||前的执行结果是真,总的结果就是真,没必要执行||后的操作CMD2
如果CMD1成功了(真),就不执行CMD2
如果CMD1失败了(假),就可执行CMD2
如果用户aaa存在,就不执行创建aaa用户的命令;如果aaa用户不存在,则创建该用户 EXAMPLE:
id aaa && echo user aaa exists || useradd aaa
如果用户aaa存在,打印user aaa exists;如果用户不存在,则创建该用户;&&前如果为真,则整个逻辑与为真,再与后面的命令做逻辑或;
!id aaa && useradd aaa || echo user aaa exists
取反;如果用户不存在,则创建用户;如果用户存在,则打印user aaa exists;
!id bbb &>/dev/null && useradd aaa && echo 123456 | passwd --stdin bbb &>/dev/null || echo "bbb exists"
用户不存在则创建用户并且改密码;用户存在则打印bbb exists;
USERID=`id -u bbb`;[ $USERID -eq 0 ] && echo "admin" || echo "common"
如果bbb用户的uid等于0,打印admin;不等于0,打印common;

条件判断,控制结构:

单分支if语句

if 判断条件;then
statement1
statement2
...
fi Example1:
#!/bin/bash
NAME=aaa
if id $NAME &>/dev/null;then #id $NAME取的是命令的执行状态返回值;命令是否执行成功
echo "$NAME exists"
fi

双分支if语句

if 判断条件;then
statement1
statement2
...
else
statement3
statement4
...
fi Example2:
#!/bin/bash
NAME=aaa
USERID=`id -u $NAME` #`id -u $NAME`取的是命令的执行结果
if [ $USERID -eq 0 ];then #做等值判断需要加"[ ]"
echo "$NAME is admin" #可以不添加$USERID变量,写为 [ `id -u $NAME` -eq 0 ]
else
echo "$NAME is common"
fi Example3:
#!/bin/bash
grep "bash$" /etc/passwd &>/dev/null
if [ $? -eq 0 ];then
AUSER=`grep "bash$" /etc/passwd | head -1 | cut -d: -f1`
echo "The user is $AUSER"
else
echo no such user
fi
$?判断上一条命令执行是否成功,如果成功则状态返回值为0;当$?的状态返回值等于0时,那么限制一个用户,否则显示没有这样的用户 Example4:
#!/bin/bash
USERNAME=user2
USERID=`id -u $USERNAME`
GROUPID=`id -g $USERNAME`
if [ $USERID -eq $GROUPID ];then
echo "good boy"
else
echo "bad boy"
fi
判断用的UID和GID是否相等,相等显示good boy;不相等显示bad boy

shell中进行算数运算

第一种方法:

[root@localhost ~]# A=2
[root@localhost ~]# B=3
[root@localhost ~]# let C=$A+$B
[root@localhost ~]# echo $C
5

第二种方法:

[root@localhost ~]# A=6
[root@localhost ~]# B=8
[root@localhost ~]# C=$[$A+$B]
[root@localhost ~]# echo $C
14

第三种方法:

[root@localhost ~]# A=1
[root@localhost ~]# B=2
[root@localhost ~]# C=$(($A+$B))
[root@localhost ~]# echo $C
3

第四种方法:

[root@localhost ~]# A=3
[root@localhost ~]# B=3
[root@localhost ~]# C=`expr $A + $B`
[root@localhost ~]# echo $C
6 Example:
[root@localhost ~]# TIMESTAMP=`date +%s`
[root@localhost ~]# let USEDATES=$TIMESTAMP/86400
[root@localhost ~]# echo $USEDATES
18234

exit退出脚本

Example:
#!/bin/bash
USERNAME=user10
if ! grep "$USERNAME" /etc/passwd & >/dev/null;then #if会自动判断后面命令的状态返回值;0为真,1——255皆为假
echo "no such $USERNAME"
exit 1
fi
没有user10用户,打印 no such user10,并且exit退出整个脚本,状态返回值定义为1

shell脚本编程之条件判断的更多相关文章

  1. centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课

    centos  shell脚本编程2 if 判断  case判断   shell脚本中的循环  for   while   shell中的函数  break  continue  test 命令   ...

  2. SHELL脚本编程的条件测试

    SHELL脚本编程的条件测试 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.条件测试概述 判断某需求是否满足,需要由测试机制来实现 专用的测试表达式需要由测试命令辅助完成测试过 ...

  3. shell 脚本基础与条件判断

    #!shell脚本格式决定专业性 #!/bin/bash #filename:脚本名 #author:作者 #date:时间 #脚本作用 脚本的执行方式  #脚本名为wk.sh 绝对路径 /root/ ...

  4. Linux shell脚本之 if条件判断 (转)

    IF条件判断 1.基本语法: if [ command ]; then 符合该条件执行的语句 fi 2.扩展语法: if [ command ];then 符合该条件执行的语句 elif [ comm ...

  5. shell脚本--分支、条件判断

    在看选择判断结构之前,请务必先看一下数值比较与文件测试 if....else... #!/bin/bash #文件名:test.sh score=66 # //格式一 if [ $score -lt ...

  6. 5-4 bash脚本编程之三 条件判断及算术运算

    1. 反引号是引用执行结果,并非是返回值 如下是错误的,结果是一行行记录,不是返回值 放大为: 练习 2. shell中如何进行算术运算 A=3 B=4 1. let算术运算表达式 2. $[算术运算 ...

  7. Linux Shell脚本编程case条件语句

    1,判断一个数字是否则在1,2,3之中. #!/bin/bash read -p "pls input a number:" n case "$n" in ) ...

  8. 08 bash特性--shell脚本编程入门

    shell脚本编程入门 编程语言介绍 编程语言分为:机械语言.汇编语言和高级语言: 计算机能识别的语言为机械语言,而人类能学习的并且能够方便掌握的为高级语言,所以,我们所编写的程序就要通过编译来转换成 ...

  9. linux基础—课堂随笔_03 SHELL脚本编程基础

    shell脚本编程基础 条件选择:if语句 选择执行: 注意:if语句可嵌套 单分支 if(开头)判断条件:then条件为真的分支代码 fi(结尾) 双分支 if(开头)判断条件:then条件为真的分 ...

随机推荐

  1. node-red 流程的导入导出

    流程的导入导出 流程的导出 选中所要导出的流程,点击右上角三条杠按钮 有两个选项,导出到剪贴板和库 1. 导出到剪贴板 导出到剪贴板可以复制,粘贴到任何地方 [{,,,,,,"wires&q ...

  2. 使用mavan构建自定义项目脚手架

    首先抛出一个问题是为什么要构建自定义的脚手架,maven已经为了我么提供了很多脚手架,方便我们快速的创建一个普通java项目或者是web项目,然而在实际开发中,例如银行项目,大部分都是ssm架构,我们 ...

  3. Java性能优化学习笔记

    1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 第一,控制资源的使用,通过线程同步来控 ...

  4. Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient报错,问题排查

    背景 最近在整合pyspark与hive,新安装spark-2.3.3以客户端的方式访问hive数据,运行方式使用spark on yarn,但是在配置spark读取hive数据的时候,这里直接把hi ...

  5. Jsp页面显示时间:<fmt>标签问题

    <%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt"%> <%@ taglib ...

  6. css实现 textarea 高度自适应

    此textarea非彼textarea ,有经验的老司机们应该知道html标签contenteditable这个属性. 利用此属性使当前的标签成为可以输入的状态,等同于输入框. 演示地址:https: ...

  7. mysql 存储过程、视图---创建、调用、删除

    之前一直用的是Sql Server数据库,最近偶然机会接触到mysql.这里总结了关于mysql 存储过程.视图的“创建.调用.删除”示例 ============================== ...

  8. Android Jetpack组件

    带你领略Android Jetpack组件的魅力 Android新框架jetpack的内容讲解:Room.WorkManager.LifeCycles.LiveData.ViewModel.DataB ...

  9. 使用gulp构建项目

    gulp.js作为一个前端构建工具,类似于webpack.Grountjs.rollupjs,不过相对于其他几种打包工具,gulp的使用更轻量,配置更简单,打包速度更快,今天不说他们几个的区别,也不说 ...

  10. python内置异常层次

    内置异常 BaseException # 所有异常的基类 +-- SystemExit # 解释器请求退出 +-- KeyboardInterrupt # 用户中断执行(通常是输入^C) +-- Ge ...