20.1 Shell脚本介绍
20.2 Shell脚本结构和执行
20.3 date命令用法
20.4 Shell脚本中的变量
20.5 Shell脚本中的逻辑判断
20.6 文件目录属性判断
20.1 Shell脚本介绍
shell是一种脚本语言
可以使用逻辑判断、循环等语法
可以自定义函数
shell是系统命令的集合
shell脚本可以实现自动化运维,能打打增加我们的运维效率
20.2 Shell脚本结构和执行
Shell脚本开头需要加上#!/bin/bash 相当于解析器
#!/bin/bash //第一行也可以不要,但是是用于本机,这里的特殊意义是接下来用的命令是哪个解释器
echo "123"
w
ls
相当于执行了3次命令
并且相当于是用/bin/bash去解析
也可以用
bash 01.sh
sh -x 01.sh //注意只有sh -x可以看到是多少行进行了什么脚本
[root@localhost shell]# /root/shell/01.sh 等命令来执行
也可以用这种方式
[root@localhost shell]# chmod a+x 01.sh
[root@localhost shell]# ./01.sh
shell文件中也可以加上时间,用#号就行,代表一些描述性文字
[root@localhost shell]# sh -n 01.sh //sh -n可以查看语法错误
20.3 date命令用法
直接使用date,显示时间,日期
[root@localhost shell]# date
2018年 10月 24日 星期三 22:24:52 CST
[root@localhost shell]# date +%Y //年
2018
[root@localhost shell]# date +%y //年
18
[root@localhost shell]# date +%m //月
10
[root@localhost shell]# date +%M //日
28
[root@localhost shell]# date +%d //分钟
24
[root@localhost shell]# date +%D //月日年
10/24/18
[root@localhost shell]# date +%Y%m%d
20181024
[root@localhost shell]# date +%F //格式不一样
2018-10-24
cal查看日历
-d一天前
[root@localhost shell]# date -d "-1 day"
Tue Oct 23 22:36:56 CST 2018
[root@localhost shell]# date -d "-1 day" +%F
2018-10-23
[root@localhost shell]# date -d "-1 month" +%F //一个月以前
2018-09-24
时间戳,用于标记
[root@localhost shell]# date +%s
1540391925
[root@localhost shell]# date -d @1540391925
Wed Oct 24 22:38:45 CST 2018
20.4 Shell脚本中的变量
脚本中使用某个字符串较频繁并且字符串长度很长时就应该使用变量代替
使用条件语句时,常使用变量 if [ $a -gt 1 ]; then … ; fi
引用某个命令的结果时,用变量替代 n=wc -l 1.txt
写和用户交互的脚本时,变量也是必不可少的 read -p “Input a number: ” n; echo n如果没写这个n,可以直接使用n如果没写这个n,可以直接使用REPLY
内置变量 0,0,1, 2…2…0表示脚本本身,1第一个参数,1第一个参数,2 第二个 …. $#表示参数个数
数学运算a=1;b=2; c=((((a+b))或者b))或者[a+a+b]
20.5 Shell脚本中的逻辑判断
Shell脚本中逻辑脚本
-gt (>); 大于 great than
-lt(<); 小于 less than
-ge(>=); 大于或等于
-le(<=); 小于或等于
-eq(==); 等于 equal
-ne(!=) 不等于 not equa
&&并且 ||或者 ---- if [] &&[];then 结合判断
逻辑判断有三种写法
格式一:if 条件 ; then 语句; fi
格式二:if 条件; then 语句; else 语句; fi
格式三:if …; then … ;elif …; then …; else …; fi
格式一
cat 02.sh
#!/bin/bash
a=5
if [ $a -gt 3 ] //判定条件是否大于3
#注意[ ]必须有空格
then
echo "ok"
fi
第二种
else
echo "nook" //否则nook
第三种
#!/bin/bash
a=3 //这里把a定义到3
if [ $a -gt 4 ]
#注意[]必须有空格
then
echo ">1"
elif [ $a -gt 6 ]
then
[ $a -gt 6 ]
# 这里可以多重条件
else
echo "nook"
fi
20.6 文件目录属性判断
Shell中经常和文件和目录打交道,对于文件或者目录的属性判断很重要
[ -f file ]判断是否是普通文件,且存在 [ -f /usr/bin/grep ]
[ -d file ] 判断是否是目录,且存在 [ -d /tmp/mydir ]
[ -e file ] 判断文件或目录是否存在 [ -e /var/log/syslog ]
[ -r file ] 判断文件是否可读 [ -r /var/log/syslog ]
[ -w file ] 判断文件是否可写 [ -w /var/mytmp.txt ]
[ -x file ] 判断文件是否可执行 [ -x /usr/bin/grep ]
举例
[root@localhost shell]# vim file1.sh //创建一个
#!/bin/bash
f="/tmp/zhaoxiang-linux"
if [ -e $f ]
then
echo $f exist
else
touch $f
fi
执行之后,查看过程
[root@localhost shell]# sh -x file1.sh
+ f=/tmp/zhaoxiang-linux
+ '[' -e /tmp/zhaoxiang-linux ']'
+ touch /tmp/zhaoxiang-linux
发现这里进行了三步
更改一下
[root@localhost shell]# cat file2.sh
#!/bin/bash
f="/tmp/zhaoxiang-linux"
if [ -d $f ]
then
echo $f exist
else
touch $f
fi
判定一下是否是目录,这里没有目录,所以touch一个