Linux回顾(第七天)

case分支

  • case语句和select语句可以构成分支

    case “$变量” in

    ​ “情况1” )

    ​ 命令… ;;

    ​ “情况2” )

    ​ 命令… ;;

    ​ ……. )

    ​ 命令…; ;

    esac

下面是一个程序的举列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
case "$1" in
"start"|"START")
echo $0 start....
;;
"stop")
echo $0 stop...
;;
"restart")
echo $0 restart...
;;
*)
echo woring
;;
seac

for的基本使用

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

    • for循环语法

      • for 参数 in 列表

      • do 执行的命令

      • done 封闭一个循环

        • 上面是for循环的基本格式,我们可以使用{}来产出列表例如{1..9}表示的是从1到9
        • mkdir {1..9}
        1
        2
        3
        4
        5
        #!/bin/bash
        for filename in `ls *.mp3`
        do
        mv $filename $(basename $filename .mp3).mp4
        done

        需要注意的一点便是在in的后面使用的并不是单引号

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

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

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

    • 默认是逐行处理,如果出现空格会当作多行处理

  • 使用for循环遍历变量和文件内容

  • c语言风格的for命令

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

    • do

    • 循环执行命令

    • done

    • #!/bin/bash
      for ((i=1;i<=10;i++))
      do
          echo $i
      done
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11

      这样的写法事实上并不常用

      - #### while循环

      - ```shell
      #!/bin/bash
      while test测试一直成立
      do
      命令
      done
      下面时一个程序的举列
      1
      2
      3
      4
      5
      6
      #!/bin/bash
      while [$a -lt 10]
      do
      ((a++))
      echo $a
      done
  • 死循环

    如果条件一直为真,则会一直执行,这样就形成死循环

    1
    2
    3
    4
    5
    #!/bin/bash
    while :
    do
    echo always
    done
  • until循环

    • until循环与while循环完全相反,循环测试为假时,执行循环,为真时循环停止

    • #!/bin/bash
      until [ 5 -lt 4 ]
      do
          echo always
      done
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19



      - #### 循环的使用

      - 循环和循环可以嵌套

      - 循环中可以嵌套判断,反过来可以嵌套

      - 循环可以使用break和continue语句在循环中退出

      ```shell
      #!/bin/bash
      for sc_name in /etc/profile.d/*.sh
      do
      if [ -x $sc_name ] ; then
      . $sc_name
      fi
      done
  • break和continue

    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash
    for num in {1..9}
    do
    if [ $num -ep 5 ] ; then
    break
    fi
    echo $num
    done

    使用了break之后下面的命令就不会在进行执行,而如果使用continue则仅仅是跳过

  • 使用循环对命令参数的处理

    • 命令行参数可以使用$1 $2……进行读取

    • $0 代表脚本名称

    • $*和$@代表所有位置参数

    • $#代表位置参数的数量

      1
      2
      3
      4
      5
      6
      7
      8
      #!/bin/bash
      #如果参数中包含help则显示两次help
      for pos in $*
      do
      if [ "$pos" = "help" ] ; then
      echo $pos $pos
      fi
      done

      以上为for循环的写法,我们也可以使用while来实现

      1
      2
      3
      4
      5
      6
      7
      8
      #!/bin/bash
      while [ $# -ge 1]
      do
      if [ "$1" = "help" ] ; then
      echo $1 $1
      fi
      shift
      done

      其中shift的作用可以每次减去一个参数,让参数向左移动

自定以函数

  • 自定义函数

    • 函数用于包含重复使用命令的集合

    • 自定义函数

      • function fname(){
      • 命令
      • }
    • 函数的执行

      • fname
    • 函数作用范围的变量

      • local 变量名
    • 函数的参数

      • $1 $2
    • 1
      2
      3
      4
      5
      #!/bin/bash
      function lscd(){
      cd /var
      ls
      }

      带参数的版本

      1
      2
      3
      4
      5
      #!/bin/bash
      functiom cdls(){
      cd $1
      ls
      }

      检查pid的脚本

      1
          
  • 系统脚本

  • 系统自建了函数库,可以在脚本中引用

    • /etc/init.d/functions
    • /etc/profile
    • .bashrc
    • .bash_profile
  • 自建函数库

    • 使用source 函数脚本文件导入函数
你的支持是我最大的动力!
0%