美文网首页linux basic knowledge
shell脚本学习(四)[判断和循环]

shell脚本学习(四)[判断和循环]

作者: 巩翔宇Ibrahimovic | 来源:发表于2020-01-21 21:56 被阅读0次

    Chapter15 test比较

    测试与判断
    退出程序命令
    exit
    exit 10 返回10给shell,返回值非0位不正常退出
    $? 判断当前shell前一个进程是否正常退出

    vim 8.sh
    #!/bin/bash
    # demo exit
    pwd
    exit
    bash 8.sh
    

    测试命令test

    1.test命令用于检查文件或者比较值。

    2.test可以做以下测试:

    文件测试,整数比较测试,字符串测试。

    3.test测试语句可以简化为 [] 符号。

    4.[] 符号还有扩展写法 [[]],支持&& || < >

    #使用man test查看test用法
    usage:test EXPRESSION,也可以用中括号代替test,推荐使用。
    #字符串测试,test区分大小写。
    STRING1 = STRING2 #字符串相等
    STRING1 != STRING2 #字符串不相等
    -z STRING #字符串长度为0
    #整数比较,使用单个中括号时要用下面的字母,两个中括号连用时,可以用符号,如大于号小于号等。
    INTEGER1 -eq INTEGER2 #equal
    INTEGER1 -ge INTEGER2 #greater or equal
    INTEGER1 -gt INTEGER2 #greater
    INTEGER1 -le INTEGER2 #less or equal
    INTEGER1 -lt INTEGER2 #less than
    #对文件的判断
    [-d /etc/ ]  #-d file 文件存在并且是目录
    [-e /etc/ ]   #-e file 文件存在
    [-d /etc/passwd ]  #-f file 文件存在并且是一个普通文件
    

    Chapter16 if判断的使用

    使用if-then语句

    if-then语句的基本用法:

    if [ 测试条件成立 ] 或 命令返回值是否为0

    then 执行相应命令

    fi 结束

    #if [] 来判断用户ID
    if [ $UID =0 ]
    then
       echo "root user"
    fi
    #if command  使用pwd做测试
    if pwd
    then
       echo " pwd running"
    fi
    

    Chapter17 if-else判断的使用

    使用if-then-else语句
    只有单一的条件,非此即彼的关系才使用。

    if-then-else语句可以在条件不成立时也运行相应的命令:

    if [ 测试条件成立 ]

    then 执行相应命令

    else 测试条件不成立,执行相应命令

    fi 结束

    举例:

    #判断当前用户是否是root
    vim 9.sh
    #!/bin/bash
    #if else demo
    
    if [ $USER = root];then
       echo "root user"
    else
       echo "other user"
    fi
    chmod u+x 9.sh
    

    使用if-elif-else语句

    if-then-else语句可以在条件不成立时也运行相应的命令,即三种并列,添加了两种条件。

    if [ 测试条件成立 ]

    then 执行相应命令

    elif [ 测试条件成立 ]

    then 执行相应命令

    else 测试条件不成立,执行相应命令

    fi 结束

    #判断当前用户
    vim 10.sh
    #!/bin/bash
    #root user1 other
    if [ $USER = root ];then
            echo "root"
    elif [ $USER = user1 ];then
            echo "user1"
    else
            echo " other user"
    fi
    

    Chapter18 嵌套if的使用

    简而言之就是,if满足一个条件后,再去判断,再执行。

    if [ 测试条件成立 ]

    then 执行相应命令

    ​ if [ 测试条件成立 ]

    ​ then 执行相应命令

    ​ fi

    fi 结束

    vim 11.sh
    #!/bin/bash
    #demo if then if then fi fi
    if [ $UID = 0 ];then
           echo "please run"
           if [ -x /tmp/10.sh ] ; then
                 /tmp/10.sh #判断10.sh是否有可执行权限
            fi
    else
           echo " switch user root"
    fi
    

    Chapter19 case分支

    与if可以互换,case语句和select语句可以构成分支。
    这一部分并未进行深入学习。

    case "$变量" in

    ​ "情况1" )

    ​ 命令... ;;

    ​ "情况2")

    ​ 命令... ;;

    ​ *);;

    esac

    vim 12.sh
    #!/bin/bash
    # case demo
    case "$1" in
           "start"|"START")
           echo $0 start.....
           ;;
           "stop")
           echo $0 stop.....
           ;;
           "restart"|"reload")
           echo $0 restart.....
           ;;
           *) #输入错误命令时会匹配*号。
           echo "Usage: $0 {start|stop|restart|reload}"
           ;;
    esac
    

    Chapter20 循环

    1.使用for循环遍历命令的执行结果

    for循环的语法

    ​ for 参数 in 列表

    ​ do 执行的命令

    ​ done 封闭一个循环

    *使用反引号或$()方式执行命令,命令的结果当作列表进行处理。

    *列表中包含多个变量,变量用空格分隔

    *对文本处理,要使用文本查看命令取出文本内容

    *默认逐行处理,如果文本出现空格会当作多行处理。

    {1..9} #花括号产生列表
    mkdir {1..9} #产生9个目录
    
    for i in {1..9}
    do
    echo hello ;echo $i
    done
    #对文件批量改名,这一部分代码我用着是报错的,并没有达到我的目的
    for filename in 'ls *.mp3'
    do
    mv $filename $(basename $filename .mp3).mp4
    done
    
    #使用basename提取出.mp3前面的名字 usage: basename filename.扩展名 扩展名
    
    

    2.使用for循环遍历变量和文件的内容

    for循环更像是从列表中取出元素,处理完之后,再取出另一个元素。

    2.1列表中包含多个变量,变量用空格分隔

    2.2对文本处理,要使用文本查看命令取出文本内容

    默认逐行处理,如果文本出现空格会当作多行处理。

    Chapter21 C语言风格的for命令

    这部分内容并未做深入了解,由于恐惧心理。

    for ((变量初始化;循环判断条件;变量变化))

    do

    ​ 循环执行的命令

    done

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

    Chapter22 while循环和until循环

    while循环

    写法:
    while test测试一直成立

    do

    ​ 命令

    done

    until循环

    与while循环相反,循环测试为假时,执行循环,为真时循环停止。

    a=1
    while [ $a -lt 10 ];
    do  ((a++));
    echo $a;
    done
    #until的死循环
    until [ 5 -lt 4 ];
    do
    echo always;
    done
    

    讲者说,while使用的更常见。

    相关文章

      网友评论

        本文标题:shell脚本学习(四)[判断和循环]

        本文链接:https://www.haomeiwen.com/subject/mbqyzctx.html