1.shell脚本介绍
shell编写,最重要是的是思路,其次是要练习
shell是一种脚本语言,类似于python,php等,有自己的语法,相对简单
shell可以使用逻辑判断,循环等语法
shell可以自定义函数,目的在于减少重复代码
shell是系统命令的集合
shell脚本可以实现自动化运维,能大大增加我们的运维效率,批量执行
2.shell脚本结构和执行
#!/bin/bash:定义shell内的文件是用/bin/bash进行解析的
以“#”开头的行,为解释说明,可以注释时间,编写人,名称等等,也存在特殊的用法如添加chkconfig启动的语句
脚本的名字以.sh结尾,用于区分shell脚本
shell脚本的执行:
- chmod -x word.sh
- ./word.sh:./为相对路径,可以找到文件,使用绝对路径
- 查看脚本的执行过程:sh -x word.sh
- 查看脚本是否有错误:sh -n word.sh
3.date命令用法
date +%Y-%m-%d,date +%y-%m-%d 年 月 日,大写Y四位的年,y为2位的年,m标记月份,M标记分钟,d标记日期,D标记年月日,显示日的方法还有,date +%F和date +%Y%m%d
[root@Chauncey ~]# date +%y
18
[root@Chauncey ~]# date +%Y
2018
[root@Chauncey ~]# date +%Y-%m-%d
2018-12-24
[root@Chauncey ~]# date +%y-%m-%d
18-12-24
[root@Chauncey ~]# date +%F
2018-12-24
[root@Chauncey ~]# date +%Y%m%d
20181224
[root@Chauncey ~]#
date +%H:%M:%S = date +%T 时 间,H标记小时,小h标记英文的月,M标记分钟,S标记秒
[root@Chauncey ~]# date +%H:%M:%S
22:33:56
[root@Chauncey ~]# date +%T
22:34:02
[root@Chauncey ~]#
date +%s 时间戳 date +%s "XXXX-XX-XX XX:XX:XX"将时间转换为时间戳,date -d @时间戳,将时间戳转换成具体的时间
date -d @1504620492
[root@Chauncey ~]# date +%s
1545662080
[root@Chauncey ~]# date -d @1545662080
Mon Dec 24 22:34:40 CST 2018
[root@Chauncey ~]#
date -d “+1day” 一天后
date -d “-1day” 一天前
date -d "-1 month" 一月前
date -d “1 min” 一分钟前
date +%w,date +%W 星期几,w标记,W是今年的第几周
如果要组合使用时,应加双引号
[root@Chauncey ~]# date "+%Y-%m-%d %H:%M:%S"
2018-12-24 22:51:34
cal查看日历
[root@Chauncey ~]# date -d "+1day"
Tue Dec 25 22:35:48 CST 2018
[root@Chauncey ~]#
[root@Chauncey ~]# date -d "-1day"
Sun Dec 23 22:36:09 CST 2018
[root@Chauncey ~]#
[root@Chauncey ~]# date -d "-1month"
Sat Nov 24 22:36:28 CST 2018
[root@Chauncey ~]#
[root@Chauncey ~]# date -d "1min"
Mon Dec 24 22:37:49 CST 2018
[root@Chauncey ~]#
[root@Chauncey ~]# cal
December 2018
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
[root@Chauncey ~]# date +%w
1
[root@Chauncey ~]# date +%W
52
[root@Chauncey ~]#
4.shell脚本中的变量
当脚本中使用某个字符串较频繁并且字符串长度很长时就应该使用变量代替
使用条件语句时,尝试用变量:if [ $a -gt 1 ];then...;fi
引用某个命令的结果时,用变量替代 n='wc -l 1.txt'
写和用户交互的脚本时,变量也是必不可少的read -p "Input a number:"n;echo $n 如果没写这个n,可以直接使用¥REPLY
内置变量$0,$1,$2... $0表示脚本本身,$1第一个参数,$2第二个参数.... $#表示参数个数
数学运算a=1;b=2;c=$(($a+$b))或者$[$a+$b]
5.脚本中的逻辑判断
格式1:if 条件;then 语句;fi
[root@Chauncey ~]# if [ $a -gt 3 ]; then echo ok; fi
ok
[root@Chauncey ~]#
格式2:if 条件;then 语句;else 语句 ;fi
[root@Chauncey ~]# cat ifel.sh
#!/bin/bash
echo -n "Please input a number:"
read a
if [ $a -ge 5 ]
then
echo "a>=5"
else
echo "a<5"
fi
格式3:if...;then...;elif...;then...;else...;fi
[root@Chauncey ~]# cat ifelsif.sh
#!/bin/bash
echo -n "please input a number:"
read a
if [ $a -gt 4 ] && [ $a -lt 7 ]
then
echo "4<a<7"
elif [ $a -gt 7 ]
then
echo "a>7"
else
echo "a<4"
fi
逻辑判断表达式:if [ $a -gt $b ];if [ $a -lt 5 ];if[ $b -eq 10 ]等 -gt(>);-lt(<);-ge(>=);-le(<=);-eq(==);-ne(!=)注意到处都是空格 当使用数学符号时,具体表达要使用两个小括号
[root@Chauncey ~]# a=3
[root@Chauncey ~]# if (($a>1)); then echo ok; fi
ok
可以使用&& || 结合多个条件
if [ $a -gt 5 ] &&[ $a -lt 10 ]; then
if [ $b -gt 5 ] || [ $b -lt 3 ]; then
[root@Chauncey ~]# cat ifelsif.sh
#!/bin/bash
echo -n "please input a number:"
read a
if [ $a -gt 4 ] && [ $a -lt 7 ]
then
echo "4<a<7"
elif [ $a -gt 7 ]
then
echo "a>7"
else
echo "a<4"
fi