Shell基础编程
一、变量
为何要有变量
程序的运行就是一些列状态的变量->用变量值的变化去表示变量命名规则
以字母或下划线开头,剩下的部分可以是:字母、数字、下划线.
最好遵循下述规范:
1)以字母开头
2)使用中划线或者下划线做单词的连接
3)同类型的用数字区分
4)对于文件最好加上拓展名系统变量
set 和 env区别
set:显示所有变量
env:环境变量变量赋值
VARNAME=VALUE
echo $VARNAME
删除变量 unset VARNAME常用系统变量
PATH
PWD
LANG
HOME
HISTSIZE
PS1
IFS
域分隔符 是空格,换行,TAB键的合集全局变量与局部变量
定义变量名的边界
[root@MiWiFi-R3-srv ~]# rest_mem=20
[root@MiWiFi-R3-srv ~]# echo ${rest_mem}%
20%数据类型
bash中的变量无须声明,拿来就用.默认的变量都会是字符类型,还可以有 数字类型,普通的脚本,这两种类型够用了
二、运算符
算术运算符
+
*
/
%
[root@MiWiFi-R3-srv ~]# echo $[3+1]
4关系操作
赋值运算符
shell里的所有计算器
测试操作
命令执行后会返回到一个系统变量中 ?如果 ?值为0 表示命令执行成功 否则为失败
测试命令 test [ ] [[ ]] (( ))
打开man test 逐一介绍每个参数
- ①测试文件状态
- ②字符串测试
- ③测试数值
- ④拓展测试符号 [[ ]] (())
三、流程控制——if语句、向脚本传递参数
四、循环结构——while循环、for循环
while循环
wihle和read实现逐行处理
[root@MiWiFi-R3-srv ~]# cat 1.sh
#!/bin/bash
while read var
do
echo $((++i)):$var
done</etc/passwd
[root@MiWiFi-R3-srv ~]# ./1.sh
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
......
while死循环
[root@MiWiFi-R3-srv ~]# cat 1.sh
#!/bin/bash
var1=AAA
var2=BBB
var3=CCC
while :
do
clear
echo -e "A:${var1}\nB:${var2}\nC:${var3}"
temp=$var1
var1=$var2
var2=$var3
var3=$temp
sleep 1
done
for循环
shell格式的for
for i in {1..10}
do
echo $i
done
五、函数、计划任务
函数基本概念
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环境变量不同而导致命令无法找到的错误。