实现FTP-Server进程健康检查的一个shell脚本,寥寥数行代码却问题频出,在此总结一二。
一.脚本书写规范:
1.脚本开发时,务必在脚本的开头编写脚本解析器。
note:开发人员一般采用默认的B SHELL 即#!/bin/bash ,也有采用#!/bin/sh,两者在语法上是存在一定差异的,无特殊情况下,必须强制使用#!/bin/bash。
2.对变量进行引用或字符串组合时,必须使用${}将变量括起来。
note:对变量进行字符串组合或者引用时,虽然脚本解析器会自动匹配变量,但是在某些特殊的变量名称场景下可能出错,为了避免出错,必须将变量通过${}括起来。
3.命令替换时避免使用反引号` `,选择使用$()。
note:` ` 很容易与 ' ' ( 单引号)搞混,使用$()对命令域包含起来,不容易丢失,清晰直观。
4.初始化一个变量为空时,必须使用num="" 或者unset num,不得使用num=之类的表达式。
eg:
建议使用: unset num 或者num=””
不建议使用: num=
二.Bash 中的特殊保留字:
$IFS 这个变量中保存了用于分割输入参数的分割字符,默认识空格。
$HOME 这个变量中存储了当前用户的根目录路径。
$PATH 这个变量中存储了当前 Shell 的默认路径字符串。
$PS1 表示第一个系统提示符。
$PS2 表示的二个系统提示符。
$PWD 表示当前工作路径。
$EDITOR 表示系统的默认编辑器名称。
$BASH 表示当前Shell的路径字符串。
$1, $2, ... 表示系统传给脚本程序或脚本程序传给函数的第一个、第二个等参数。 $0表示当前脚本的文件名。
$# 表示脚本程序的命令参数个数或函数的参数个数。
$$ 表示该脚本程序的进程号,常用于生成文件名唯一的临时文件。
$? 表示脚本程序或函数的返回状态值,正常为 0,否则为非零的错误号。
$* 表示所有的脚本参数或函数参数。 $@ 和 $* 涵义相似略有区别,但是比 $* 更安全。
$! 表示最近一个在后台运行的进程的进程号。
三.注意事项:
1.避免代码重复,增加冗余度。
2.针对脚本里面展示的任何一种情况都要在环境上进行验证。
Eg:针对本脚本要验证进程启动、进程健康或者进程故障的各个情况是否能正确输出,日志能否正常打印。