Day 31 shell 编程-下--循环

Day 31 shell 编程---循环

第1章 shell编程(bash编程)

1.1 回顾

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

1.1.2  变量命名规则

1.1.3  特殊变量:

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

    $0             脚本的名字

    $#             脚本参数的个数

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

1.1.4 判断

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

        [ -d ]   目录

        [ -f ]    文件

    if判断

        单分支

        双分支

扫描二维码关注公众号,回复: 2880231 查看本文章

1.1.5 循环

  for

批量添加用户

优化系统开机启动项

第2章 今日内容:

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

1.如果运行显示crond is running

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

2.1.1 1)需求--->命令

ps -ef |grep crond

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

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

2

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

           不是2 显示not running

2.1.3 3)书写脚本

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

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

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

2.1.5 . /etc/init.d/functionsaction配合显示

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

[root@oldboyedu50-lnb /server/scripts]# action "oldboy is running" 

oldboy is running                                          [  OK  ]

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

2.1.6 . /etc/init.d/functionsaction配合显示脚本

[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

2.1.7 显示完后检查                                                               

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

2.2 小结:

2.2.1 检查服务状态

2.2.2 注意事项1:脚本名称不要包含服务/进程名字

2.2.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

#进程名字: 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`

结果显示成功则为1,失败则为0

#if

if [ $count -eq 1 ];then

   action "crond is running" /bin/true

else

   action "crond is not running" /bin/false

fi

第3章 循环

for p  in 1 2 3 4 5 6

do

   echo $p

done

3.1 例题

tao,01week 01group take you to 大保健, find 01woman.

tao,02week 02group take you to 大保健, find 02woman.

tao,03week 03group take you to 大保健, find 03woman.

tao,04week 04group take you to 大保健, find 04woman.

tao,05week 05group take you to 大保健, find 05woman.

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   

3.2 优化系统开机启动项,只保留crond,sshd,network,rsyslog,sysstat其余服务都关闭

chkconfig |egrep -v 'crond|sshd|network|rsyslog|sysstat'|awk '{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

   

3.3 chkcofig默认关闭/开启2345,关闭/开启单用户用--level

[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

3.4 批量stu01..stu03 添加用户并设置8位随机密码for

3.4.1 1步:stu{01..3}

3.4.2 2步:随机密码

[root@oldboyedu50-lnb ~]# date +%N |md5sum |cut -c-8   随机前八位密码

93e73487

 

echo $RANDOM  #最大到65535

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

10024538      

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

    useradd stu01

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

    echo $pass |passwd --stdin stu01

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

3.4.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

3.5 三剑客:

sed  grep  awk 

3.5.1 find

    -maxdepth   深度

    -type        类型

    -name       文件名

    -iname       不区分大小写

    -mtime      最后修改时间

    -size        文件/目录大小

    !           取反

    -exec 命令{}\  匹配查找到的文件用其他命令执行

    -perm  permission      按照权限查找

3.5.2 grep

     -v   过滤/取反

     -n   显示行号

     -E   === egrep  正则表达式

     -o   显示查找过程

     -i    不区分大小写

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

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

3.5.3 sed  stream editor 流编辑器

    -r   使用扩展正则

    -n  取行

    -i   替换

    -i.bak  备份并替换

 sed -r       's#[0-9]+##g'  oldboy.txt

     选项      '命令     小尾巴'

     option

 sed命令运行过程.png

 sed    '条件命令'

 sed    'pattern命令'

 sed    '模式命令'

 sed -n '1p'

sed命令使用方法.png

3.5.4 sed命令执行过程

1.读取文件内容第1

2.是否满足条件

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

    2).不满足   继续第1

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

3.5.5 sed 增删改查

3.5.5.1 

准备环境

cat>person.txt<<EOF

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@CJY scripts]# 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 '/101/,/105/p' person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

 

3.5.6 特殊写法:

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

9

8. grep  -A 2  oldboy  显示我要找的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

 

3.6 总结:

3.6.1 shell编程

3.6.2 sed 执行过程

3.6.3 sed 增删改查

1)行号

2)行号范围 1,5p

3)过滤 //

4)过滤范围 //,//


猜你喜欢

转载自blog.51cto.com/13859649/2162066
今日推荐