1、写脚本规范及注意事项
- 变量名称不能和系统已经存在的命令等重复
free==>Free
- 判断单位要统一
- 脚本一行不超过一屏的一半。
- 能写成变量的内容尽量写成变量
2、【练习题1】监控Memcached缓存服务是否正常
控Memcached缓存服务是否正常,模拟用户(web客户端)检测。
使用nc命令加上set/get来模拟检测。
脚本内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| [lepeng@centos ~] #!/bin/bash
. /etc/init.d/functions . /etc/init.d/run MemPort=`netstat -lntp |grep -c 0.0.0.0:11211` Set_Key='printf "set clsn2017 0 10 8\r\nclsn2018\r\n"|nc 10.0.0.180 11211' Get_Key='printf "get clsn2017\r\n" |nc 10.0.0.180 11211 |grep -c clsn2018' ReStart='systemctl restart memcached.service' if [ $MemPort -eq 1 ] then $Set_Key $Get_Key if [ $? -ne 1 ] then action "Memcached 运行正常!" /bin/true else action "Memcached 服务异常!" /bin/false fi else action "服务未启动!" /bin/false $ReStart jingdutiao fi
|
脚本执行过程
3、【练习题2】使用(case)编写rsync管理脚本
写网络服务独立进程模式下Rsync的系统启动脚本,例如:/etc/init.d/rsyncd {start|stop|restart}
要求:
要使用系统函数库技巧。
在centos 6中服务可被chkconfig管理。
注意:服务的停止操作和启动操作之间要有间隔时间,使用sleep 1
1 2 3
| pkill 进程 sleep 1 start 服务
|
rsync服务启动脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| [lepeng@centos ~] #!/bin/bash
. /etc/init.d/functions . /etc/init.d/run Rsync_Port=`netstat -lntup |grep -c 0.0.0.0:873` Rsync_COM1='rsync --daemon' Rsync_COM2='pkill rsync' Rsync_Start() { Rsync_Port1=`netstat -lntup |grep -c 0.0.0.0:873` if [ $Rsync_Port1 -ne 0 ] then action "服务已启动" /bin/false exit 3 else $Rsync_COM1 QiDong fi } Rsync_Stop() { Rsync_Port2=`netstat -lntup |grep -c 0.0.0.0:873` if [ $Rsync_Port2 -eq 0 ] then action "服务未启动" /bin/false exit 3 else $Rsync_COM2 TingZhi fi } Rsync_Status() { if [ $Rsync_Port -eq 1 ] then echo "Rsync 服务运行中..." else echo "Rsync 服务未运行" fi } Rsync_Restart() { Rsync_Stop Rsync_Start } COMMAND=$1 case "$COMMAND" in start) Rsync_Start ;; stop) Rsync_Stop ;; status) Rsync_Status ;; restart|reload|force-reload) Rsync_Restart ;; *) echo $"Usage: $0 {start|stop|status|restart|reload|force-reload}" exit 2 esac
|
脚本执行过程
4、获取取文件中的行,单词和字符
4.1、迭代获取文件中的每一行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| while read line; do echo $line; done < file.txt
cat file.txt|while read line do echo $line done
exec < file.txt while read line; do echo line; done
|
4.2、迭代获取每一个单词
1 2 3 4
| for word in $line; do echo $word; done
|
4.3、迭代获取每一个字符
1 2 3 4 5
| word=participate for ((i=0;i<${#word};i++)) do echo ${word:1:1}; done
|
4.4、同时获取取文件中的行,单词和字符脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #!/bin/bash n=1 while read i do echo "第${n}行 $i" m=1 for x in $i do echo "第${m}个单词 $x" echo $x|grep -o . ((m++)) done ((n++)) done < $1
|
4.5、eval 命令用法
eval 命令的说明
1 2 3 4 5 6 7 8 9
| eval: eval [参数 ...] 将参数作为 shell 命令执行。 将 ARGs 合成一个字符串,用结果作为 shell 的输入, 并且执行得到的命令。 退出状态: 以命令的状态退出,或者在命令为空的情况下返回成功。 1.5 break continue exit return
|
示例:
1 2 3 4 5 6
| [lepeng@centos ~]# clsn=6 [lepeng@centos ~]# echo {1..$clsn} {1..6}
[lepeng@centos ~]# eval echo {1..$clsn} 1 2 3 4 5 6
|