1.1 普通变量与环境变量区别
1.2 变量命名规则
1.3 特殊变量:
$数字 | $1 | $2 | 脚本(函数)的第几个参数 |
$0 | 脚本的名字 | ||
$# | 脚本参数的个数 | ||
$? | 上一个命令的执行结果(返回值) |
1.4 判断
1.4.1 条件表达式(测试表达式)
[ -d ]
[ -f ]
1.4.2 if判断
单分支
双分支
1.5 5.循环
for
批量添加用户
优化系统开机启动项
今日内容:
第2章 企业案例题:书写脚本检查crond是否在运行
1.如果运行显示crond is running
2.如果没有运行crond is not running
2.1 需求--->命令
ps -ef |grep crond
2)条件是什么?(是否运行)
[root@oldboyedu50-lnb ~]# ps -ef |grep crond|wc -l
2
如果进程数量是2,显示running
不是2 显示not running
2.2 书写脚本
[root@oldboyedu50-lnb /server/scripts]#
[root@oldboyedu50-lnb /server/scripts]# cat chcr.sh
#!/bin/bash
#save count
count=`ps -ef |grep crond|wc -l`
#if
if [ $count -eq 2 ];then
echo "crond is running"
else
echo "crond is not running"
fi
2.3 进行测试
[root@oldboyedu50-lnb /server/scripts]# sh chcr.sh
crond is running
2.3.1 关闭进程:
[root@oldboyedu50-lnb /server/scripts]# /etc/init.d/crond stop
Stopping crond: [ OK ]
2.3.2 关闭之后再进行测试
[root@oldboyedu50-lnb /server/scripts]# sh chcr.sh
crond is not running
2.3.3 开启
[root@oldboyedu50-lnb /server/scripts]# /etc/init.d/crond start
Starting crond: [ OK ]
第3章 书写检查脚本:检查服务 进程 xxx是否存在
脚本名称 不要包含被检查名字
[root@oldboyedu50-lnb /server/scripts]# . /etc/init.d/functions
这里的点相当于生效
[root@oldboyedu50-lnb /server/scripts]# action "oldboy is running"
oldboy is running [ OK ]
如果进程运行就会显示【ok】
[root@oldboyedu50-lnb /server/scripts]# action "oldboy is not running" /bin/false
oldboy is not running [FAILED]
如果进程未运行就会显示【FAILED】
[root@oldboyedu50-lnb /server/scripts]# action "oldboy is not running" /bin/false
oldboy is not running [FAILED]
[root@oldboyedu50-lnb /server/scripts]# action "oldboy is running"
oldboy is running [ OK ]
[root@oldboyedu50-lnb /server/scripts]# action "oldboy is running" /bin/true
oldboy is running [ OK ]
进程运行的时候就相当于之后加了 /bin/true
[root@oldboyedu50-lnb /server/scripts]# cat check_cron.sh
#!/bin/bash
. /etc/init.d/functions
#save count
count=`ps -ef |grep crond|wc -l`
#if
if [ $count -eq 2 ];then
action "crond is running" /bin/true
else
action "crond is not running" /bin/false
fi
[root@oldboyedu50-lnb /server/scripts]# sh check_cron.sh
crond is not running [FAILED]
[root@oldboyedu50-lnb /server/scripts]# /etc/init.d/crond start
Starting crond: [ OK ]
[root@oldboyedu50-lnb /server/scripts]# sh check_cron.sh
crond is running [ OK ]
第4章 小结:
4.1 检查服务状态
4.2 注意事项1:脚本名称不要包含服务/进程名字
4.3 注意事项2:是否存在==进程数量
[root@oldboyedu50-lnb /server/scripts]# ps -ef |grep crond |grep -v grep
root 3595 1 0 09:46 ? 00:00:00 crond
[root@oldboyedu50-lnb /server/scripts]# ps -ef |grep '[c]rond'
root 3595 1 0 09:46 ? 00:00:00 crond
ps -ef |grep '[c]rond'
#进程名字: grep '[c]rond' --color
#执行 grep 'crond'
[root@oldboyedu50-lnb /server/scripts]# cat check_cron.sh
#!/bin/bash
. /etc/init.d/functions
#save count
count=`ps -ef |grep '[c]rond'|wc -l`
#if
if [ $count -eq 1 ];then
action "crond is running" /bin/true
else
action "crond is not running" /bin/false
fi
第5章 循环
for p in 1 2 3 4 5 6
do
echo $p
done
如果要使用脚本输出以下内容:
1. tao,01week 01group take you to 大保健, find 01woman.
2. tao,02week 02group take you to 大保健, find 02woman.
3. tao,03week 03group take you to 大保健, find 03woman.
4. tao,04week 04group take you to 大保健, find 04woman.
5. tao,05week 05group take you to 大保健, find 05woman.
6. tao,06week 06group take you to 大保健, find 06woman.
for p in {01..6} ;do echo "tao,${p}week ${p}group take you to 大保健, find ${p}woman.";done
第6章 优化系统开机启动项,只保留crond,sshd,network,rsyslog,sysstat其余服务都关闭
chkconfig |egrep -v 'crond|sshd|network|rsyslog|sysstat'|awk '{print $1}'
chkconfig |awk '!/crond|sshd|network|rsyslog|sysstat/'
#chkconfig |awk '!/crond|sshd|network|rsyslog|sysstat/{print $1}'
#awk '条件{动作}'
chkconfig |awk '!/crond|sshd|network|rsyslog|sysstat/{print $1}'
for name in `chkconfig |egrep -v 'crond|sshd|network|rsyslog|sysstat'|awk '{print $1}' `
do
chkconfig $name off
done
[root@zs scripts]# chkconfig --level 1 rdma off
[root@zs scripts]# chkconfig --list rdma
rdma 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@zs scripts]# chkconfig --level 1 udev-post off
[root@zs scripts]# chkconfig --list udev-post
udev-post 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@zs scripts]#
有些服务的单用户为啥关不掉 要单独关
chkconfig xxxx off
chkconfig xxxx on
(因为chkconfig只能关2345的)
chkconfig --level 0123456 xxxx off
第7章 批量stu01..stu03 添加用户并设置8位随机密码for7.1 第1步:stu{01..3}
7.2 第2步:随机密码
[root@oldboyedu50-lnb ~]# date +%N |md5sum |cut -c-8
93e73487
echo $RANDOM #最大到65535
[root@oldboyedu50-lnb ~]# echo $((RANDOM+10000000))
10024538
7.3 第3步;添加一个用户 并设置随机密码过程
useradd stu01
pass=`date +%N |md5sum |cut -c-8`
echo $pass |passwd --stdin stu01
echo stu01 $pass >>/tmp/pass.txt
7.4 第4步:写入循环
for name in stu{01..3}
do
useradd $name
pass=`date +%N |md5sum |cut -c-8`
echo $pass |passwd --stdin $name
echo $name $pass >>/tmp/pass.txt
done
pass=`date +%N |md5sum |cut -c-8` ;echo $pass |passwd --stdin $name
第8章 shell总结
8.1 shell编程(bash编程)
8.1.1 普通变量与环境变量区别
8.1.2 变量命名规则
8.1.3 特殊变量:
$数字 $1 $2 | 脚本(函数)的第几个参数 |
$0 | 脚本的名字 |
$# | 脚本参数的个数 |
$? | 上一个命令的执行结果(返回值) |
8.1.4 判断
条件表达式(测试表达式)
[ -d ]
[ -f ]
8.1.5 if判断
单分支
双分支
8.1.6 循环
for
批量添加用户
优化系统开机启动项
第9章 三剑客:
sed grep awk
9.1 find
-maxdepth
-type 类型
-name
-iname 不区分大小写
-mtime
-size
!
-exec
-perm permission
9.2 grep
-v
-n
-E === egrep
-o
-i
-l 过滤的时候只显示文件名字
找出系统中包含oldboy的文件
9.3 find+grep
-A2 after 显示你要找的内容及接下来的xxx行
--color
-B
-C
9.4 sed stream editor 流编辑器
-r
-n
-i
-i.bak
sed -r 's#[0-9]+##g' oldboy.txt
选项 '命令 小尾巴'
option
sed '条件命令'
sed 'pattern命令'
sed '模式命令'
sed -n '1p'
sed命令执行过程
1.读取文件内容第1行
2.是否满足条件
1).满足条件 执行对应的命令 p s d
2).不满足 继续第1步
3.截止到文件的最后一行
sed 增删改查
查
7. cat>person.txt<<EOF
8. 101,oldboy,CEO
9. 102,zhangyao,CTO
10. 103,Alex,COO
11. 104,yy,CFO
12. 105,feixue,CIO
13. 110,lidao,COCO
14. EOF
9.5 显示文件的第5行
[root@oldboyedu50-lnb ~]# sed -n 5p person.txt
105,feixue,CIO
9.6 显示文件的第2行到第5行
[root@zs ~]# sed -n '2,5p' person.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
106,oldboy,ll
9.7 显示文件的第3行到最后一行
[root@oldboyedu50-lnb ~]# sed -n '$p' person.txt
110,lidao,COCO
9.8 显示文件中包含oldboy的行
[root@oldboyedu50-lnb ~]# sed -n '/oldboy/p' person.txt
101,oldboy,CEO
9.9 显示文件中从包含101的行 到 105的行
[root@oldboyedu50-lnb ~]# sed -n '/101/,/105/p' person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@oldboyedu50-lnb ~]# sed -n '/oldboy/,/yy/p' person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
9.10 特殊写法:
9.10.1 显示文件的第1和4行和5行
[root@oldboyedu50-lnb ~]# sed -n '1p ;4p; 5p' person.txt
101,oldboy,CEO
104,yy,CFO
105,feixue,CIO
9.10.2 显示 有规律的行
[root@oldboyedu50-lnb ~]# seq 10 |sed -n '1~2p'
1
3
5
7
9
8. grep -A 2 oldboy
[root@oldboyedu50-lnb ~]# sed -n '/Alex/p' person.txt
103,Alex,COO
[root@oldboyedu50-lnb ~]# sed -n '/Alex/,+2p' person.txt
103,Alex,COO
104,yy,CFO
104,yy,CFO
[root@oldboyedu50-lnb ~]# #grep -A2
总结:
1.shell编程 |
2.sed 执行过程 |
3.sed 增删改查 之 查 |
1)行号 2)行号范围 1,5p 3)过滤 // 4)过滤范围 //,// |