在循环结构中主要有for、while和until,其中while与until的用法相同,只是进入循环的要求不一样。使用循环结构可以为我们完成大量重复的操作,便于简化代码,提高脚本编写的效率。

 

在循环中可以是用,break 、continue这连个命令

     continue:提前进入下一轮循环,需要与判断语句同时使用

     break:直接跳出循环, 需要与判断语句同时使用

 

信号捕捉:

      用法:#trap 'COMMAND;COMMAND'  将该命令放入循环体内即可

数字代称 1 2 9 15
信号完整名称 sighup sigint singkill sigterm
信号简称 hup int kill term
详解

重读配置文件

无需重启生效

中断  CTRL+C 强制中止

 

 

for循环的基本用法 : for value in list ;do COMMAND  done

   

 

for循环的高级用法:使用双括号((value=#;value<#;value++))

   ***需要注意的是双括号中的变量有多个***

 

 

while的用法:while可以使用多条判断语句,但是只有最后一条会生效

          结构:while  [test COMMAND]... ;do  other COMMAND done

 

until的用法:和上面的while一样可以同时使用多条判断语句,只有最后一条会生效

         结构:  until [test COMMAND]... ;do other COMMAND done

 

函数的用法

 定义一个函数有两种格式:

     1.function   函数名 {

         函数体

      }

      2.函数名(){

          函数体}

 函数的使用方法:一个函数可以调用另一个函数;函数自己定义的变量不能被其他函数调用,但是函数可以调用全局变量。

 

函数的简单使用方法:

  

bash编程内容的综合运用

1、提示用户输入一个可执行命令;获取这个命令所依赖的所有库文件(使用ldd命令);
复制命令至/mnt/sysroot/对应的目录中。 解释:假设,如果复制的是cat命令,其可执行程序的路径是/bin/cat,那么就要将/bin/cat复制到/mnt/sysroot/bin/目录中,如果复制
的是useradd命令,而useradd的可执行文件路径为/usr/sbin/useradd,那么就要将其复制到/mnt/sysroot/usr/sbin/目录中;
2复制各库文件至/mnt/sysroot/对应的目录中;

#!/bin/bash
#
target=/mnt/sysroot/     #给变量赋值

[ -d $target ] || mkdir $target    #文件判断与或运算构成的语句

preCommand() {        #定义函数

    if which $1 &> /dev/null; then      #引用命令的状态返回值
              commandPath=`which --skip-alias $1`       #将命令运行的结构赋值给变量
              return 0                       #自定义函数的状态返回值
    else
              echo "No such command."
              return 1
    fi
}

commandCopy() {

    commandDir=`dirname $1`   #取文件的目录名
    [ -d ${target}${commandDir} ] || mkdir -p ${target}${commandDir}
    [ -f ${target}${commandPath} ] || cp $1 ${target}${commandDir}
}

libCopy() {

    for lib in `ldd $1 | egrep -o "/[^[:space:]]+"`; do   #使用管道+grep的用法
 libDir=`dirname $lib`
 [ -d ${target}${libDir} ] || mkdir -p ${target}${libDir}
 [ -f ${target}${lib} ] || cp $lib ${target}${libDir}
    done
}

read -p "Plz enter a command: " command          #与用户进行交互

until [ "$command" == 'quit' ]; do

  if preCommand $command &> /dev/null; then

    commandCopy $commandPath           #应用函数,并为函数输入变量
    libCopy $commandPath
  fi

  read -p "Plz enter a command: " command

done