• SHELL编程基础2


    if语句

    if单分支

    if单分支的语法组成

    方式一:
    if  条件测试;then  
    	命令序列
    fi
    
    方式二
    if  条件测试
    	then 命令序列
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    应用案例

    [root@som day01]# vim user_v2.sh
    #!/bin/bash
    read -p "请输入用户名:" user
    read -s -p "请输入密码:" pass
    if [ ! -z "$user" ] && [ ! -z "$pass" ];then
        useradd "$user"
        echo "$pass" | passwd --stdin "$user"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    if多分支

    • if双分支的语法组成:既可以执行成功的命令,也可以执行失败的命令
    if双分支
    if  条件测试;then
    	命令序列1
    else  
    	命令序列2
    fi
    
    if多分支
    if    条件测试1 ;then  
    		命令序列1
    elif  条件测试2 ;then  
    		命令序列2
    else
    		命令序列n
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    案例

    [root@som day01]# echo $RANDOM             #系统随机生成的数字
    [root@som day01]# vim guess_num.sh
    #!/bin/bash
    clear
    num=$[RANDOM%10+1]
    read -p "请输入1-10之间的整数:" guess
    if [ $guess -eq $num ];then
          echo "恭喜你,才猜对了,就是$num"
    elif [ $guess -lt $num ];then
          echo "Oops,猜小了"
    else
          echo "Oops,猜大了"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    for循环

    • 根据变量的不同取值,重复执行命令序列(for循环使用场合,在知道循环次数的时候使用)
    for循环的语法结构:第一种格式
    
    for  变量名  in  值列表
    do
    	命令序列
    done
    案例:
    [root@som ~]# cd /root/shell/day01/
    [root@som day01]# vim for_demo1.sh
    #!/bin/bash
    for i in 1 8 ab 99 qq
    do
           echo "I am $i"
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    for循环的语法结构:第二种格式
    for  ((初值;条件;步长))
    do
       命令序列
    done
    案例:
    [root@som day01]# vim for_demo2.sh
    #!/bin/bash
    for ((i=1;i<=5;i++))
    do
          echo "I am $i"
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    while循环

    反复测试条件,只要成立就执行命令序列(死循环或者条件循环时使用【不知道循环次数时】)

    while循环的语法结构:
    while  条件测试
    do
       命令序列
    done
    案例:
    #!/bin/bash
    i=1
    while [ $i -le 5 ]
    do
           echo $i
    done
    
    死循环语法结构
    while :
    do
      命令序列
    done
    案例:
    #!/bin/bash
    num=$[RANDOM%10+1]
    while :
    do
          read -p "请输入1-10之间的整数:" guess
          if [ $guess -eq $num ];then
                 echo "恭喜,猜对了,就是$num."
                 exit    
          elif [ $guess -lt $num ];then
                 echo "Oops,猜小了."
          else 
                 echo "Oops,猜大了."
    fi
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    正则表达式

    • 正则表达式是一种基于字符模式匹配的文本处理工具

    基本正则

    在这里插入图片描述

    [root@som ~]# grep root /etc/passwd                    #查找包含root的行
    [root@som ~]# grep ^root /etc/passwd                  	#查找以root开头的行
    [root@som ~]# grep bash$ /etc/passwd                 	#查找以bash结尾的行
    [root@som ~]# grep "[abc]" /etc/passwd               	#查找包含a或者b或者c的行
    [root@som ~]# grep "[^abc]" /etc/passwd             	#查找不包含a或者b或者c的其他内容
    [root@som ~]# grep . /etc/passwd                       #查找任意单个字符
    [root@som ~]# grep r.*t /etc/passwd                    #查找以r开头以t结尾的
    [root@som ~]# grep "[0-9]*"  /etc/passwd          		#查找包含数字的,*代表任意次
    [root@som ~]# grep "[0-9]\{3,4\}" /etc/passwd    		#查找包含数字3-4次的
    [root@som ~]# grep "[0-9]\{3\}" /etc/passwd       		#查找包含3位数的
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述
    扩展正则的使用

    [root@som ~]# grep -E "0{2,3}" /etc/passwd         #查找0出现2-3次
    [root@som ~]# grep -E "[a-z]+"  /etc/passwd        #查找a-z等字母至少出现一次
    [root@som ~]# grep -E "s?bin"  /etc/passwd         #查找sbin或者bin(?匹配前面的s字符0-1次)
    [root@som ~]# grep -E "(root|daemon)" /etc/passwd  #查找root或者daemon
    [root@som ~]# echo "ababab" | grep ab              #查找ab
    ababab
    [root@som ~]# echo "ababab" | grep -E "(ab)"       #查找ab
    [root@som ~]# echo "ababab" | grep -E "(ab){2}"    #将ab组合,匹配两次
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    Perl兼容的正则

    在这里插入图片描述

    [root@som ~]# grep -P "bin" /etc/passwd      #匹配包含bin的行,只要包含bin字符的都出现
    [root@som ~]# grep -P "\bbin\b" /etc/passwd  
    									# \b单词边界,b前面不能有内容,n后面也不能有内容,只匹配bin
    [root@som ~]# grep -P "\w"  /etc/passwd      #查找字母数字下划线
    [root@som ~]# grep -P "\W"  /etc/passwd      #查找不是字母数字下划线部分
    [root@som ~]# grep -P "\s"  /etc/passwd      #查找空白,空格,tab键都算
    [root@som ~]# grep -P "\d"  /etc/passwd      #查找数字
    [root@som ~]# grep -P "\D"  /etc/passwd      #查找非数字
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    Mariadb: error Relay log read failure: Could not parse relay log event entry
    [NSSRound#7 Team]ShadowFlag
    【笔试题】【day18】
    计算机毕业设计选题推荐-基于数据可视化的智慧社区内网平台-Python项目实战
    javaweb狂神版(待更新)
    【Linux】线程池
    基于grafana+elk等开源组件的 云服务监控大屏架构
    详解JVM(运行时数据区)
    架构设计方法(4A架构)-信息架构
    (c语言)用冒泡排序模拟实现qsort()函数交换整数
  • 原文地址:https://blog.csdn.net/m0_72568513/article/details/134006332