zoukankan      html  css  js  c++  java
  • Linux初识(九)

    Linux初识(九)

    一、运算符

    part1 算术运算符

    +

    -

    *

    /

    %

    [root@MiWiFi-R3-srv ~]# echo $[3+1]
    4

    part2 关系操作

    与(())连用

    <

    >

    <=

    >=

    ==

    !=

    &&

    ||

    test命令相关,[]可以达到一样的效果
    [root@MiWiFi-R3-srv ~]# x=1
    [root@MiWiFi-R3-srv ~]# [ $x -gt 1 ]
    [root@MiWiFi-R3-srv ~]# echo $?
    0

    part3 赋值运算符

    =

    +=

    *=

    /=

    %=

    [root@MiWiFi-R3-srv ~]# x=10
    [root@MiWiFi-R3-srv ~]# ((x%3))
    [root@MiWiFi-R3-srv ~]# echo $x
    10
    [root@MiWiFi-R3-srv ~]#
    [root@MiWiFi-R3-srv ~]# ((x%=3))
    [root@MiWiFi-R3-srv ~]# echo $x
    1

    part4 shell里的所有计算器
    $[] (()) $(()) expr bc bc -l

    浮点运算:yum install bc -y

    [root@MiWiFi-R3-srv ~]# echo 'scale=2;1/3'|bc -l
    .33

    part5 测试操作

    命令执行后会返回到一个系统变量中 $?
    如果$?值为0 表示命令执行成功 否则为失败


    测试命令 test [ ] [[ ]] (( ))
    打开man test 逐一介绍每个参数
    part5-1、测试文件状态
    -d 目录
    -s 文件长度 > 0、非空
    -f 正规文件
    -w 可写

    -r 可读

    -x 可执行

    -L 符号连接

    -u 文件有 suid 位设置

    part5-2、字符串测试
    = 两个字符串相等
    != 两个字符串不相等
    -z 空串
    -n 非空串

    [root@MiWiFi-R3-srv ~]# var1='abc'
    [root@MiWiFi-R3-srv ~]# var2='123'
    [root@MiWiFi-R3-srv ~]# [ $var1 == $var2 ]
    [root@MiWiFi-R3-srv ~]# echo $?
    1

    part5-3、测试数值
    -eq 等于
    -ne 不等于
    -gt 大于
    -lt 小于
    -ge 大于等于
    -le 小于等于

    [root@MiWiFi-R3-srv ~]# [ 10000 -gt 250 ] #不要使用大于号小于号等于号等,要使用man test中规定的。
    [root@MiWiFi-R3-srv ~]# echo $?
    0

    part5-4、拓展测试符号 [[ ]] (())
    数字测试符号
    # [ 10 < 2 ] # 语法错误
    -bash: 2: 没有那个文件或目录

    # [[ 2 > 10 ]] # 结果错误
    # echo $?
    0
    # [[ 20 > 10 ]] # 正确
    # echo $?
    0
    # (( 10 < 20 ))
    # echo $?
    0

    字符测试
    # [ "aa" = "aa" ]
    # echo $?
    0
    # [[ "aa" = "aa" ]]
    # echo $?
    0
    # (( "aa" = "aa" )) #结果错误
    # echo $?
    1
    混合测试
    # [ a = a -a 10 < 20 ]
    -bash: 20: 没有那个文件或目录
    [root@seker ~]# [[ a = a -a 10 < 20 ]]
    -bash: syntax error in conditional expression
    -bash: syntax error near `-a'
    [root@seker ~]# [[ a = a && 10 < 20 ]]
    [root@seker ~]# echo $?
    0
    [root@seker ~]# [[ a = a || 10 < 20 ]]
    [root@seker ~]# echo $?
    0
    [root@seker ~]# (( a = a || 10 < 20 ))
    [root@seker ~]# echo $?
    0
    [root@seker ~]# (( a = a && 10 < 20 ))
    [root@seker ~]# echo $?
    0
    [root@seker ~]#
    结论:
    比较数字,使用(( ))
    其他测试使用 [[ ]]
    包含数字比较的混合测试,使用[[ expr1 && expr2 ]] (( expr1 || expr2 ))

    两个文件的比较
    FILE1 -ef FILE2
    测试两个文件是否是相同的inode
    有时为了找到同一个INODE号的文件 更倾向于使用 find 命令的 -inum 或 --samefile

    FILE1 -nt FILE2
    FILE1 is newer (modification date) than FILE2

    FILE1 -ot FILE2
    FILE1 is older than FILE2

    二、循环结构

    1、while循环

    while (条件)

    do
    动作
    done

    需要无限循环时我们会选择while :

    2、for循环

    C语言格式的for

    for ((i=1;i<=10;i++))
    do
    echo $i
    done


    shell格式的for

    for i in {1..10}
    do
    echo $i
    done

    shell的for,常用in列表方式

    复制代码
    for i in 1 2 3
    for i in {1,2,3}
    for i in {1..9}
    for i in {9..1}
    for i in {a..z}
    for i in {A..Z}
    for i in {X..Z}
    for i in $(cmd)
    for i in $(find ...)
    复制代码

    小例子

    复制代码
        检查内网存活的IP
        #!/bin/bash
    
        for i in {1..254}
        do
                (ping -W 1 -c 1 192.168.1.$i &> /dev/null && echo 192.168.1.$i) &
        done
        
        
        让文件测试脚本支持多个参数
        #!/bin/bash
        
        for i in $@
        do
          if [[ -d $i ]]
          then
            echo "$i is directory."
          elif [[ -b $i  ]]
          then
            echo "$i is block device."
          elif [[ -f $i ]]
          then
            echo "$i is a regular file."
          else
            echo "unknow."
          fi
        done
    复制代码

    多个for嵌套
    嵌套for中使用

    continue:默认退出本次循环

    break:默认退出本层循环

     

    可以直接在命令行写for循环

    # for i in {1..10};do [ $i -eq 5 ] && continue || echo $i;done
    # for i in {1..10};do [ $i -eq 5 ] && break || echo $i;done

  • 相关阅读:
    HTML+JSP的登录界面数据库链接
    链式前向星模板
    【洛谷【模板】最小生成树】
    【洛谷P1090 合并果子】
    Dijkstra【迪杰斯特拉算法】
    Bellman-Ford&&SPFA
    【一本通1248:Dungeon Master&&洛谷UVA532 Dungeon Master】
    【一本通1329:【例8.2】细胞&&洛谷P1451 求细胞数量】
    Floyed-Warshall【弗洛伊德算法】
    广搜
  • 原文地址:https://www.cnblogs.com/guozhenle/p/6944640.html
Copyright © 2011-2022 走看看