[关闭]
@yanglt7 2018-10-27T13:45:45.000000Z 字数 2256 阅读 733

《Shell 编程》07_函数

Shell


7.1 Shell 函数的概念与作用介绍

7.2 Shell 函数的语法

标准写法:

  1. function 函数名 () {
  2. 指令...
  3. return n
  4. }

简化写法 1:

  1. function 函数名 {
  2. 指令...
  3. return n
  4. }

简化写法 2:

  1. 函数名 () {
  2. 指令...
  3. return n
  4. }

7.3 Shell 函数的执行

Shell 的函数分为最基本的函数和可以传参的函数两种,其执行方式分别如下:

1)执行不带参数的函数时,直接输入函数名即可(注意不带小括号)。格式如下:

  1. 函数名

2)带参数的函数执行方法,格式如下:

  1. 函数名 参数 1 参数 2

7.4 Shell 函数的基础实践

7.4.1 分离函数体和执行函数的脚本文件

  1. cat >>/etc/init.d/functions<<- EOF
  2. ylt(){
  3. echo "I am ylt."
  4. }
  5. EOF
  1. [root@web001 ~]# tail -3 /etc/init.d/functions
  2. ylt(){
  3. echo "I am ylt."
  4. }
  1. #!/bin/bash
  2. [ -f /etc/init.d/functions ] && . /etc/init.d/functions || exit 1
  3. ylt

带参数的 Shell 函数

  1. [root@web001 ~]# tail -3 /etc/init.d/functions
  2. ylt(){
  3. echo "I am ylt. you are $1."
  4. }
  1. #!/bin/bash
  2. [ -f /etc/init.d/functions ] && . /etc/init.d/functions || exit 1
  3. ylt yyy

7.4.2 利用 Shell 函数开发 rsync 服务启动脚本

  1. [root@web001 scripts]# cat rsync1.sh
  2. #!/bin/bash
  3. # checkconfig: 2345 20 80
  4. . /etc/init.d/functions
  5. function usage(){
  6. echo "usage:$0 {start|stop|restart}"
  7. exit 1
  8. }
  9. function start(){
  10. rsync --daemon
  11. sleep 1
  12. if [ `netstat -lntup|grep rsync|grep -v grep|wc -l` -ge 1 ]; then
  13. action "rsyncd is started." /bin/true
  14. else
  15. action "rsyncd is started." /bin/false
  16. fi
  17. }
  18. function stop(){
  19. killall rsync &>/dev/null
  20. sleep 2
  21. if [ `netstat -lntup|grep rsyncd|wc -l` -eq 0 ]; then
  22. action "rsyncd is stopped." /bin/true
  23. else
  24. action "rsyncd is stopped." /bin/false
  25. fi
  26. }
  27. function main(){
  28. if [ $# -ne 1 ]; then
  29. usage
  30. fi
  31. if [ "$1" = "start" ]; then
  32. start
  33. elif [ "$1" = "stop" ]; then
  34. stop
  35. elif [ "$1" = "restart" ]; then
  36. stop
  37. sleep 1
  38. start
  39. else usage
  40. fi
  41. }
  42. main $*
  1. [root@web001 scripts]# sh rsync1.sh start
  2. rsyncd is started. [ OK ]
  3. [root@web001 scripts]# sh rsync1.sh stop
  4. rsyncd is stopped. [ OK ]
  5. [root@web001 scripts]# sh rsync1.sh restart
  6. rsyncd is stopped. [ OK ]
  7. rsyncd is started. [ OK ]
  8. [root@web001 scripts]# sh rsync1.sh s
  9. usage:rsync1.sh {start|stop|restart}
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注