• Linux基础系列-Day9


    算术运算符

    设置变量a=10,b=4

    +  加法

    [root@localhost ~]# echo $[$a+$b]
    14

    -  减法

    [root@localhost ~]# echo $[$a-$b]
    6

    *  乘法

    [root@localhost ~]# echo $[$a*$b]
    40

    /  除法,因为是整除,所以只等于2

    [root@localhost ~]# echo $[$a/$b]
    2

    %  取余

    [root@localhost ~]# echo $[$a%$b]
    2

    在脚本中可以使用expr调用

    [root@localhost ~]# echo `expr $a + $b`
    14
    [root@localhost ~]# echo `expr $a - $b`
    6
    [root@localhost ~]# echo `expr $a * $b`
    40
    [root@localhost ~]# echo `expr $a / $b`
    2
    [root@localhost ~]# echo `expr $a % $b`
    2


    赋值运算符

    =  赋值,用于变量赋值

    [root@localhost ~]# a=5
    [root@localhost ~]# b=$a
    [root@localhost ~]# echo $b
    5

    +=  变量经过加法运算后赋值

    [root@localhost ~]# x=0
    [root@localhost ~]# ((x+=5))
    [root@localhost ~]# echo $x
    5

    *=  变量经过乘法法运算后赋值

    [root@localhost ~]# x=5
    [root@localhost ~]# ((x*=5))
    [root@localhost ~]# echo $x
    25

    /=  变量经过除法法运算后赋值

    [root@localhost ~]# x=5
    [root@localhost ~]# ((x/=2))
    [root@localhost ~]# echo $x
    2

    %=  变量经过取余运算后赋值

    [root@localhost ~]# x=5
    [root@localhost ~]# ((x%=2))
    [root@localhost ~]# echo $x
    1

    字符串关系运算符

    ==  对比两个字符串是否相等,相等为真

    [root@localhost ~]# a=abc
    [root@localhost ~]# b=abc
    [root@localhost ~]# [[ $a == $b ]]
    [root@localhost ~]# echo $?      #  $?返回上一条命令执行状态,0为成立,即为真
    0

    !=  对比两个字符串是否不想等,不想等为真

    [root@localhost ~]# a=abc
    [root@localhost ~]# b=abb
    [root@localhost ~]# [[ $a == $b ]]
    [root@localhost ~]# echo $?
    1
    [root@localhost ~]# [[ $a != $b ]]
    [root@localhost ~]# echo $?
    0

    整数关系运算符

    格式:[ 整数 运算符 整数 ]

    -eq  等于

    [root@localhost ~]# [ 5 -eq 5 ]
    [root@localhost ~]# echo $?
    0

    -gt  大于

    [root@localhost ~]# [ 8 -gt 5 ]
    [root@localhost ~]# echo $?
    0

    -lt  小于

    [root@localhost ~]# [ 3 -lt 5 ]
    [root@localhost ~]# echo $?
    0

    -ge  大于等于

    [root@localhost ~]# [ 5 -ge 5 ]
    [root@localhost ~]# echo $?
    0
    [root@localhost ~]# [ 5 -ge 3 ]
    [root@localhost ~]# echo $?
    0

    -le  小于等于

    [root@localhost ~]# [ 3 -le 3 ]
    [root@localhost ~]# echo $?
    0
    [root@localhost ~]# [ 3 -le 5 ]
    [root@localhost ~]# echo $?
    0

    -ne  不等于

    [root@localhost ~]# [ 3 -ne 5 ]
    [root@localhost ~]# echo $?
    0

    文件的比较运算

    -nt  (newer than)判断file1是否比file2新

    [root@localhost ~]# [ abc.txt -nt aaa.txt ]
    [root@localhost ~]# echo $?
    1

    -ot  (older than)判断file是否比file2旧

    [root@localhost ~]# [ abc.txt -ot aaa.txt ]
    [root@localhost ~]# echo $?
    0

    -ef  判断file1与file2是否为同一个文件,可用在判断hard link上

    [root@localhost ~]# [ abc.txt -ef aaa.txt ]
    [root@localhost ~]# echo $?
    1

    逻辑运算符

    -a 或 && :逻辑与,“而且”的意思,前后两个表达式都成立时整个测试结果才为真,否则为假

    [root@localhost ~]# a=3
    [root@localhost ~]# b=6
    [root@localhost ~]# [ $a -ne 6 ] && [ $b -gt 9 ]
    [root@localhost ~]# echo $?    #因为a不等于6,b不大于9,所以左边成立,右边不成立,故总体是不成立的
    1
    [root@localhost ~]# [ $a -ne 6 ] && [ $b -gt 4 ]
    [root@localhost ~]# echo $?    #因为a不等于6,b大于4,左右都是成立的,故总体成立
    0
    [root@localhost ~]# [ $a -ne 6 -a $b -gt 4 ]
    [root@localhost ~]# echo $?
    0

    -o 或 || : 逻辑或,“或者”的意思,操作符两边至少一个为真时,结果为真,否为为假

    [root@localhost ~]# a=3
    [root@localhost ~]# b=6
    [root@localhost ~]# [ $a -ne 6 ] || [ $b -gt 9 ]
    [root@localhost ~]# echo $?    #因为左边a不等于6成立,故整体成立
    0
    [root@localhost ~]# [ $a -ne 3 ] || [ $b -gt 4 ]
    [root@localhost ~]# echo $?    #因为右边b大于4成立,故整体成立
    0
    [root@localhost ~]# [ $a -ne 3 ] || [ $b -gt 9 ]
    [root@localhost ~]# echo $?    #因为左右两边都不成立,故整体不成立
    1

    ! :逻辑否,当制定条件不成立时,返回结果为真

    [root@localhost ~]# [ ! $a -ne 3 ] || [ $b -gt 9 ]
    [root@localhost ~]# echo $?    #因为左边a等于3,经过-ne判断为假,又经过!否定了假,所以为真成立
    0

    test测试操作

    test可以用[]代替,如test -e abc.txt可以写成 [ -e abc.txt ]

    文件类型判断

    -e  该文件名是否存在

    -f  该文件名是否存在且为file

    -d  该文件名是否存在且为目录

    -b  该文件名是否存在且为一个block

    -c  该文件名是否存在且为一个character device设备

    -S  该文件名是否存在且为一个socket文件

    -p  该文件名是否存在且为一个FIFO(pipe)文件

    -L  该文件名是否存在且为一个连接文件

    示例:

    [root@localhost ~]# touch abc.txt
    [root@localhost ~]# test -e abc.txt 
    [root@localhost ~]# echo $?
    0
    [root@localhost ~]# test -e asdfg.txt 
    [root@localhost ~]# echo $?
    1
    [root@localhost ~]# test -f abc.txt 
    [root@localhost ~]# echo $?
    0

    文件权限检测

    -r  检测文件名是否存在且具有“可读”权限

    -w  检测文件名是否存在且具有“可写”权限

    -x  检测文件名是否存在且具有“可执行”权限

    -u  检测文件名是否存在且具有“SUID”权限

    -g  检测文件名是否存在且具有“SGID”权限

    -k  检测文件名是否存在且具有“Sticky bit”权限

    -s  检测文件名是否存在且为“非空白文件”

    示例:

    [root@localhost ~]# test -r abc.txt 
    [root@localhost ~]# echo $?
    0
    [root@localhost ~]# test -x abc.txt 
    [root@localhost ~]# echo $?
    1

    字符串数据判断

    -z  判断字符串是否为0,若为空返回true(0)

    [root@localhost ~]# test -z "abc"
    [root@localhost ~]# echo $?
    1

    -n  判断字符串是否为0,若为空返回false(0)

    [root@localhost ~]# test -n "abc"
    [root@localhost ~]# echo $?
    0

    流程控制

    if单分支:当“条件成立”时执行相应的操作。

    if 条件测试操作
    then
      命令序列
    fi

     

    示例:当100大于80时,输出True

    if [ 100 -gt 80 ];
    then
        echo "True"
    fi

    if双分枝:当“条件成立”、“条件不成立”时执行不同操作。

    if 条件测试命令
    then
        命令序列1
    else
        命令序列2
    fi

    示例:当检查到存在abc.txt,输出True,否则输出False

    #!/bin/bash
    if [ -e abc.txt ];
    then
        echo "True"
    else
        echo "False"
    fi

    if多分枝:相当于if语句嵌套,针对多个条件执行不同操作。

    if 条件测试命令1; then
        命令序列1
    elif 条件测试命令2;then
        命令序列2
    elif ...
    else
        命令序列n
    fi

    for循环:根据标量的不同取值,重复执行一组命令操作。

    for 变量名 in 取值列表
    do
        命令序列
    done

     示例1:依次打印数字1到5

    #!/bin/bash
    for x in [1..5]
    do
        echo number $x
    done 

    while条件循环:重复测试指令的条件,只要条件为真则反复执行对应的命令操作,直到条件为假。如果使用true作为循环条件能够产生无限循环。

    while 命令表达式
    do
        命令列表
    done

    示例:批量添加20个系统账户用户名依次为user1~20

    #!/bin/bash
    i=1
    while [ $i -le 20 ]
    do
        useradd user$1
        echo "123456" | passwd --stdin user$i &> /dev/null
        i=`expr $i + 1`
    done
  • 相关阅读:
    【题解】 [yLOI2019] 梅深不见冬
    【题解】[CSP-S2019] Emiya 家今天的饭
    【题解】Acwing400. 太鼓达人
    【题解】[ZJOI2007]最大半连通子图
    【题解】Acwing395. 冗余路径
    【题解】CF487E Tourists
    “𣎴” 这个字存Mysql Incorrect string value: 'xF0xA3x8ExB4' for column 'msg' at row 1
    logminer分析异机db的归档日志(外部文件)
    logminer存储在外部文件(external file)
    logminer分析在线redo log
  • 原文地址:https://www.cnblogs.com/zero527/p/6946912.html
Copyright © 2020-2023  润新知