函数和数组

函数和数组

一、函数的定义与调用

1. 函数的作用

  • 函数可以将一个专门的功能进行封装,用于解决一个特定的问题,并且可以通过传递不同的参数给某个函数,实现处理不同数据的能力
  • 函数的参数与脚本的参数比较类似

2. 函数的使用

  • 函数名、参数、返回结果,其中函数名是必须的,参数和返回结果可选,根据需要进行处理
function 函数名()
{……}

或

函数名()
{ 命令1 }

示例:
# 定义一个函数
function add()
{
    let sum=$1+$2
    echo $sum # 函数的返回结果,注意,不是使用return 0
}

# 调用add函数
#resule=add 100 200  要将函数的输出结果赋值给某个变量,使用反引号或$()
result=$(add 100 200)
echo "result的结果是:$resule"

在上述示例中,在调用函数时,add 100 200 时,类似于命令的参数传递,并且在函数体中也是使用$1 $2的取值方式,没有编程意义上所谓的形参和实参

几个特殊的关于括号的用法
1、(()) 双圆括号,用与运算,可以代替expr,也可以用于for循环条件((i=1;i<=100;i+=2))
2、${} 可以取特定参数或变量的值,比如${1} ${username}
3、$()可以代替反引号执行圆括号中的命令
4、$[] 用于整数运算,可以代替expr

检查参数是否是一个目录(注意此处参数的调用)
function is_directory()
{
    if [ -d $1 ]; then
        echo "Great, $1 is a directory ..."
    else
        echo "sorry, $1 is not a direcrory ..."
        fi
}

echo "check if the input is a directory ..."
is_directory $1
echo "check end ..."

二、参数返回值

function myfunc()
{
    i=$1
    j=$2
    echo expr $i \* $j
}

result=mysunc 59 100

if [ $result -lt 6000 ]; then
    echo "Too Low"
else 
    echo "Great"
fi

三、数组

在Bash中,可以采用显示的delare -a variable语句引入整个数组
如:declare -a weekday
weekday[0]=Sunday
weekday[1]=Monday
....
输出数组中的所有元素:${weekday[@]},输出某一元素${weekday[1]}

使用#字符求取整个数组有多少元素:echo ${weekday[@]}或echo ${weekday[*]}
还可以使用#号求取数组元素长度:echo ${weekday[0]},将输出6。

unset命令可以删除数组元素,甚至整个数组。如:
unset weekday[1],将去除wekday[1]的值。
unset weeday,将去除数组weekday所有元素的值。
通过赋值语句可以实现数组的复制,如:
array2="${array1[@]}"或array2=("$array1[@]")

deckare -a weekday

weekday[1]=Monday
weekday[2]=Tuerday
weekday[3]=Wednesday
weekday[4]=Thursday
weekday[5]=Friday
weekday[6]=Saturday
weekday[7]=Sunday

echo "This week has ${#weekday[*]} days"
echo "${weekday[@]}"

for day in 1 2 3 4 5 6 7
do 
    echo ${weekday[day]}
done

另外一种简单的数组定义方式:
wekday=(Monday Tuesday Wednesday Thuesday Friday Saturday Sunday)
echo ${weekday[1]}

也可以按照以下方式进行遍历:
for day in ${weekday[@]}
do 
    echo ${day}
done
上一篇
下一篇