shell(二)

发布时间 2023-11-21 19:03:37作者: 韩世康

1、case语句

  1. [root@localhost day1121]# cat test1.sh
    #!/bin/bash
    case $1 in 
    "1")
        echo "您输入的是1"
    ;;
    "2")
        echo "您输入的是2"
    ;;
    *)
        echo "您输入的是其他"
    ;;
    esac
    [root@localhost day1121]# bash test1.sh
    您输入的是其他
    [root@localhost day1121]# bash test1.sh 1
    您输入的是1
    [root@localhost day1121]#
  2. 案例: 判断⽤户输⼊的字符类型使⽤case,字母类型[a-z][A-Z] 数字类型[0-9] 其他
    [root@localhost day1121]# cat test2.sh
    #!/bin/bash
    read -p "请输入任意一个字符" ch
    case $ch in
    [A-Z] | [a-z])
        echo "字母"
    ;;
    [0-9])
        echo "数字"
    ;;
    *)
        echo "其他"
    ;;
    esac
    [root@localhost day1121]# bash test2.sh
    请输入任意一个字符a
    字母
    [root@localhost day1121]# bash test2.sh
    请输入任意一个字符1
    数字
    [root@localhost day1121]# bash test2.sh
    请输入任意一个字符/
    其他
    [root@localhost day1121]#

2、循环语句

  1. for 变量 in 空格分隔的数据列表;do 语句块 done
    [root@localhost day1121]# cat test3.sh
    #!/bin/bash
    for i in 1 2 3 4 5
    do
        echo $i
    done
    [root@localhost day1121]# bash test3.sh
    1
    2
    3
    4
    5
    [root@localhost day1121]# cat test4.sh
    #!/bin/bash
    for i in $*
    do
        echo $i
    done
    [root@localhost day1121]# bash test4.sh
    [root@localhost day1121]# bash test4.sh
    [root@localhost day1121]# bash test4.sh aa bb cc
    aa
    bb
    cc
    [root@localhost day1121]# 
  2. for 变量 in {起始值..终⽌值..步进值};do 语句块 done
    [root@localhost day1121]# cat test5.sh
    #!/bin/bash
    for i in {1..5..1}
    do
        echo $i
    done
    [root@localhost day1121]# bash test5.sh
    1
    2
    3
    4
    5
    [root@localhost day1121]# cat test6.sh
    #!/bin/bash
    for i in {101..105..1}
    do
        echo hadop$i
    done
    
    [root@localhost day1121]# bash test6.sh
    hadop101
    hadop102
    hadop103
    hadop104
    hadop105
    [root@localhost day1121]# cat test7.sh
    #!/bin/bash
    for i in hadop{101..105}
    do
        echo $i
    done
    
    [root@localhost day1121]# bash test7.sh
    hadop101
    hadop102
    hadop103
    hadop104
    hadop105
    [root@localhost day1121]# 
  3.  for (( 初始值; 条件判断; 步进值 )) ;do 语句块 done
    [root@localhost day1121]# cat test8.sh
    #!/bin/bash
    for ((i=1;i<=5;i++))
    do
        echo $i
    done
    [root@localhost day1121]# bash test8.sh
    1
    2
    3
    4
    5
    [root@localhost day1121]# 
  4. while循环
    1. 初始计数器 while [ 计数器判断 ] do 语句块 计数器步进done
      [root@localhost day1121]# cat test9.sh
      #!/bin/bash
      i=1
      while [ $i -le 5 ]
      do
          echo $i
          let i=i+1
      done
      [root@localhost day1121]# bash test9.sh
      1
      2
      3
      4
      5
      [root@localhost day1121]#
    2. break 退出循环 , continue 重新进⼊下次循环
      [root@localhost day1121]# cat test10.sh
      #!/bin/bash
      #break continue
      i=1
      while [ $i -le 10 ]
      do
          echo $i
          let i=i+1
          if [ $i -eq 6 ]
          then 
              break
          fi
      done
      [root@localhost day1121]# bash test10.sh
      1
      2
      3
      4
      5
      [root@localhost day1121]#
      [root@localhost day1121]# cat test11.sh
      #!/bin/bash
      #break continue
      i=0
      while [ $i -lt 10 ]
      do
          let i=i+1
          if [ $i -eq 7 ]
          then 
              continue
          fi
          echo $i
      done
      [root@localhost day1121]# bash test11.sh
      1
      2
      3
      4
      5
      6
      8
      9
      10
      [root@localhost day1121]#
  5. until 否定 while
    #!/bin/bash
    i=1
    until [ $1 -ge 5 ]
    do
        echo $i
        let i=i+1
    done
  6. 练习: 求1-100的和
    [root@localhost day1121]# cat test13.sh
    #!/bin/bash
    sum=o
    for ((i=1;i<=100;i++))
    do
        let sum=i+sum
    done
    echo "1+2+3+...+100=${sum}"
    [root@localhost day1121]# bash test13.sh
    1+2+3+...+100=5050
    [root@localhost day1121]# 
  7.  练习 99乘法表
    [root@localhost day1121]# cat test14.sh
    #!/bin/bash
    for ((i=1;i<=9;i++))
    do
        for ((j=1;j<=i;j++))
        do
            echo -ne "$i*$j=$((i*j))\t"
        done
        echo
    done
    [root@localhost day1121]# bash test14.sh
    1*1=1    
    2*1=2    2*2=4    
    3*1=3    3*2=6    3*3=9    
    4*1=4    4*2=8    4*3=12    4*4=16    
    5*1=5    5*2=10    5*3=15    5*4=20    5*5=25    
    6*1=6    6*2=12    6*3=18    6*4=24    6*5=30    6*6=36    
    7*1=7    7*2=14    7*3=21    7*4=28    7*5=35    7*6=42    7*7=49    
    8*1=8    8*2=16    8*3=24    8*4=32    8*5=40    8*6=48    8*7=56    8*8=64    
    9*1=9    9*2=18    9*3=27    9*4=36    9*5=45    9*6=54    9*7=63    9*8=72    9*9=81    
    [root@localhost day1121]#