一.整数运算工具
1.使用expr命令(运算两边必须有空格,引用变量时必须加$符号)
[root@svr5 ~]# x=10    //定义变量x
expr $x + 10      20      //加   (每个之间都要空格)
expr $x - 10      0       //减
expr $x \* 10     100     //乘
expr $x / 10      1       //除 (仅保留整数结果)
expr $x % 10      0       //求模
 
2.使用$[]或$(())表达式
乘法操作*无需转义,运算符两侧可以无空格;引用变量可省略 $ 符号;计算结果替换表达式本身,可结合echo命令输出。同样对于变量x=10:
[root@svr5 ~]# x=10    //定义变量x
echo $[x+10]       20
echo $[x-10]       0
echo $[x*10]       100
echo $[x/10]       1
echo $((x%10))     0
 
3.使用let命令(更改变量的值)
[root@svr5 ~]# x=10    //定义变量x
let y=x+10; echo $y=20
let x++;    echo $x=11
let x--;    echo $x=10
let x+=10;  echo $x=20
let x-=10;  echo $x=10
let x*=10;  echo $x=100
let x/=10;  echo $x=10
let x%=10;  echo $x=0
 
二.小数运算工具
1.bc进入交互环境计算加减乘除
2.bc非交互式运算
echo 'scale=4;12.345+67.891011' | bc
echo 'scale=2;12.34-56.78' | bc
echo 'scale=3;12.345*56.789' | bc
echo 'scale=1;12.345/56.789' |bc
小数的比较: >  >=  <  <= =  !=
 
三.条件测试
1.比较两个字符串是否相同
[ $USRE == "root" ];echo $?  0 (root用户)
[ $USER == "zhangsan" ];echo $? 非0 (root用户)
2.比较两个字符串是否不同
root下:[ $USER != "root" ];echo $?    1
非root:[ $USER != "root" ];echo $?  0
3.一条执行多条命令的情况
A && B :A成功,才执行B命令
A || B :A失败,才执行B命令
A;B    :依次执行,互不影响
A && B || C :如果A则B否则C
4.字符串的值为空/不为空
[ -z "" ] [ -n "str" ]
var1="str";var2=""
[ -z "$var1" ] && echo "为空" || echo "不为空"
[ -n "$var2" ] && echo "不为空" || echo "为空"
[ -! -z "$var2" ] && echo "不为空" || echo "为空"
5.整数值的比较
-eq 是否相等          (equal)
-ne 是否不相等        (not equle)
-gt 是否大于          (greater than)
-ge 是否大于等于      (greater or equal)
-lt 小于              (lesser than)
-le 小于等于          (lesser equal)
[root@svr5 ~]# x=20   
[ $x -le 10 ] && echo "小于或等于" || echo "大于"   ---大于
提取当前登陆用户数,判断是否大于3
n=$(who | wc -l);[ $n -ge 3 ] && ehco "大于等于3" ||  echo "小于3"
简化:[ $(who | wc -l) -ge 3 ] $$ echo "大于等于3" || echo "小于3"
6.识别文件/目录的状态
1> -e 判断是否存在,不管是目录还是文件
[ -e "/zhangsan/" ] && echo "存在" || echo "不存在" 
2> -d 判断对象是否为目录(存在且是目录)
[ -d "/opt/" ] && echo "是目录" || echo "不是目录"
[ -d "/opt/1.txt/" ] && echo "是目录" || echo "不是目录"
3> -f 对象是否是文件(存在且是文件)
4> -r 判断对象是否可读(文件,非root用户)
5> -w 判断对象是否可写(文件,非root用户)
6> -x 判断对象是否可执行
7.复合逻辑判断
1> 逻辑与 && 都成立为真
[root@svr5 ~]# x=10  //设置x变量的值为10
[ $x -ge 5 ] && [ $USER == "root" ] && echo "true" || echo "false"
2> 逻辑或 || 有一个真则为真
[ $x -ge 30 ] || [ $USER == "zhangsan" ] && echo "true" || echo "false"
[ $x -ge 10 ] || [ $USER == "zhangsan" ] && echo "true" || echo "false"
四.if选择结构
编写三个脚本:
   检测/media/cdrom目录,若不存在则创建
   检测并判断指定的主机是否可ping通
   从键盘读取一个论坛积分,判断论坛用户等级,等级分类如下:
          大于等于90 神功绝世
          大于等于80,小于90 登峰造极
          大于等于70,小于80 炉火纯青
          大于等于60,小于70 略有小成
          小于60 初学乍练

Shell 02 数据运算/条件测试的更多相关文章

  1. shell脚本进阶之条件测试与条件语句

       接着上篇博客,今天整理一下关于条件测试和条件语句方面的知识. shell脚本进阶之条件测试    在编写shell脚本时,经常需要对一些条件进行判断,可以使用测试命令test辅助完成测试过程.t ...

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

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

  3. Shell编程-05-Shell中条件测试与比较

    目录 Shell脚本条件测试 Shell文件测试 Shell字符测试 Shell整数测试 Shell逻辑测试 Shell条件测试总结 Shell脚本条件测试     在Shell脚本中各种条件结构和流 ...

  4. 【机器学习】机器学习入门02 - 数据拆分与测试&算法评价与调整

    0. 前情回顾 上一周的文章中,我们通过kNN算法了解了机器学习的一些基本概念.我们自己实现了简单的kNN算法,体会了其过程.这一周,让我们继续机器学习的探索. 1. 数据集的拆分 上次的kNN算法介 ...

  5. shell脚本中的条件测试if中的-z到-d的意思

    文件表达式 if [ -f  file ]    如果文件存在if [ -d ...   ]    如果目录存在if [ -s file  ]    如果文件存在且非空 if [ -r file  ] ...

  6. Shell脚本下条件测试(eq.ne.....)(转载)

    转载:http://cxj632840815.blog.51cto.com/3511863/1168709 Shell编程中的条件测试 在Linux编程中经常会用到判断数值的大小,字符串是否为空这样或 ...

  7. 工程师技术(五):Shell脚本的编写及测试、重定向输出的应用、使用特殊变量、编写一个判断脚本、编写一个批量添加用户脚本

    一.Shell脚本的编写及测 目标: 本例要求两个简单的Shell脚本程序,任务目标如下: 1> 编写一个面世问候 /root/helloworld.sh 脚本,执行后显示出一段话“Hello ...

  8. Shell基础(二):Shell中的数值运算、条件测试操作、使用if选择结构

    一.Shell中的数值运算 目标: 本案例要求熟悉Linux Shell环境的特点,主要练习以下操作: 1> 使用expr.$[ ].let等整数运算工具:定义变量X=1234,然后计算X与78 ...

  9. Shell学习笔记——算数运算与条件测试

    算数运算 1. 使用let命令 #!/sbin/bash var1=2 var2=3 let sum=var1+var2 echo $sum 使用let命令式,变量前不需要加$号 只用于整数运算,不适 ...

随机推荐

  1. 20190705-Python数据驱动之DDT

    DDT ddt 是第三方模块,需安装, pip install ddt DDT包含的装饰器 包含一个类装饰器@ddt和两个方法装饰器@data和@file_data 通常情况下,@data中的数据按照 ...

  2. SAS学习笔记7 合并语句(set、merge函数)

    set函数:纵向合并数据集 set语句进行纵向合并.set语句的作用是将若干个数据集依次纵向连接,并存放到data语句建立的数据集中.若set后面只有一个数据集,此时相当于复制的作用 注:data语句 ...

  3. 设计Qt风格的C++API

    在奇趣(Trolltech),为了改进Qt的开发体验,我们做了大量的研究.这篇文章里,我打算分享一些我们的发现,以及一些我们在设计Qt4时用到的原则,并且展示如何把这些原则应用到你的代码里. 优秀AP ...

  4. 音视频入门-04-BMP图像四字节对齐的问题

    * 音视频入门文章目录 * BMP 图像四字节对齐 表示 BMP 位图中像素的位元是以行为单位对齐存储的,每一行的大小都向上取整为4字节(32 位 DWORD)的倍数.如果图像的高度大于 1,多个经过 ...

  5. 虚拟机Vmware使用记录

    一直使用的是docker for windows,但是总会出现能打包,能打tag,但是push超时,所以想着弄个虚拟机来实现. 第一步: 安装VMware,安装一个ubantu最新的系统. 第二步: ...

  6. (十)mybatis之缓存

    一.缓存的意义 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)去查询,从缓存中进行查询,从而提高查询效率,解决了高并发系统的性能问题. 二.mybatis ...

  7. C# 高低位获取

    ushort Tbed = 2255; byte gao = (byte)(Tbed >> 8); byte di = (byte)(Tbed & 0xff); ushort a ...

  8. Java Web 深入分析(8) Servlet工作原理解析

    Servlet Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态We ...

  9. restTemplate源码解析(一)构造restTemplate的Bean实例

    所有文章 https://www.cnblogs.com/lay2017/p/11740855.html 正文 构造一个restTemplate的Bean实例很容易,只需这样配置 @Bean publ ...

  10. Mysql 更新时间

    Mysql时间加减函数为date_add().date_sub() 定义和用法DATE_ADD() 函数向日期添加指定的时间间隔.DATE_SUB() 函数向日期减少指定的时间间隔.语法DATE_AD ...