学习Unix操作系统外壳脚本
创始人
2024-06-27 17:00:31
0次

经过长时间的学习Unix操作系统的知识,这次我们来介绍关于使用外壳脚本的知识。它是典型Unix操作系统管理员使用命令解决的方案之一。当您要构建的包装特别复杂时,更好的解决方案是使用外壳脚本,您可以代替原始命令调用这些脚本。使用外壳脚本,您可以更创造性地处理替代,甚至为另一个命令提供完全由外壳脚本驱动的替代。

使用外壳脚本的方式操作Unix操作系统命令

构建一致环境的最容易和最兼容的方法,是创建可用作实际命令的包装的外壳脚本,这样考虑了您希望支持的各种选项和设置。例如,Unix操作系统useradd 和 adduser 命令在设置参数(如用户 ID 或组成员资格)时支持同样的单字母命令行选项,因此 Linux 上的 $ adduser -u 1000 -G sales,marketing mcbrown 等效于 Solaris 上的 $ useradd -u 1000 -G sales,marketing mcbrown。

然而,Linux 版本还支持扩展命令选项,例如,--uid 和 --groups 等效于上面的命令行选项。这些扩展选项在 Solaris 上不受支持,但是,如果创建一个名为 adduser 的外壳脚本,您就可以模拟 Linux 版本,然后用适当的选项运行实际的 Solaris useradd 命令。

例如,在Unix操作系统中用作 adduser 或 useradd 命令的包装的示例外壳脚本。

 

  1. #!/bin/bash  
  2. # -*- shell-script -*-   
  3. for i in $*  
  4. do  
  5. case $i in  
  6. --uid|-u) OPT_UID=$2; shift 2;;  
  7. --groups|-G) OPT_GROUPS=$2; shift 2;;  
  8. --gid|-g) OPT_GROUP=$2; shift 2;;  
  9. --home-dir|-d) OPT_HOMEDIR=$2; shift 2;;  
  10. --shell|-s) OPT_SHELL=$2;shift 2;;  
  11. --non-unique|-o) OPT_NONUNIQUE=1;shift 2;;  
  12. --comment|-c) OPT_COMMENT=$2;shift 2;;  
  13. esac  
  14. done  
  15. OPTS="" 
  16. if [ -n "$OPT_$HOMEDIR" ]  
  17. then  
  18. OPTS="$OPTS -d $OPT_HOMEDIR" 
  19. fi  
  20. if [ -n "$GROUP" ]thenOPTS="$OPTS -g $OPT_GROUP" 
  21. fi  
  22. if [ -n "$OPT_GROUPS" ]  
  23. then  
  24. OPTS="$OPTS -G $OPT_GROUPS" 
  25. fi  
  26. if [ -n "$OPT_SHELL" ]thenOPTS="$OPTS -s $OPT_SHELL" 
  27. fi  
  28. if [ -n "$OPT_UID" ]  
  29. then  
  30. OPTS="$OPTS -u $OPT_UID" 
  31. fi  
  32. if [ -n "$OPT_COMMENT" ]  
  33. then  
  34. OPTS="$OPTS -c \"$OPT_COMMENT\""  
  35. fi  
  36. if [ -n "$OPT_NOUNIQUE" ]  
  37. then  
  38. OPTS="$OPTS -o" 
  39. fi  
  40. CMD=adduser 
  41. UNAME=`uname`  
  42. case $UNAME in  
  43. Solaris) CMD=useradd;break;;  
  44. esac  
  45. $CMD $OPTS $*  


以上的脚本的关键是 foreach 循环,它遍历所提供的命令行参数(在 $* 中提供)。对于每个选项,case 语句会尝试识别该选项——使用短格式或长格式并设置一个变量。Unix操作系统命令行开关为 $1。如果该选项后面正常地跟着一个值(例如,用户 ID),您可以将 $2 当作该值来进行访问,并使用它将该值赋于某个变量。

识别出某个选项后,shift 语句从 $* 变量列表中移动一个位置(若指定了数字,则移动指定数目的位置),以便已经识别出的命令行参数在循环的下一次迭代中不再在 $* 变量中。

识别并提取出可能的参数以后,您所需做的就是构建新的选项来提供给最终要使用的命令。由于useradd/adduser 都支持短格式的参数,所以可在此基础上构建新的命令选项字符串。这是通过检查对应的变量是否已设置并将该选项添加到命令行来实现的。请注意双引号的使用,它确保了原始命令中引用的参数被保留并得到正确识别。

通过在Unix操作系统使用命令行工具和外壳流控制(如 if 或case)的组合,您可以使用单个源来选择各种要使用的选项。有两个工具在这种情况下很有用:一个工具识别主机(如 hostname 或 uname),另一个工具识别平台 (uname)。 uname 产生的缺省输出是基本操作系统名称,如 Linux 或Solaris。

例如,可以按照前一部分中的ps 示例,将该命令与case 语句结合使用以选择正确的别名,uname 的输出,例如 UNAME='uname'
 

  1. case "$UNAME" in  
  2. FreeBSD|NetBSD|Darwin)  
  3. alias ps='ps -o pid,ppid,command' 
  4. break  
  5. ;;  
  6. Solaris|Linux)   
  7. alias ps='ps -o pid,ppid,cmd' 
  8. break  
  9. ;;  
  10. esac 


也可以在脚本中使用同样的基本过程来选择特定的序列。这次,我们就介绍完了关于Unix操作系统外壳脚本的知识。

【编辑推荐】

  1. 解析Unix操作系统变种SCO UnixWare
  2. 10个程序来考验Unix操作系统
  3. 变成Unix操作系统高手
  4. 快速学习Unix操作系统
  5. 关于Unix操作系统问题

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
只需三步,让你掌握阿尔法路由器... 请参照以下阿尔法路由器设置方法,通过浏览器进入及设置宽带路由器。经过这三个步骤的设置,基本上能够熟悉...
如何更省钱? 近期特价热门硒鼓... 如今激光打印设备已经成为商务或企业的绝对主力办公设备,但采购者往往忽视了激光打印设备所用的耗材,相对...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...