case语句支持的模式

a|b:a或者b
*:匹配任意长度的任意字符
?:匹配任意单个字符
[-]:范围匹配

case语法格式

 case 表达式 in 
 模式1)
 条件1
 ;;
 模式2)
 条件2
 ;;
 模式n)
 条件n
 ;;
 *)
 剩余条件
 ;;
 esac

bash脚本函数

函数:function 实现可被调用模块
两种返回值:
    1.正常返回值
    函数中的打印语句,如echo或print
    最后一句执行成功
    2.执行状态返回值
    取决于函数中执行的最后一条语句
    自定义: return N    

函数可以接受位置参数:

    $1,$#,$0,$*,$@,$?
如果想把脚本的全部位置参数,统统传递给脚本中函数使用,怎么办?
    使用$*传递

函数作用域

变量作用域:local==declare -i
    函数体可以调用函数体 那么函数体里声明变量
    先内层函数体变量 在外层函数体变量 在主程序变量  在bash内置环境变量  如果没有不会报错 则为空显示0
    在函数中使用了在主程序中声明的变量:重新赋值会影响主程序中的变量
    如果不期望函数与主程序中的变量冲突,函数中使用变量都用local装饰;即使用局部变量
    在函数中使用了序中在主程没有声明的变量:在函数执行结束后即被撤销,无论是否使用local装饰符         

案例

[root@mm ~]#bash a.shh
10
xy
20
[root@mm ~]#cat a.shh
#!/bin/bash
declare -i A=10
built() {
declare A=xy
echo $A
}
show() {
declare -i A=20(如果这行注释掉show函数块为10)
echo $A
}
echo $A(主程序变量)   
built
show

函数语法

方法一
FuncName(){
函数体
 }
方法二
function FuncName{
函数体
}

案例

写一个脚本,判定172.16.0.0网络内有哪些主机在线,在线的用绿色显示,不在线的用红色显示;要求,编程中使用函数; 

图片描述

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

图片描述


达龙
250 声望19 粉丝

天才是重复次数最多的人!


« 上一篇
进程管理
下一篇 »
三剑客之GREP