Shell 开发在运维中的经验总结

无论是系统运维,还是应用运维,均可分为“纯手工”—> “脚本化”—> “自动化”—>“智能化”几个阶段,其中自动化阶段,主要是将一些重复性人工操作和运维经验封装为程序或脚本,一方面避免重复性操作及风险,另一方面提高执行效率。在自动化运维的转变过程中,经常使用的可能就是shell脚本了,今天主要分享下shell脚本开发在运维工作中的一些经验总结。

小脚本有大智慧,别小看几十行代码,夹杂着系统设计、代码规范和操作经验等等细节,在建设自动化运维的工作中,还是很值得我们研究学习的,下面总结这些也都是源于各位脚本达人和我们在自身工作中“遇到的坑”、“摔过的跟头”和“排过的雷”,与大家共享。

Shell 开发在运维中的经验总结

这里主要介绍并参考我行已经形成的一些shell编写规范,编写时严格遵守这些规范,不仅使编写人受益,同时也能提高使用者的执行效率。

  1. 脚本开头部分应有脚本功能说明、参数使用说明、作者姓名、创建/修改日期、版本信息,格式为:
    Shell 开发在运维中的经验总结
  2. 脚本编写时,注意格式对齐,如所有的循环或者判断语句前后的语句进行对齐,以及case的选取完全
    Shell 开发在运维中的经验总结
  3. 脚本开头执行时,执行如下命令,在执行过程中若遇到使用了未定义的变量或命令返回值为非零,将直接报错退出:
    Shell 开发在运维中的经验总结
  4. 建议将命令行的每个参数放在单引号、双引号中,特别是rm、mv等可能对生产现有数据造成修改的操作,建议使用垃圾箱策略:rm操作转意为mv操作,制定文件保存目录,以防回退,并定期清理:
    Shell 开发在运维中的经验总结
  5. 命令行中参数需要使用‘’、‘?’通配符的,应依据最精确匹配原则,如能确定文件、目录名称的前缀、后缀、扩展名及其他可识别关键字的,须在参数中包含该信息,如能确定文件、目录的长度应使用‘?’通配符,不得使用‘’,推荐的使用方式:
    Shell 开发在运维中的经验总结
    Shell 开发在运维中的经验总结
  6. 给数值型变量的赋值后,需由手段保证变量的值为数值型,避免在后续的处理中出现异常

#!/bin/bash
count=`cat test.log|wc -l`
isNumber $count
isNumber()
{
if [ $1 -eq $count ];then
echo $1 is number”
else
echo $1 isn’t a number”
exit 1
fi
}

  1. 在判断条件中使用的变量,必须包含在双引号中,如:

if [ $i -lt $max ]
then
break
fi
if [ -f $conf ]
then
break
fi

Shell 开发在运维中的经验总结

  1. 对文件进行打包备份时,必须使用相对路径进行打包,如:
    Shell 开发在运维中的经验总结
  2. 对于打包后还需进行压缩的文件,建议使用管道进行处理,如:
    Shell 开发在运维中的经验总结
  3. 使用ps命令筛选进程时,如能确定进程所属用户,必须在参数中指定用户名称,如其输出作为kill命令的输入,则必须指定进程所属用户,如:
    kill -9ps -fu $USERNAME| grep java |grep AdminServer

易错类shell编写

  1. 更新文件使用 > ,不适用cp
    使用> 修改文件和回退文件的时候,保留源文件的属主和权限,避免使用cp时权限属组被修改,不过也可以在cp是使用-pr保留原先权限和属组
    Shell 开发在运维中的经验总结
  2. 使用kill命令前需确认。
    关键字使用 -w 精确匹配。
    kill前后都保留现场, 两次ps -ef|grep -w 关键字 | grep -v grep>> /tmp/kill_进程名.backup
    删除前需要确认校验,获取的进程号是否唯一,避免误杀
    Shell 开发在运维中的经验总结
  3. 使用rm前确认
    删除前备份删除对象信息,避免使用变量,直接使用文件和目录名;
    如果必须使用时,删除前,建议检查避免误删,删除目录和文件信息保留:
    Shell 开发在运维中的经验总结
    尽量不要用find 遍历根目录进行查找,同事删除前需要进行确认,避免多删误删。
  4. for循环的in条件按空格来区分,避免进入不正确或死循环
    Shell 开发在运维中的经验总结
  5. while循环的禁忌,如果还想使用循环中的变量,不要while结合管道使用。
    Shell 开发在运维中的经验总结
  6. 慎用cp,这句话基本上正确,但同样有空格分词的问题。所以应当用双引号:
    cp “$file” “$target”
    Shell 开发在运维中的经验总结
  7. 慎用cd
    避免使用cd到操作目录再操作的方式,可能导致进入目录失败,误删除,如:
    Shell 开发在运维中的经验总结
  8. 用[[ ]]代替[ ]
    Shell 开发在运维中的经验总结
  9. 管道操作中不要同时读写文件
    Shell 开发在运维中的经验总结
  10. cd的易错问题
    Shell 开发在运维中的经验总结

应用类

Shell 开发在运维中的经验总结
Shell 开发在运维中的经验总结

Shell 开发在运维中的经验总结
Shell 开发在运维中的经验总结

Shell 开发在运维中的经验总结

Shell 开发在运维中的经验总结

 

极牛网精选文章《Shell 开发在运维中的经验总结》文中所述为作者独立观点,不代表极牛网立场。如若转载请注明出处:https://geeknb.com/12034.html

(38)
打赏 微信公众号 微信公众号 微信小程序 微信小程序
主编的头像主编认证作者
上一篇 2019年12月13日 下午3:55
下一篇 2019年12月15日 下午2:43

相关推荐

发表回复

登录后才能评论
扫码关注
扫码关注
分享本页
返回顶部