鸟哥Linux私房菜之学习Shell Scripts(4)

发表于:2009-12-03 11:00

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

#
Linux
#
linux

  一般来说,使用『 case $变量 in 』这个语法中,当中的那个 $变量 大致有两种取得的方式:

  直接下达式:例如上面提到的,利用『 script.sh variable 』 的方式来直接给予 $1 这个变量的内容,这也是在 /etc/init.d 目录下大多数程序的设计方式。

  交互式:透过 read 这个指令来让使用者输入变量的内容。

  这么说或许您的感受性还不高,好,我们直接写个程序来玩玩:让使用者能够输入 one, two, three , 并且将使用者的变量显示到屏幕上,如果不是 one, two, three 时,就告知使用者仅有这三种选择。

  [root@linux scripts]# vi sh11.sh
  #!/bin/bash
  # Program:
  # Let user input one, two, three and show in screen.
  # History:
  # 2005/08/29        VBird        First release
  PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  export PATH
  echo "This program will print your selection !"
  # read -p "Input your choice: " choice
  # case $choice in
  case $1 in
  "one")
  echo "Your choice is ONE"
  ;;
  "two")
  echo "Your choice is TWO"
  ;;
  "three")
  echo "Your choice is THREE"
  ;;
  *)
  echo "Usage {one|two|three}"
  ;;
  esac

  此时,您可以使用『 sh sh11.sh two 』的方式来下达指令,就可以收到相对应的响应了。 上面使用的是直接下达的方式,而如果使用的是交互式时,那么将上面第 10, 11 行的 "#" 拿掉, 并将 12 行加上批注 (#),就可以让使用者输入参数啰~这样是否很有趣啊?!

  --------------------------------------------------------------------------

  利用 function 功能

  什么是『函数 (function)』功能啊?简单的说,其实, 函数可以在 shell script 当中做出一个类似自订执行指令的东西,最大的功能是, 可以简化我们很多的程序代码~举例来说,上面的 sh11.sh 当中,每个输入结果 one, two, three 其实输出的内容都一样啊~那么我就可以使用 function 来简化了! function 的语法是这样的:

  function fname() {
  程序段
  }

  那个 fname 就是我们的自订的执行指令名称~而程序段就是我们要他执行的内容了。 要注意的是,在 shell script 当中, function 的设定一定要在程序的最前面, 这样才能够在执行时被找到可用的程序段喔!好~我们将 sh11.sh 改写一下:

  [root@linux scripts]# vi sh11-2.sh
  #!/bin/bash
  # Program:
  # Let user input one, two, three and show in screen.
  # History:
  # 2005/08/29        VBird        First release
  PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  export PATH
  function printit(){
  echo -n "Your choice is "
  }
  echo "This program will print your selection !"
  case $1 in
  "one")
  printit; echo $1 | tr 'a-z' 'A-Z'
  ;;
  "two")
  printit; echo $1 | tr 'a-z' 'A-Z'
  ;;
  "three")
  printit; echo $1 | tr 'a-z' 'A-Z'
  ;;
  *)
  echo "Usage {one|two|three}"
  ;;
  esac

  以上面的例子来说,我做了一个函数名称为 printif ,所以,当我在后续的程序段里面, 只要执行 printit 的话,就表示我的 shell script 要去执行『 function printit .... 』 里面的那几个程序段落啰! 当然啰,上面这个例子举得太简单了,所以您不会觉得 function 有什么好厉害的, 不过,如果某些程序代码一再地在 script 当中重复时,这个 function 可就重要的多啰~ 不但可以简化程序代码,而且可以做成类似『模块』的玩意儿,真的很棒啦!

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号