在循环结构中主要有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 firead -p "Plz enter a command: " command
done