shell脚本中的函数及应用

文章介绍了Bash脚本中定义和使用函数的方法,包括局部和全局变量的差异,参数传递,以及各种数学运算函数如加、减、乘、除。还涉及递归函数的实现和文件遍历的示例。此外,文中包含一个循环检测网络IP连通性的脚本段落。
摘要由CSDN通过智能技术生成

定义函数的两种方法 一是function sum {

二是直接 sum(函数名)()

方法一function sum {

read -p "请输入一个数字:" a

read -p 请输入第二个数字 b

c=$(($a+$b))

return $c

}

sum

echo $?

return表示退出函数并返回一个退出值

方法二

sum() {

read -p "请输入一个数字:" a

read -p 请输入第二个数字 b

c=$(($a+$b))

return $c

}

sum

echo $?

函数一结束就取回返回值,因为 $? 变量只返回执行的最后一条命令的退出状态码

返回码必须是0-255,超出的值将除以256取余

超出后结果要取模

加local函数内部变量传不出来

abc () {

echo "insert $i" i=9

let i++

local i

i=8

echo "inside2 $i" i=8

}

i=9

abc

echo "outside $i" i=10

sum () {

sum=$(($1+$2))

echo $sum

}

read -p "qingshuru" first

read -p "qingshuru" second

在这段Bash脚本中,函数 abc 定义了一个局部变量 i 并且打印出了三个不同的 i 的值。以下是参数传递的详细解释:

在函数定义内,使用 local i 语句声明了一个局部变量 i,它的作用域仅限于函数内部。这个局部变量 i 的值被设置为 8。

在 abc 函数的开头,它打印出 inside $i。由于在函数内部没有任何赋值语句,因此 $i 的值将与函数之前设置的全局变量 $i 的值相同,即为 9。

在 abc 函数的中间,使用 let i++ 语句增加了一个全局变量 i 的值。此时 $i 的值将变为 10。

在 abc 函数的结尾,它打印出 inside2 $i。此时局部变量 $i 的值为 8。

在函数调用之后,它打印出 outside $i。此时全局变量 $i 的值为 10。

因此,可以看出在这个例子中并没有使用函数参数传递,而是在函数内部定义了一个局部变量 $i。全局变量 $i 和局部变量 $i 的值在函数中被修改,但是在函数外部,只有全局变量 $i 被修改。

sum $first $second

sum $1 $2 时需要执行时赋值

阶乘函数(递归)函数调用自己的函数

dxl () {

if [ $1 -eq 1 ]

then

echo 1

else

local temp=$[ $1-1 ]

local result=$( dxl $temp )

echo "$(($1*$result))"

fi

}

read -p "请输入你要求的阶乘" n

result=`dxl $n`

echo $result

遍历

list_files () {

for f in `ls $1`

do

if [ -d "$1/$f" ]

then

echo $2$f //$2视为空格区分父子目录可有可无

list_files "$1/$f" "$2"

else

echo "$2$f"

fi

done

}

list_file "/opt"

bash -x 分布查看执行

jiafa () {

result=$[$1+$2]

echo $result

}

jianfa () {

result=$[ $1-$2 ]

echo $result

}

cengfa () {

result=$[ $1*$2 ]

echo $result

}

chufa () {

if [ $2 -ne 0 ]

then

result=$[$1/$2]

echo $result

else

echo "$2不能为0"

fi

}

vim diaoyong.sh

#!/bin/bash

. /opt/hanshu2.sh source /opt/hanshu2.sh //用绝对路径写

read -p "请输入第一个参数:" first·

read -p "请输入第二个参数:" second

result1=$(jiafa $first $second)

result2=$(jianfa $first $second)

result3=$(chengfa $first $second)

result4=$(chufa $first $second)

echo "加法${result1}"

echo "减法${result2}"

echo "乘法${result3}"

echo "除法${result4}"

作业

while true

do

function pingtest {

read -p "请输入192.168.232.?,问号处的末位地址(0~254)" i

if [ $i -eq $i -a $i -ge 1 -a $i -le 254 ] ;then

ping -c 3 192.168.232.$i

if [ $? == 0 ]

then

echo "192.168.232.$i" >> /opt/host_ip

else

echo "地址联不通"

fi

else

echo "输入错误"

fi

}

pingtest

read -p "是否继续输IP(y/n)" a

if [ $a == y ]

then

pingtest

continue

elif [ $a == n ]

then

echo "欢迎下次用"

break

else

echo "您输入的不正确"

break

fi

done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值