CentOS Shell 编程
目录
函数 作用域 脚本传参
函数
[ root@stock.data.news.100 pts/0 2021-01-02/31@6 20:58:42 ~ ] # cat test.sh #!/bin/bash
abc() { echo "1 step" return 11 # 遇到 return 后,立即跳出函数体,导致 return 后面的语句无法执行。同时 return 返回函数的执行状态。 echo "2 step" } abc echo $? [ root@stock.data.news.100 pts/0 2021-01-02/31@6 20:58:46 ~ ] # bash test.sh 1 step 11
[ root@stock.data.news.100 pts/0 2021-01-02/31@6 21:56:22 ~ ] # cat test.sh #!/bin/bash abc() { local speed=$1 # 函数也具有 $1 $2 $# $* 等于脚本接收参数的功能一样。 echo $(($speed + 100)) # 作为函数的返回值,而不是使用 return 作为返回值 } my_speed=$(abc 50) # $(abc 50) 调用函数 echo $my_speed [ root@stock.data.news.100 pts/0 2021-01-02/31@6 21:56:26 ~ ] # bash test.sh 150
变量作用域
[ root@stock.data.news.100 pts/0 2021-01-02/31@6 21:04:05 ~ ] # cat test.sh #!/bin/bash abc() { local speed=100 # local 将变量设置局部变量 } abc echo $speed [ root@stock.data.news.100 pts/0 2021-01-02/31@6 21:04:08 ~ ] # bash test.sh
[ root@stock.data.news.100 pts/0 2021-01-02/31@6 21:08:46 ~ ] # cat test.sh #!/bin/bash abc() { aaa() { speed=100 } } abc # 执行函数 abc,则将 aaa 函数也预处理 aaa # 若没有执行 abc,直接调用 aaa ,则会报错 echo $speed # 变量无论在哪里定义,都是全局变量(除非使用 local 关键字定义) [ root@stock.data.news.100 pts/0 2021-01-02/31@6 21:08:51 ~ ] # bash test.sh 100
传参
[ root@stock.data.news.100 pts/0 2021-01-02/31@6 21:46:47 ~ ] # cat test.sh #!/bin/bash echo "脚本名称(\$0): $0" echo "第一个参数(\$1): $1" echo "第二个参数(\$2): $2" echo "参数的总数(\$\#): $#" echo "所有参数(\$*): $*" echo "所有参数(\$@): $@" echo "该脚本进程ID(\$\$): $$" echo -e '\nfor $*' j=1 for i in $* do echo $i $j j=$(($j + 1)) done echo -e '\nfor $@' j=1 for i in $@ do echo $i $j j=$(($j + 1)) done echo -e '\nfor "$*"' j=1 for i in "$*" do echo $i $j j=$(($j + 1)) done echo -e '\nfor "$@"' j=1 for i in "$@" do echo $i $j j=$(($j + 1)) done [ root@stock.data.news.100 pts/0 2021-01-02/31@6 21:46:49 ~ ] # bash test.sh ab cd ef 脚本名称($0): test.sh # 若 bash /root/test.sh ab cd ef ,那么$0 则显示完整路径。通过 dirname 提取路径,basename 提取文件名 第一个参数($1): ab 第二个参数($2): cd 参数的总数($\#): 3 所有参数($*): ab cd ef 所有参数($@): ab cd ef 该脚本进程ID($$): 2265 for $* ab 1 cd 2 ef 3 for $@ ab 1 cd 2 ef 3 for "$*" ab cd ef 1 for "$@" ab 1 cd 2 ef 3
posted on 2021-01-02 21:02 3L·BoNuo·Lotus 阅读(87) 评论(0) 编辑 收藏 举报