Shell编程(4)

2025 年 4 月 6 日 星期日(已编辑)
4
AI 生成的摘要
此内容由 AI 生成
Shell编程中,自定义函数用于重复命令的集合,语法灵活,支持局部变量和参数传递。系统函数库定义在/etc/init.d/functions。计划任务分为一次性任务(使用at命令)和周期性任务(使用cron命令),后者可通过crontab管理,注意命令路径和输出问题,并可通过日志文件查看执行情况。
这篇文章上次修改于 2025 年 4 月 6 日 星期日,可能部分内容已经不适用,如有疑问可询问作者。

Shell编程(4)

Shell编程(4)

1. 函数

1.1 自定义函数

  • 函数用于“包含”重复使用的命令集合
  • 语法格式
    • function可以省略
function fname() {
  命令
}
  • 执行函数
fname
  • 案例
function cdls() {
   cd /var
   ls
}

# 使用
cdls
  • 函数作用范围的变量

    • local 变量名可以声明函数内的变量,离开函数就失效了
  • 函数的参数
    • 11 2 $3 ...
  • 案例
cdls2() {
  cd $1
  ls
}

# 使用
cdls2 /tmp

案例2:检查进程是否存活

#!/bin/bash
checkpid() {
  local i # 防止其他人定义过变量i
  
  for i in $* ; do
    if [ ! -d "/proc/$i" ] ; then
      return 1
    fi
  done
  
  return 0
}

# 使用
source checkpid.sh # 必须使用source执行,否则子进程无法访问父进程
checkpid 1 2

1.2 系统函数库

  • 定义在/etc/init.d/functions文件中

2. 计划任务

2.1 一次性计划任务

  • at
    • 没有终端,不能进行标准输出,只能重定向到某个文件
    • 如果采用非内部命令,尽量使用完整路径
    • 如果是shell程序,使用source执行引入环境变量
date # 参看当前时间

# 如果没有安装
# 安装 yum install at -y
# 启动服务 systemctl start atd
# 创建任务
at 8:59 # 后面为任务执行时间
at> echo hello > /tmp/hello.txt
at> (Ctrl+D 提交任务)

# 查看任务
atq

# 取消任务
atrm 编号

2.2 周期性计划任务

  • cron
    • 配置方式 crontab -e
    • 查看现有的计划任务 crontab -l
    • 配置格式
      • 分钟 小时 日期 月份 星期 执行命令
      • 注意命令的路径问题、输出问题
      • 可以通过查看日志/var/log/cron了解任务的执行情况
# 每分钟执行一次
* * * * * /usr/bin/date >> /tmp/date.txt 

# 周1或周5每分钟执行一次
* * * * 1,5 /usr/bin/date >> /tmp/date.txt

# 周1到周5每分钟执行一次
* * * * 1-5 /usr/bin/date >> /tmp/date.txt

# 5月1日,如果是周1到周5的其中一天,每分钟执行一次
* * 1 5 1-5 /usr/bin/date >> /tmp/date.txt

# 周1凌晨3:30执行
30 3 * * 1 /usr/bin/date >> /tmp/date.txt

# 每月15日的凌晨3点执行
0 3 15 * * /usr/bin/date >> /tmp/date.txt
  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...