2018-7-27 笔记
2018-7-27笔记
20.1 shell脚本介绍
shell是一种脚本语言
可使用逻辑判断、循环等语法
可以自定义函数
shell是系统命令的集合
shell脚本可以实现自动化运维,能大大增加我们的运维效率
shell练习
20.2 shell 脚本结构和执行
第一行:
需要制定,需要通过的解释器(bin/bash)
执行:
需要赋予执行权限,方可执行:
# chmod a+x 01.sh
# ./01.sh
20.3 date命令用法
# date 显示系统时间
针对文件标记日期
周
日历
。。。。。。
20.4 shell脚本中的变量
20.5 shell脚本中的逻辑判断
if(如果)then(然后)fi
#!/bin/bash
a=5 b=6 ---设置变量
if [ $a -gt $b ] ---如果a大于B
then ----然后
echo ok ----输入ok
fi ----结束
if [ $a -lt $b ] --如果a小于b
then ----然后
echo no ----输入no
fi
if(如果)then(然后);elif(如果)else(当if条件不满足就执行else)fi
#!/bin/bash
a=8
if [ $a -gt 50 ]
then
echo ">5"
elif [ $a -lt 5 ] --2次判断
then
echo "<5"
else --当if语句不符合,则运行else
echo "no man zu"
fi
if......;then.......;fi
if.....;then......else....fi
if.....then.....elif.....else..fi
-ne —比较两个参数是否不相等
-lt —小于
-le —小于等于
-gt —大于
-ge —大于等于
-eq 等于
&&并且 ||或者 ---- if 【 】 &&【】;then 结合判断
举个例子:
#!/bin/bash
f=/tmp/123.txt --设置变量
if [ -f $f ] ---判断f变量是否是普通文件,且存在
then
echo $f cunzai --存在则显示cunzai
else
touch $f ---没有则touch一个
fi
按照上面的,我们只需要修改变量即可
其他写法:
#!/bin/bash
f=/tmp/123.txt --设置变量
if [ !-f $f ] ----如果这个文件不存在 !取反
then
touch $f
fi
-z示例:如果z的值为空,则报错not found (前面加个!是取反)
grep结合if示例
-q 过滤root以外的 -w精准匹配
如果root存在就输入存在
格式:在case程序中,可以再条件中使用 | ,表示或的意思
case 变量名 in
value1) ---第一个判断
command
;;
value2) ---第二个判断
command
;;
*) --除此之外
command
;;
esac
示例:
#!/bin/bash
read -p "Please input a number: " n ---让用户输入数字,返回值为n
if [ -z "$n" ] --返回的n值进行判断
then
echo "Please input a number." --提示请输入值
exit 1 --当用户运行完脚本运行echo$? 的时候会返回1
f
n1=`echo $n|sed 's/[0-9]//g'` --输出是否为纯数字,如果是数字,则清空,赋值给$n1,
if [ -n "$n1" ] --判断$n1是否为空(即$n1不是纯数字),
then
echo "Please input a number." --为空再次提示输入数字
exit 1 --退出
fi
if [ $n -lt 60 ]&& [ $n -ge 0 ] ---当数值小于60 且大于等于0 提示tag1
then
tag=1
elif [ $n -ge 60 ] && [ $n -lt 80 ] ---当数值大于等于60并且小于80 提示tag2
then
tag=2
elif [ $n -ge 80 ] && [ $n -lt 90 ] ---当数值大于等于80且小于90 提示tag3
then
tag=3
elif [ $n -ge 90 ] && [ $n -le 100 ] ---当数值大于等于90且小于100 提示tag4
then
tag=4
else ---如果不符合上述条件则tag=0
tag=0
fi
case $tag in --当你的tag值为1/2/3/4、的时候执行如下
1)
echo "not ok" ---tag1提示not ok
;;
2)
echo "ok" --tag2提示 ok
;;
3)
echo "ook" -tag3提示 ook
;;
4)
echo "oook" ---tag4提示 oook
;;
*) --除此之外的执行tag=0
echo "The number range is 0-100." --提示重新输入数值范围为0-100
;;
esac
执行结果10
执行结果101:提示不在此范围
执行过程
20.10 for循环
格式:
for 变量名 in 条件
do
command
done
示例:把1-5的数字相加
#!/bin/bash
number=0 ---设置number变量=0
for i in `seq 1 5` ---设置i变量序列为1-5
do
number=$[$number+$i] --再次让number赋值等于 number+i的值
done
echo $number 显示总数
下图是执行过程
示例:用在查找目录
#!/bin/bash
cd /etc/ --进入到目录
for a in `ls /etc/` --设置变量a为 ls /etc/
do
if [ -d $a ] 判断如果$a目录存在的话
then
ls -d $a ---显示出来
fi
done
20.11 20.12 while循环(上)(下)
语法格式
while 条件;
do
command
done
示例;查看系统负载
#!/bin/bash
while :
do
load=`w|head -1|awk -F 'load average: ' '{print $2}'|cut -d. -f1` --设置变量load
if [ $load -gt 10 ] --如果负载大于0
then
/usr/bin/sbin/mail.py [email protected] "$load" "报警“ --发送邮件给用户(这里可以自己写一个发送邮件脚本)
fi
sleep 30 --30秒后再次检查
done
关于load的变量分步解释:
w --查看负载
head -1 ---显示第一
w|head -1|awk -F 'load average: ' '{print $2}' ---load作分割 打印第二行 (即load为第一行)
w|head -1|awk -F 'load average: ' '{print $2}'|cut -d. -f1 --以.(点)作分割,分割第一段
20.13 break跳出循环
#!/bin/bash
for i in `seq 1 4` --变量
do
echo $i
if [ $i -eq 3 ] --当i等于3
then
break --跳出循环
fi
done
echo abcs
执行过程:可以看到当i=3就跳出以下循环,直接运abc结束
20.14 continue结束本次循环
#!/bin/bash
for i in `seq 1 4`
do
echo $i
if [ $i -eq 3 ]
then
continue
fi
echo $i
done
echo abcs
执行过程:可以看到一个3,就没了。continue仅仅跳出本次循环,继续下一次循环
20.15 exit退出整个脚本
exit直接退出整个脚本
#!/bin/bash
for i in `seq 1 5`
do
echo $i
if [ $i == 3 ]
then
exit
fi
echo $i
done
echo aaaaaaa
执行过程:当i=3 直接退出脚本