Linux shell(05)函数

自定义函数

  • 自定义函数
  • 系统脚本

自定义函数

// 自定义函数
function  fname() {
    命令
}

// 函数的执行
fname

// 函数作用范围的变量
local 变量名

// 函数的参数
$1 $2 $3 ... $n
#!/bin/bash
function cdls() {
    cd /var
    ls
}
cdls

// 带参数
function cdls() {
    cd $1
    ls
}
cdls /tmp

// 只在函数内部生效的变量,可以使用local关键字
// checkpid 检查进程是否存活,存活的话会有proc/pid文件夹子存在
checkpid() {  // function 可以省略
    local i
    for i in $* ; do     // i是经常使用的变量,可能会被别人给替代掉,我们可以声明本地的变量local
        [ -d "/proc/$i" ] && return 0  // 相当于if () return 
    done
    return 1
}

source 14.sh  // 要使用source执行,不能使用bash;如果使用bash,会进入子进程,不会显示父进程的状态
vim 14.sh
chomd u+x  14.sh
source 14.sh
checkpid 1
echo $?

checkpid 1 2
echo $?

checkpid 65533
echo $?

系统脚本

  • 系统自建了函数库,可以在脚本中引用,位置在/etc/init.d/functions
  • 导入函数库,使用source函数脚本文件"导入"函数
vim /etc/init.d/functions

source /etc/init.d/functions // 导入函数库
echo_success

脚本控制

  • 脚本优先级控制
  • 捕获信号

脚本优先级控制

脚本优先级:脚本占用资源多少的分配。主要是对cpu,内存等资源的分配。对于cpu,可以使用nice,renice调整脚本优先级;
对于内存,一般会使用ctrlgroup来实现。

  • 可以使用nice和renice调整脚本优先级
  • 避免出现“不可控的”死循环
    • 死循环导致cpu占用过高
    • 死循环导致死机
: | :& // 进程炸弹,创建两个进程

su - user1

func() { func | func& } // fork炸弹,导致程序大量创建子进程,导致CPU不响应任何按键信息

func

.() {.|.& } ; . //fork炸弹 

捕获信号

捕获信号脚本的编写

  • kill 默认会发送15号信号给应用程序 (可以把15号命令捕获下来,捕获后执行相应的命令)
  • ctrl + c 发送2号信号给应用程序
  • 9号信号不可阻塞 (-9)

捕获信号的作用:比如脚本在对关键数据备份,备份的时候我们不希望它被ctrl+c或者默认发送的q信号中断,这样会导致备份是不完整的。

#!/bin/bash
# signal demo 
# trap用来捕获信号
trap "echo sig 15"  15  
# 显示当前进程号
echo $$     

# 为了让捕获后程序不会马上结束,或者还没来的及捕获的时候,程序已经运行完了,我们加入一个死循环

# 判断是空指令,做的事情也是空指令 (不要在工作机上使用)
while :   
do
    :
done


vim 15.sh
chomd u+x 15.sh
# 捕获程序开始运行
[root@c7 ~] ./15.sh
10742
sig15   // 捕获到了15

# 新开一个窗口
kill -15 10742

# 可以用-9结束,-9是不可阻塞的
kill -9 10742
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值