为了能到远方,脚下的每一步都不能少.|

南哈哈

园龄:3年10个月粉丝:2关注:0

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=("$@")

  

本文作者:南哈哈

本文链接:https://www.cnblogs.com/nanruosen/p/16440132.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   南哈哈  阅读(31)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起