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条件为真的分 ...
随机推荐
- html 滚动条样式
转载:https://www.cnblogs.com/yclblog/p/6806496.html /*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/ ::-webkit-scrollbar ...
- 【雅思】【绿宝书错词本】List37~48
List 37 ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ List 38 ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ ❤ List 39 ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ...
- centOS学习part6:安装oracle 11g
0 大家好.上一章(http://www.cnblogs.com/souvenir/p/3881484.html)我们对oracle在centOS下的安装进行了各项环境准备,本章我们将正式进行oral ...
- WIN7U X64环境下的SQL SERVER 2008R2的防火墙配置
测试需要,备忘. CMD下运行,可以把sql server 要用的端口都开好. netsh advfirewall firewall add rule name = SQLPort dir = in ...
- Arm存储器
Arm可以引出27根地址线,只能实现128MB的寻址,那么要如何实现1GB的寻址呢?答案就是使用nGCS片选线,nGCSx为低电平为选中相应的外接设备.一共八根片选线,也就是bank1,bank2-以 ...
- 解决通过vue-router打开tab页,下次进入还是上次history缓存的界面状态的问题
一.问题描述: 1. 跳转模式:界面A-->界面B(界面A中通过 this.$router.push({name:'组件B名称', params: {参数}}) 通过打开新tab页的方式打开界面 ...
- 【转】三个重复的ACK意味着发生拥塞?
三次重复的ACK,可能是丢包引起的,丢包可能是网络拥塞造成的,也可能是信号失真造成的. 三次重复的ACK,也有可能是乱序引起的,而乱序和网络拥塞没有直接关系. 如果就写这两行,感觉什么都没写,接下来的 ...
- 安装CDH 5.15.1详解
安装CDH 5.15.1详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装Cloudera Manager 和CDH 1>.登陆Cloudera Manager ...
- vue中8种组件通信方式, 值得收藏!
vue是数据驱动视图更新的框架, 所以对于vue来说组件间的数据通信非常重要,那么组件之间如何进行数据通信的呢? 首先我们需要知道在vue中组件之间存在什么样的关系, 才更容易理解他们的通信方式, 就 ...
- Python_Day2_共享你的代码
一.编写简单的函数,保存一下. # coding=utf-8 """ 这是“nester.py”模块,提供了一个名为print_lol的函数,这个函数的作用是打印列表,其 ...