function

function_name param1 param2 …

  1. function_name () {
  2. startment1
  3. ...
  4. }
  5. function function_name () {
  6. ...
  7. }
  8. # sayHello 如果将执行放在前面会报错
  9. function sayHello(){
  10. echo "hello world"
  11. echo `date`
  12. }
  13. sayHello
  14. # B函数调用A函数
  15. function john() {
  16. echo "hello, this is John"
  17. }
  18. function alice() {
  19. john
  20. echo "Hello, this is Alice"
  21. }
  22. alice
  1. function sum () {
  2. let "z = $1 + $2"
  3. return $z # return 的值必须在0~255范围内
  4. }
  5. sum 22 4
  6. echo $? #输出26
  7. sum 250 16
  8. echo $? # 输出10
  1. length() {
  2. str=$1
  3. result=0
  4. if [ "$str" != "" ];then
  5. result=${#str}
  6. fi
  7. echo "$result"
  8. }
  9. len=$(length "abc123")
  10. echo $len #输出6

函数别名

alias name=”command”

  1. alias ls="ls -l" # 定义别名
  2. unalias ls #删除别名

1.命令行中输入 lsl() 定义一个函数
$ lsl()
> {
> ls -l “$@”
> }
2.命令行中输入 lsl
就会执行 ls -l “$@” 指令了
3.unset lsl 删除lsl函数
4.命令行中输入 lsl,此时提示
bash: lsl: command not found

移动参数的位置

  1. func () {
  2. while (($# > 0))
  3. do
  4. echo $1
  5. shift # shift指令会改变$#的值,会将所有的参数都左移动一位
  6. done
  7. }
  8. func $@
  9. # ./xx.sh a b c
  10. # a
  11. # b
  12. # c

通过 getopts 接收函数参数
getopts optstring [args]

  1. #! /bin/bash
  2. func() {
  3. echo $#
  4. while getopts ":a:b:c:" arg
  5. do
  6. case "$arg" in
  7. a)
  8. echo "-a ${OPTARG}"
  9. ;;
  10. b)
  11. echo "-b ${OPTARG}"
  12. ;;
  13. c)
  14. echo "-c ${OPTARG}"
  15. ;;
  16. *)
  17. echo "* ${OPTARG}"
  18. ;;
  19. esac
  20. done
  21. }
  22. func $@
  23. #$ ./test.sh -a hello -b world -c aaa -l bbb
  24. #8
  25. #-a hello
  26. #-b world
  27. #-c aaa
  28. #* l