shell脚本编程之条件判断
条件测试类型:
整数测试
字符测试
文件测试
条件测试的表达式的三种方法:
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脚本编程之条件判断的更多相关文章
- centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课
centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 ...
- SHELL脚本编程的条件测试
SHELL脚本编程的条件测试 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.条件测试概述 判断某需求是否满足,需要由测试机制来实现 专用的测试表达式需要由测试命令辅助完成测试过 ...
- shell 脚本基础与条件判断
#!shell脚本格式决定专业性 #!/bin/bash #filename:脚本名 #author:作者 #date:时间 #脚本作用 脚本的执行方式 #脚本名为wk.sh 绝对路径 /root/ ...
- Linux shell脚本之 if条件判断 (转)
IF条件判断 1.基本语法: if [ command ]; then 符合该条件执行的语句 fi 2.扩展语法: if [ command ];then 符合该条件执行的语句 elif [ comm ...
- shell脚本--分支、条件判断
在看选择判断结构之前,请务必先看一下数值比较与文件测试 if....else... #!/bin/bash #文件名:test.sh score=66 # //格式一 if [ $score -lt ...
- 5-4 bash脚本编程之三 条件判断及算术运算
1. 反引号是引用执行结果,并非是返回值 如下是错误的,结果是一行行记录,不是返回值 放大为: 练习 2. shell中如何进行算术运算 A=3 B=4 1. let算术运算表达式 2. $[算术运算 ...
- Linux Shell脚本编程case条件语句
1,判断一个数字是否则在1,2,3之中. #!/bin/bash read -p "pls input a number:" n case "$n" in ) ...
- 08 bash特性--shell脚本编程入门
shell脚本编程入门 编程语言介绍 编程语言分为:机械语言.汇编语言和高级语言: 计算机能识别的语言为机械语言,而人类能学习的并且能够方便掌握的为高级语言,所以,我们所编写的程序就要通过编译来转换成 ...
- linux基础—课堂随笔_03 SHELL脚本编程基础
shell脚本编程基础 条件选择:if语句 选择执行: 注意:if语句可嵌套 单分支 if(开头)判断条件:then条件为真的分支代码 fi(结尾) 双分支 if(开头)判断条件:then条件为真的分 ...
随机推荐
- 额。。。c++ sort()排序问题
首先呢 记得 这是个快排 不稳定 基本格式 头文件 #include<algorithm> #include<iostream> bool cmp(int x,int y) { ...
- node-red 使用 创建第一个流程
前言 这只是一个简单的示例,具体详细文档去官网查看 官网指南:https://nodered.org/docs/user-guide/ 打开浏览器,进入编辑器页面:http://localhost:1 ...
- JS基础_强制类型转换-Number
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- OO第四单元(UML)单元总结
OO第四单元(UML)单元总结 这是OO课程的第四个单元,也是最后一个单元.这个单元只有两次作业,相比前三个单元少一次作业.而且从内容上讲这个单元的作业目的以了解UML为主,所以相对前三个单元比较简单 ...
- Fortify漏洞之Insecure Randomness(不安全随机数)
继续对Fortify的漏洞进行总结,本篇主要针对 Insecure Randomness 漏洞进行总结,如下: 1.Insecure Randomness(不安全随机数) 1.1.产生原因: 成弱 ...
- oracle 中查询当前用户可以看到的表名、表对应的所有字段 原
转自:https://my.oschina.net/u/3783799/blog/2870207 1.oracle 查询当前用户下的表名,表注释 select t.table_name, f.comm ...
- 输入web网站点击之后发生的事情
(1)用户在浏览器(客户端)里输入或者点击一个连接: (2)浏览器向服务器发送HTTP请求: (3)服务器处理请求,如果查询字符串或者请求体里含有参数,服务器也会把这些参数信息考虑进去: (4)服务器 ...
- Redhat下Oracle 12c单节点安装
操作系统:Redhat6.7 64位[root@Oracle12CDB ~]# more /etc/redhat-release Red Hat Enterprise Linux Server rel ...
- 【HCIA Gauss】学习汇总-数据库管理(数据库基本概念)-3
数据库:操作系统文件或磁盘数据块的集合数据库实例: 指操作系统中一系列进程以及为这些进程分配的内存块 通常来说一个数据库实例对应着一个数据库[数据库实例是访问数据的通道] 多实例:利用多实例 可以充分 ...
- MySQL的My.cnf模板(转)
[client] default-character-set = utf8mb4 port = PORT socket = /srv/myPORT/run/mysql.sock [mysqld] us ...