目录
函数 作用域 脚本传参
函数
【 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 作为返回值
}//代码效果参考:http://www.ezhiqi.com/zx/art_3504.html
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
}//代码效果参考:http://www.ezhiqi.com/bx/art_7639.html
}//代码效果参考:http://www.ezhiqi.com/zx/art_7374.html
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