迷,什么都是道理;悟,什么都不是道理。

CentOS   MySQL

导航

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  阅读(86)  评论(0编辑  收藏  举报