zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    CS229 6.4 Neurons Networks Autoencoders and Sparsity
    CS229 6.3 Neurons Networks Gradient Checking
    【Leetcode】【Easy】Min Stack
    【Leetcode】【Easy】Merge Sorted Array
    【Leetcode】【Easy】ZigZag Conversion
    【Leetcode】【Easy】Valid Palindrome
    【Leetcode】【Easy】Reverse Integer
    【Leetcode】【Easy】Palindrome Number
    【Leetcode】【Easy】Length of Last Word
    【Leetcode】【Easy】Remove Nth Node From End of List
  • 原文地址:https://www.cnblogs.com/zero527/p/6946912.html
Copyright © 2011-2022 走看看