自动编程三剑客_shell编程-三剑客

第1章 shell编程(bash编程)

1.1 普通变量与环境变量区别

1.2 变量命名规则

1.3 特殊变量:

$数字 $1 $2    脚本(函数)的第几个参数

$0             脚本的名字

$#             脚本参数的个数

$?             上一个命令的执行结果(返回值)

1.4 判断

1.4.1 条件表达式(测试表达式)

[ -d ]

[ -f ]

1.4.2 if判断

单分支

双分支

1.5 循环

1.5.1 for

批量添加用户

优化系统开机启动项

实例1-1企业案例题:书写脚本检查crond是否在运行

1.如果运行显示crond is running

2.如果没有运行crond is not running

1)需求--->命令

ps -ef |grep crond

2)条件是什么?(是否运行)

[root@oldboyedu50-lnb ~]# ps -ef |grep crond|wc -l

2

如果进程数量是2,显示running

如果进程数量不是2 显示not running

3)书写脚本

[root@oldboyedu50-lnb /server/scripts]# cat  chcr.sh

#!/bin/bash

count=`ps -ef |grep crond|wc -l`

if [ $count -eq 2 ];then

echo "crond is running"

else

echo "crond is not running"

fi

4)进行测试

[root@oldboyedu50-lnb /server/scripts]# sh chcr.sh

crond is running

[root@oldboyedu50-lnb /server/scripts]# /etc/init.d/crond stop

Stopping crond:                                            [  OK  ]

[root@oldboyedu50-lnb /server/scripts]# sh chcr.sh

[root@oldboyedu50-lnb /server/scripts]# sh chcr.sh

crond is not running

[root@oldboyedu50-lnb /server/scripts]# /etc/init.d/crond start

Starting crond:                                            [  OK  ]

书写检查脚本:检查服务 进程是否存在

脚本名称 不要包含被检查名字

[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 [ $count -eq 2 ];then

action "crond is running" /bin/true

else

action "crond is not running" /bin/false

fi

[root@oldboyedu50-lnb /server/scripts]#

[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  ]

1.5.2 循环

for p  in 1 2 3 4 5 6

do

echo $p

done

for p  in {01..6}

do

echo "tao,${p}week ${p}group lidao take you to dabaojian, find ${p}woman."

done

tao,01week 01group lidao take you to dabaojian, find 01woman.

tao,02week 02group lidao take you to dabaojian, find 02woman.

tao,03week 03group lidao take you to dabaojian, find 03woman.

tao,04week 04group lidao take you to dabaojian, find 04woman.

tao,05week 05group lidao take you to dabaojian, find 05woman.

tao,06week 06group lidao take you to dabaojian, find 06woman.

实例1-2优化系统开机启动项,只保留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}'

for name in `chkconfig |egrep -v 'crond|sshd|network|rsyslog|sysstat'|awk '{print $1}' `

do

chkconfig $name off

done

[root@anheqiaobei scripts]# chkconfig --level 1 rdma off

[root@anheqiaobei scripts]# chkconfig --list rdma

rdma            0:off   1:off   2:off   3:off   4:off   5:off   6:off

[root@anheqiaobei scripts]# chkconfig --level 1 udev-post off

[root@anheqiaobei scripts]# chkconfig --list udev-post

udev-post       0:off   1:off   2:off   3:off   4:off   5:off   6:off

实例1-3批量stu01..stu03 添加用户并设置8位随机密码for

第1步:stu{01..3}

第2步:随机密码

[root@oldboyedu50-lnb ~]# date +%N |md5sum |cut -c-8

93e73487

[root@oldboyedu50-lnb ~]# echo $((RANDOM+10000000))

10024538

第3步;添加一个用户 并设置随机密码过程

useradd stu01

pass=`date +%N |md5sum |cut -c-8`

echo $pass |passwd --stdin stu01

echo stu01 $pass >>/tmp/pass.txt

第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

第2章 三剑客:

2.1 find

-maxdepth       最大深度

-type                类型

-name               文件名

-iname              不区分大小写

-mtime              修改时间

-size                  文件大小

!                        非,取反

-exec

-perm                取反

2.2 grep

-v                    取反

-n                    取消默认输出

-E                   egrep

-o                   执行过程

-i                    不区分大小写

-l                  过滤的时候只显示文件名字

-A2                  显示你要找的内容及接下来的xxx行

--color             显示颜色

2.3 sed  stream editor 流编辑器

-r              支持扩展正则

-n              取消默认输出

-i               修改文件内容

-i.bak       修改之前复制

实例2-1sed命令执行过程

1.读取文件内容第1行

2.是否满足条件

1).满足条件 执行对应的命令 p  s  d

2).不满足   继续第1步

3.截止到文件的最后一行

实例2-2sed 增删改查

cat>person.txt<

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

110,lidao,COCO

EOF

1. 显示文件的第5行

[root@oldboyedu50-lnb ~]# sed -n 5p person.txt

105,feixue,CIO

2. 显示文件的第2行到第5行

[root@oldboy50-01 ~]# sed -n '2,5p' person.txt

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

3. 显示文件的第3行到最后一行

[root@oldboyedu50-lnb ~]# sed  -n  '$p' person.txt

110,lidao,COCO

4. 显示文件中包含oldboy的行

[root@oldboyedu50-lnb ~]# sed -n '/oldboy/p' person.txt

101,oldboy,CEO

5. 显示文件中从包含101的行 到 105的行

[root@oldboyedu50-lnb ~]# sed -n '2,5p' person.txt

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

[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

6. 显示文件的第1和4行和5行

[root@oldboyedu50-lnb ~]# sed -n '1p ;4p; 5p' person.txt

101,oldboy,CEO

104,yy,CFO

105,feixue,CIO

7. 显示 有规律的行

[root@oldboyedu50-lnb ~]# seq 10 |sed -n '1~2p'

1

3

5

7

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值