Linux基础(5)

来源:互联网 发布:mp3统一音量软件 编辑:程序博客网 时间:2024/06/05 17:11

Shell基础编程

一、变量

这里写图片描述

  1. 为何要有变量
    程序的运行就是一些列状态的变量->用变量值的变化去表示

  2. 变量命名规则
    以字母或下划线开头,剩下的部分可以是:字母、数字、下划线.
    最好遵循下述规范:
    1)以字母开头
    2)使用中划线或者下划线做单词的连接
    3)同类型的用数字区分
    4)对于文件最好加上拓展名

  3. 系统变量
    set 和 env区别
    set:显示所有变量
    env:环境变量

  4. 变量赋值
    VARNAME=VALUE
    echo $VARNAME
    删除变量 unset VARNAME

  5. 常用系统变量
    PATH
    PWD
    LANG
    HOME
    HISTSIZE
    PS1
    IFS
    域分隔符 是空格,换行,TAB键的合集

  6. 全局变量与局部变量
    这里写图片描述

  7. 定义变量名的边界
    [root@MiWiFi-R3-srv ~]# rest_mem=20
    [root@MiWiFi-R3-srv ~]# echo ${rest_mem}%
    20%

  8. 数据类型
    bash中的变量无须声明,拿来就用.默认的变量都会是字符类型,还可以有 数字类型,普通的脚本,这两种类型够用了

二、运算符

  1. 算术运算符

    +

    *
    /
    %
    [root@MiWiFi-R3-srv ~]# echo $[3+1]
    4

  2. 关系操作
    这里写图片描述

  3. 赋值运算符
    这里写图片描述

  4. shell里的所有计算器
    这里写图片描述

  5. 测试操作

    命令执行后会返回到一个系统变量中 ??值为0 表示命令执行成功 否则为失败
    测试命令 test [ ] [[ ]] (( ))
    打开man test 逐一介绍每个参数

    ①测试文件状态

这里写图片描述

    ②字符串测试

这里写图片描述

    ③测试数值

这里写图片描述

    ④拓展测试符号 [[ ]] (())

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

这里写图片描述

三、流程控制——if语句、向脚本传递参数

这里写图片描述
这里写图片描述

四、循环结构——while循环、for循环

while循环

这里写图片描述

这里写图片描述
这里写图片描述

wihle和read实现逐行处理

[root@MiWiFi-R3-srv ~]# cat 1.sh #!/bin/bashwhile read vardo    echo $((++i)):$vardone</etc/passwd[root@MiWiFi-R3-srv ~]# ./1.sh 1:root:x:0:0:root:/root:/bin/bash2:bin:x:1:1:bin:/bin:/sbin/nologin3:daemon:x:2:2:daemon:/sbin:/sbin/nologin4:adm:x:3:4:adm:/var/adm:/sbin/nologin......

while死循环

[root@MiWiFi-R3-srv ~]# cat 1.sh #!/bin/bashvar1=AAAvar2=BBBvar3=CCCwhile :do    clear    echo -e "A:${var1}\nB:${var2}\nC:${var3}"    temp=$var1    var1=$var2    var2=$var3    var3=$temp    sleep 1done

for循环

这里写图片描述
shell格式的for

for i in {1..10}doecho $idone

五、函数、计划任务

函数基本概念

这里写图片描述

1、函数的定义
这里写图片描述

2、函数的调用
这里写图片描述

3、参数传递
这里写图片描述

4、函数文件
这里写图片描述

5、载入和删除
这里写图片描述

6、函数返回状态
这里写图片描述

计划任务crontab

1、概念
后台运行,到了预定的时间就会自动执行的任务,前提是:事先手动将计划任务设定好。这就用到了crond服务

2、crond服务相关的软件包
[root@MiWiFi-R3-srv ~]# rpm -qa |grep cron
cronie-anacron-1.4.11-14.el7.x86_64
crontabs-1.11-6.20121102git.el7.noarch
cronie-1.4.11-14.el7.x86_64

这些包在最小化安装系统时就已经安装了,并且会开机自启动crond服务,并为我们提供好编写计划任务的crontab命令。

3、计划任务分为两类:系统级和用户级
首先需要知道的是,无论是系统级还是用户级的cron计划都是文本文件,系 统的计划文件存放在/etc/crontab路径下。用户的计划文件放在/var/spool/cron/用户名,不管是哪一种,都可以满足我们定制计划任务的需求。

root用户可以直接对文件进行修改来编写计划任务也可以使用 crontab -e命令,而普通用户只能使用后者。除此之外,系统crontab文件中任务的定义也有所不同,在前五个部分之后插入了一个“用户”部分。

4、crontab命令编写计划任务
语  法:crontab [-u <用户名称>][配置文件] 或 crontab [-u <用户名称>][-elr]

crontab任务配置基本格式:
* *  *  *  *  command
分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天)  命令

第1列表示分钟1~59 每分钟用或者 /1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

参数:
-e  编辑该用户的计时器设置。
-l  列出该用户的计时器设置。
-r  删除该用户的计时器设置。
-u<用户名称>  指定要设定计时器的用户名称。

crontab例子
①30 21 * * * /usr/local/etc/rc.d/apache restart #每晚的21:30 重启apache
②45 4 1,10,22 * * /usr/local/etc/rc.d/apache restart #每月1、10、22日的4 : 45重启apache
③10 1 * * 6,0 /usr/local/etc/rc.d/apache restart #每周六、周日的1 : 10重启apache
④0,30 18-23 * * * /usr/local/etc/rc.d/apache restart #每天18 : 00至23 : 00之间每隔30分钟重启apache
⑤0 23 * * 6 /usr/local/etc/rc.d/apache restart #每星期六的11 : 00 pm重启apache
⑥* 23-7/1 * * * /usr/local/etc/rc.d/apache restart #晚上11点到早上7点之间,每隔一小时重启 apache
⑦* /1 * * /usr/local/etc/rc.d/apache restart #每一小时重启apache
⑧0 11 4 * mon-wed /usr/local/etc/rc.d/apache restart #每月的4号与每周一到周三的11点重启apache
⑨0 4 1 jan * /usr/local/etc/rc.d/apache restart #一月一号的4点重启apache
/30 * * * /usr/sbin/ntpdate 210.72.145.44 #每半小时同步一下时间
⑪0 /2 * * www /usr/bin/somecommand >> /dev/null 2>&1 #以用户www的身份每两小时就运行某个程序

5、查看cron服务是否起作用
如果我们要查看定时任务是否准时调用了可以/var/log/cron中的运行信息

cat /var/log/cron

也可以用tail -f /var/spool/mail/用户名,来查看普通用户的计划任务执行情况

此处需要记住两点:

第一:cron 守护进程每分钟都检查 /etc/crontab 文件、etc/cron.d/ 目录、以及 /var/spool/cron 目录中的改变。如果发现了改变,它们就会被载入内存。这样,当某个 crontab 文件改变后就不必重新启动守护进程了。

第二:crontab的用户手册中推荐每一个命令使用绝对路径,例如调用rm命令时写作:/bin/rm,这是为了防止由于每一个用户的PATH环境变量不同而导致命令无法找到的错误。