Shell 函数

函数

 

传参 $1 , $2

变量 local

返回值 return $?

 

完成特定功能的代码片段(块)

在shell中定义函数可以使用代码模块化,便于复用代码

函数必须先定义才可以使用

 

定义函数

函数名(){
    函数要实现的功能代码
}

function 函数名(){
    函数要实现的功能代码
}

小案例

#!/bin/bash
if [ $# -lt 1 ];then
    echo -e "Please input factorial number!\033[31m[sh $0 number]\033[0m"
    exit 1
fi
# 定义函数 阶乘
function factorial(){
    fact=1
    for ((i=1;i<=$1;i++))
    do
	fact=$[$fact * $i]
    #let fact=$fact*$i
    #let fact*=$i
    done
    echo "$1的阶乘是: $fact"
}
# 对于函数来讲,脚本无论是$1 $2 都是函数的第一个参数。
factorial $1
factorial $2
factorial $3

函数的返回 return

#!/bin/bash

#function ret(){
#    return $1
#}
#ret $1
#echo "return value: $?"

# 定义函数 自定义shell返回值
function ret(){
    read -p "Please input number: " number
    # shell 返回码最高是255
    return $[$number*2]
}
ret
echo "return value: $?"

函数传参 位置参数

#!/bin/bash

if [ $# -ne 3 ];then
    echo "usage: [sh `basename $0` par1 par2 par3]"
    exit 1
fi
function parameter(){
    echo "$(($1 * $2 * $3))"
}
result=`parameter $1 $2 $3`
echo "result is: $result"

函数传参 数组变量

#!/bin/bash

num=(1 2 3 4 5)
num2=(2 3 4)
# 定义阶乘函数
function array(){
	local factorial=1  # 定义局部变量
	for i in "$@"
	do
		factorial=$[$factorial * $i]
	done
	echo $factorial
}

# 函数可以多次调用
array ${num[@]}  # 数组所有元数值
array ${num2[*]} # 数组所有元数值
echo $factorial  # 上面已经设置为局部变量,这里输出为空

 

for i 介绍

#!/bin/bash

for i in "$@"
for i in "$*"   # 加上双引号会认为是一个参数
for i in $*
for i
do
	let num+=$i
done
echo $num

sh -x for.sh 1 2
+ for i in '$*'
+ let num+=1
+ for i in '$*'
+ let num+=2
+ echo 3
3

函数返回 输出数组变量

#!/bin/bash

num=(1 2 3)
num2=(3 6 9)

array() {
	#echo -e "all parameters: $*"    # 打印数组中所有参数
	local newarray=("$@")
	local outarray=()
	#echo ${newarray[@]}
	local i
	for ((i=0;i<$#;i++))
	do
		#outarray[$i]=$[ ${newarray[$i]} * 5 ]
		newarray[$i]=$(( ${newarray[$i]} * 5 ))
	done
	echo ${newarray[@]}
}

result=`array ${num[@]}`
echo ${result[@]}
result=`array ${num2[@]}`
echo ${result[@]}

------------------------------------

#!/bin/bash

num=(1 2 3)

array() {
	local j
	local outarray=()
	for i in $*
	do
		outarray[j++]=$[ $i * 5 ]
	done
	echo ${outarray[@]}
}

result=`array ${num[@]}`
echo ${result[@]}
# 函数接收位置参数 $1 $2 $3 ... $n
# 函数接收数组变量 $* 或 $@
# 函数使用参数的个数 $# 
# 函数将接收到的所有参数赋值给数组 newarray=("$@")

  

posted @ 2022-07-03 16:50  南哈哈  阅读(37)  评论(0)    收藏  举报