Shell脚本编程算术运算和条件测试

算术运算

1、bash中的算术运算:help let
        +, -, *, /, %取模(取余), **(乘方)
        实现算术运算:
                (1) let var=算术表达式
                (2) var=$[算术表达式]
                (3) var=$((算术表达式))
                (4) var=$(expr arg1 arg2 arg3 ...)
                (5) declare –ivar= 数值
                (6) echo ‘算术表达式’ | bc
2、乘法符号有些场景中需要转义,如*
3、bash有内建的随机数生成器:
            $RANDOM(0-32767)
            echo $[$RANDOM%50] :0-49之间随机数

赋值

1、增强型赋值:
        +=, -=, *=, /=, %=
2、let varOPERvalue
            例如:let count+=3
                    自加3后自赋值
3、自增,自减:
            let var+=1
            let var++
            let var-=1
            let var--

逻辑运算

1、true, false
            1, 0
2、与:(&)
            1 与1 = 1
            1 与0 = 0
            0 与1 = 0
            0 与0 = 0
------------------------------------
    与运算可以理解为并且的关系
            1代表真
            0代表假
                一个真和一个假与的结果是假
                有一个假的与出来的结果就是假的

    得出结论:
                谁和1与的保留原值
                和0与的不管是什么结果都是0
------------------------------------
3、或:(|)
    1 或1 = 1
    1 或0 = 1
    0 或1 = 1
    0 或0 = 0
------------------------------------
    或运算:
        真和真或结果为真
        1 || 1 = 1
        真和假或结果也为真
        1 || 0  = 1
        假和真或结果也是真
        0 || 1 = 1
        只有两个为假是结果才为假
        0 || 0 = 0

        结论:
            和真与的结果为真
            和假与的保留原值
------------------------------------

逻辑运算

1、非:!
    ! 1 = 0
    ! 0 = 1
2、短路运算
    短路与 (&&)
        第一个为0,结果必定为0
        第一个为1,第二个必须要参与运算
    短路或 (||)
        第一个为1,结果必定为1
        第一个为0,第二个必须要参与运算
3、异或:^
    异或的两个值,相同为假,不同为真
------------------------------------------
示例:判断一个文件是否存在,如果存在就给文件加上执行权限
    1、文件存在时。后续命令继续执行
    [[email protected] ~]#ls anaconda-ks.cfg &> /dev/null && chmod +x anaconda-ks.cfg
    [[email protected] ~]#ll
    total 1244
    -rwx--x--x. 1 root root    1559 Jul 18 20:55 anaconda-ks.cfg

    2、文件不存在时。后续命令就不再执行了
    [[email protected] ~]#ls an &> /dev/null && chmod +x an
    [[email protected] ~]#echo $?
    2
示例:判断一个账号是否存在,不存在则创建此账号
    [[email protected] ~]#id coodf &> /dev/null || useradd coodf
    [[email protected] ~]#echo $?
    0
    [[email protected] ~]#getent passwd coodf
    coodf:x:1004:1004::/home/coodf:/bin/bash
    [[email protected] ~]#
示例;用异或来兑换两个数字的位置
[[email protected]~/bin]#a=10;b=7;a=$[a^b];b=$[a^b];a=$[a^b]; echo $a $b
    7 10
------------------------------------------

条件测试

1、判断某需求是否满足,需要由测试机制来实现
        专用的测试表达式需要由测试命令辅助完成测试过程
2、评估布尔声明,以便用在条件性执行中
        ?若真,则返回0
        ?若假,则返回1
3、测试命令:
        ?test EXPRESSION
        ?[ EXPRESSION ]
        ?[[ EXPRESSION ]]
            [[ EXPRESSION ]]
                == 相同,字符串不要加"",支持通配符
                =~ 匹配,字符串不要加"",支持扩展正则表达式
        注意:EXPRESSION前后必须有空白字符
-------------------------------------------------
避免空值的写法 加X即可
    [[email protected] ~]#[ X"$name" = X"$title" ] && echo true || echo false
    false

    [[ ]] 变量要加"" 正则表达式不用加""
    [[email protected] ~]#var=abc;[[ "$var" =~ ^a ]] && echo true|| echo false
    true

    判断是否以.conf结尾
    [[email protected] ~]#filename=a.conf
    [[email protected] ~]#[[ "$filename" =~ \.conf$ ]] &&echo true || echo false
    true

    [[email protected] ~filename=a.con
    [[email protected] ~[[ "$filename" =~ \.conf$ ]] && echo true || echo false
    false

    判断一个是否为文件并且这个文件是否有写权限,如果有写权限就给它去掉
    [[email protected] ~]#file=/etc/issue;[ -f $file -a -w $file ] && chmod -w $file

    判断一个是否为文件或者这个文件是否有写权限,如果有写权限就给它去掉
    [[email protected] ~]#file=/etc/issue;[ -f $file -a -w $file ] && chmod -w $file

    判断一个文件不具有写权限,如果没有就给它加上写权限
    [[email protected] ~]#file=/etc/issue;[ ! -w $file ] && chmod +w $file 

    判断一个文件是否具有执行权限,如果没有就给它加上执行权限
    [[email protected] ~]#file=/etc/shadow ; [ ! -x $file ] && chmod +x $file
    [[email protected] ~]#ll /etc/shadow
    ---x--x--x 1 root root 1220 Sep 22 08:26 /etc/shadow
    [[email protected] ~]#
----------------------------------------------------------

条件性的执行操作符

根据退出状态而定,命令可以有条件地运行
    ?&& 代表条件性的AND THEN
    ?|| 代表条件性的OR ELSE
-------------------------------------
示例:
[[email protected] ~]#grep -q no_such_user /etc/passwd || echo ‘No such user‘
No such user

test命令

1、长格式的例子:
    test "$A"="$B"&&echo"Stringsareequal"
    test“$A”-eq“$B”&&echo"Integersareequal"
2、简写格式的例子:
    ["$A"="$B"]&&echo"Stringsareequal"
    ["$A"-eq"$B"]&&echo"Integersareequal"

bash的数值、字符串测试

1、-v VAR
    变量VAR是否设置
2、数值测试:
    -gt是否大于
    -ge是否大于等于
    -eq是否等于
    -ne是否不等于
    -lt是否小于
    -le是否小于等于
3、字符串测试:
    =是否等于
    >ascii码是否大于ascii码
    <是否小于
    !=是否不等于
    =~左侧字符串是否能够被右侧的PATTERN所匹配
    注意: 此表达式一般用于[[ ]]中;扩展的正则表达式
    -z "STRING“字符串是否为空,空为真,不空为假
    -n "STRING“字符串是否不空,不空为真,空为假
4、注意:用于字符串比较时的用到的操作数都应该使用引号

Bash的文件测试

1、存在性测试
    -a FILE:同-e
    -e FILE: 文件存在性测试,存在为真,否则为假
2、存在性及类别测试
    -b FILE:是否存在且为块设备文件
    -c FILE:是否存在且为字符设备文件
    -d FILE:是否存在且为目录文件
    -f FILE:是否存在且为普通文件
    -h FILE 或-L FILE:存在且为符号链接文件
    -p FILE:是否存在且为命名管道文件
    -S FILE:是否存在且为套接字文件
3、文件权限测试:
    -r FILE:是否存在且可读
    -w FILE: 是否存在且可写
    -x FILE: 是否存在且可执行
4、文件特殊权限测试:
    -u FILE:是否存在且拥有suid权限
    -g FILE:是否存在且拥有sgid权限
    -k FILE:是否存在且拥有sticky权限
5、文件大小测试:
    -s FILE: 是否存在且非空
6、文件是否打开:
    -t fd: fd文件描述符是否在某终端已经打开
    -N FILE:文件自从上一次被读取之后是否被修改过
    -O FILE:当前有效用户是否为文件属主
    -G FILE:当前有效用户是否为文件属组
7、双目测试:
    FILE1 -efFILE2: FILE1是否是FILE2的硬链接
    FILE1 -ntFILE2: FILE1是否新于FILE2(mtime)
    FILE1 -otFILE2: FILE1是否旧于FILE2

Bash的组合测试条件

1、第一种方式:
        COMMAND1 && COMMAND2 并且
        COMMAND1 || COMMAND2 或者
        ! COMMAND 非
        如:[[ -r FILE ]] && [[ -w FILE ]]
2、第二种方式:
        EXPRESSION1 -a EXPRESSION2 并且
        EXPRESSION1 -o EXPRESSION2 或者
        ! EXPRESSION
        必须使用测试命令进行

原文地址:http://blog.51cto.com/dklwj/2292355

时间: 2024-08-27 19:47:29

Shell脚本编程算术运算和条件测试的相关文章

shell脚本编程总结

shell脚本是什么? (1)命令的堆积: (2)程序逻辑: 如何写shell脚本: 脚本文件的第一行,顶格:给出shebang,解释其路径,用于指明解释执行当前脚本的解释器程序文件. 常见的解释器: #!/bin/bash #!/usr/bin/python #!/usr/bin/perl 运行脚本: (1)赋予执行权限,并直接运行此程序文件: (2)直接运行解释器,将脚本以命令行参数传递给解释器程序: bash /PATH/TO/SCRIPT_FILE 注:脚本中的空白行会被解释器忽略. 脚

Shell脚本编程概述(一):算数运算和条件测试

一.shell脚本语言 1.编程语言的分类: (1)根据运行方式 编译运行:源代码 --> 编译器 (编译)--> 程序文件: 解释运行:源代码 --> 运行时启动解释器,由解释器边解释边运行: (2)根据其编程过程中功能的实现是调用库还是调用外部的程序文件: shell脚本编程:利用系统上的命令及编程组件进行编程: 完整编程:利用库或编程组件进行编程: (3)编程模型: 过程式编程语言:以指令为中心来组织代码,数据是服务于代码: 顺序执行.选择执行.循环执行:代表:C,bash 面向对

shell脚本中的算术运算和条件测试语句

shell脚本编程实现算术运算有: +.- *./ 模运算 % 乘方 ** 或 ^ 特殊的增强型算术运算: ++ -- 算术运算方法 1.let命令 VAR=算术表达式 将算术表达式先行进行算术运算并将运算结果保存到变量VAR中 2.VAR=$[算术表达式]   []内如果引用变量,可以使用$ 也可以省略掉$ 3.VAR=$((算术表达式)) 即把[]换成(()) 4.expr ARG1 ARG2 ARG3 ARG1和ARG3必须是数值,ARG2必须是运算符 5.echo "算术表达式"

Shell脚本编程---条件判断if

SHELL脚本编程---判断 1.条件判断 条件判断在bash分为整数判断,字符判断和文件判断. 1-1条件判断的表达式: ① [ expression ] (注意单词词头和词尾都需要空格) ② [[ expression ]](注意同上) ③ test expression 1-2 整数比较 ① -eq  测试两个数是否相等,相等为真,不等为假 ② -ne  测试两个数是否不等, 反之. ③ -gt (大于),-lt (小于),-ge(大于或等于),-le(小于或等于) 逻辑与:&&  

shell脚本编程:条件判断if语句使用小结

shell脚本编程,有三种控制结构分别是:顺序结构,条件判断结构,循环结构.本文将总结shell脚本中条件判断结构的使用方法. 条件判断结构分为三种,单分支,双分支,多分支,等结构. 单分支结构的语法如下: if [ expression  ] ;then statement1 statement2 ......... fi 双分支语法结构: if [ expression ];then statement1 statement2 ..... else statement3 statement4

Shell脚本编程知识点总结及范例

 一:关于语言 1)编译性语言 编译型语言多半运作于底层,所处理的是字节.整数.浮点数或其它及其机器层经的对象.处理过程为:源程序--预处理--编译--汇编--链接,编译性语言为静态语言. 2)解释性语言 解释性语言读入程序代码并将其转化为内部的形式加以执行.处理过程:解释性(文本文件)-解释器去读取并执行.解释性语言为动态语言. 二:基础 变量类型 linux脚本中的变量不需要事先声明,而是直接定义使用(这点不同于其他高级编程语言中变量的使用)bash变量类型分为本地变量和环境变量. 本地变量

Linux 的shell脚本编程

shell脚本编程 程序:指令+数据 程序编辑风格:             过程式:以指令为中心,数据服务于指令             对象式:以数据为中心,指令服务于数据 shell程序:提供了编程能力,解释执行 计算机:运行二进制指令 编程语言: 低级:汇编语言 高级:编译:高级语言-->编译器-->目标代码 java,c#,c,c++ 解释:高级语言-->解释器-->机器代码 shell,per,python 编程逻辑处理方式:           顺序执行      

Shell脚本编程基础

什么是Shell 操作系统最外层的程序,shell通过提示符让用户输入,向操作系统解释该输入,然后处理来自操作系统的任何结果输出来,管理用户与操作系统之间的交互. Shell是一个用户跟操作系统之间的一个命令解释器.Shell是用户与Linux操作系统之间沟通的桥梁.用户可以输入命令执行,又可以利用 Shell脚本编程去运行. 为什么要用到shell shell是一个交互式程序,当用户输入一条命令,shell就解释一条,一次只处理一条命令.如果我们一些复杂操作,逐个敲命令工作量就会增大,因此,我

8.11_Linux之bash shell脚本编程入门篇(一)

什么是bash shell脚本编程? 答:Linux里面有多种shell,而CentOS和redhat的默认shell是bash shell.至于shell脚本,这个跟windows操作系统里面的批处理文件有点像(.bat的文件).不知道大家还是否记得Linux的哲学思想吗?其中有那么两点点:由众多目的的单一应用程序组成:一个程序只做一件事,且做好:组合目的的单一的小程序完成复杂的任务.我觉得shell脚本编程就很好的体现了这个哲学思想.shell脚本利用shell的功能缩写的一个"程序&quo