通过使用命令行工具和外壳流控制(如 if 或 case)的组合,您可以使用单个源来选择各种要使用的选项。有两个工具在这种情况下很有用:一个工具识别主机(如 hostname 或 uname),另一个工具识别平台 (uname)。
uname 产生的缺省输出是基本操作系统名称,如 Linux 或 Solaris。例如,可以按照前一部分中的 ps 示例,将该命令与 case 语句结合使用以选择正确的别名,如清单 10 所示。
清单 10. uname 的输出
UNAME='uname'
case "$UNAME" in
FreeBSD|NetBSD|Darwin)
alias ps='ps -o pid,ppid,command'
break
;;
Solaris|Linux)
alias ps='ps -o pid,ppid,cmd'
break
;;
esac
也可以在脚本中使用同样的基本过程来选择特定的序列。
在使用内联外壳函数时,与在每次使用函数时才做出决定相比,使用类似如此的包装来选择正确的函数定义通常更容易,因为这样做会更加高效。
总结
规范化环境对于简化管理大有帮助。它减轻了您的负担,帮助您确定所在的系统类型,以及哪个命令和/或选项集最适合于获取所需信息或执行所需操作。为每个命令选择正确的机制完全取决于该命令和您要尝试达到的目的。
在您希望调用命令行选项的单个命令上,最好使用别名机制。内联函数最适合于您希望容易地将其嵌入当前脚本环境的更复杂操作和序列,而完整的单独脚本则最适合于麻烦的多步骤操作,或您希望为命令(或选项)提供支持而不更改外壳环境的场合。
尽管有这些明显的优点,但是务必要记住,如果将自己过于屏蔽在基础的系统之外,当发生故障而您无法访问脚本时,您可能处于无准备的状态——您应该寻求扩展和扩充,而不是替代。
标签: