Shell开发在运维中的经验总结
9)对于打包后还需进行压缩的文件,建议使用管道进行处理,如: 不建议两部分分开执行: 10)使用ps命令筛选进程时,如能确定进程所属用户,必须在参数中指定用户名称,,如其输出作为kill命令的输入,则必须指定进程所属用户,如: 这里介绍的主要是日常shell编写中遇到比较隐蔽或看似简单,却难以发现的“坑”,编写中应尽量避免使用,使用更优的方法避免重蹈覆辙。 1)更新文件使用>不用cp 使用>修改和回退文件时,保留原文件的属组和权限,避免使用cp时权限属组被修改。 2)使用kill前确认 关键字用-w 精确匹配字段; kill前后都保留现场, 两次ps -ef|grep -w 关键字|grep -v grep >>/tmp/kill_进程名_.backup; 删除前要校验,获取进程号是否唯一,避免多杀或误杀的情况。 3)使用rm前确认 删除前备份删除对象信息,避免使用变量,直接使用文件和目录名; 如果必须使用时,删除前,建议检查避免误删,删除目录和文件信息保留: 建议禁用find遍历根目录进行查找,同时删除前进行确认,避免多删或误删的情况。 4)For循环的坑 for循环的in条件按空格来区分,避免进入不正确或死循环。 5)while循环的禁忌 如果还想使用循环中的变量,不要while结合管道使用。 6)慎用cp 这句话基本上正确,但同样有空格分词的问题。所以应当用双引号: 但是如果凑巧文件名以 - 开头,这个文件名会被 cp 当作命令行选项来处理。 可以试试下面这个: 但也可能再碰上一个不支持 -- 选项的系统,所以最好用下面的方法: 7)慎用cd 避免使用cd到操作目录再操作的方式,可能导致进入目录失败,误删除,如: 建议如下: 8) 用[[ ]]代替[ ] 当$var为空时,上面的命令就变成了[ ="bar" ] 类似地,当$var包含空格时: [ space words here = "var" ]两者都会出错。所以应当用双引号将变量括起来: [ "$var" = var ] 几乎完美了。 (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |