一.shell函數(shù)
1.作用
(1)將命令序列按格式寫在一起
(2)可方便重復(fù)使用命令序列
2.使用函數(shù)的優(yōu)勢(shì)
(1)使用函數(shù)可以避免代碼沖突
(2)將大的工程可以分割為若干小的功能模塊,代碼的可讀性更強(qiáng)
3.shell函數(shù)定義
3.1方式1:
[function] 函數(shù)名 () {
命令系列
[return x]————————使用return或exit可以顯示地結(jié)束函數(shù)
}
3.2方式2:
函數(shù)名 () {
命令系列
}
4.調(diào)用函數(shù)的方法
函數(shù)名 [參數(shù)1] [參數(shù)2]
5.函數(shù)返回值
5.1 return
退出函數(shù)并返回一個(gè)退出值,作用于函數(shù)內(nèi)部,函數(shù)返回值的范圍:0~255之間(0就是成功,只要返回值非0也都認(rèn)為失敗,在shell中的返回碼可以自定義,因此可以讓成功也可以讓失敗。
function abc {
read -p "輸入一個(gè)數(shù)字:" a
a=$(($a*2))
return 0
}
abc————————————————必須加函數(shù)名,用來調(diào)用
echo $a
5.2 exit
終止函數(shù)運(yùn)行,exit0,函數(shù)執(zhí)行exit語句,整個(gè)腳本將立刻停止,并把指定的退出狀態(tài)碼返回給調(diào)用者。
function abc {
read -p "輸入一個(gè)數(shù)字:" a
a=$(($a*2))
exit 0
}
abc
echo $a
6.1-100奇偶求和相加
第一種:
oushu () {
sum1=0
for i in `seq 2 2 100`
do
sum1=$(($i+$sum1))
done
}
oushu
echo $sum1
jishu () {
sum2=0
for o in `seq 1 2 100`
do
sum2=$(($o+$sum2))
done
}
jishu
echo $sum2
total=$(($sum1+$sum2))
echo $total
第二種:
jishu () {
sum1=0
for ((i=1;i<=100;i+=2))
do
sum1=$(($sum1+$i))
done
}
jishu
echo $sum1
oushu () {
sum2=0
for ((j=2;j<=100;j+=2))
do
sum2=$(($sum2+$j))
done
}
oushu
echo $sum2
total=$(($sum1+$sum2))
echo $total
二.函數(shù)傳參
1.含義
在shell中,調(diào)用函數(shù)時(shí)可以向其傳遞參數(shù)
在函數(shù)體內(nèi)部,通過$n的形式來獲取參數(shù)的值
2.函數(shù)傳參的方式
方式一:
sum1 () {
sum=$[$1 + $2]
echo $sum
}
read -p "請(qǐng)輸入第一個(gè)數(shù):" first
read -p "請(qǐng)輸入第二個(gè)數(shù):" second
sum1 $first $second
[root@test1 opt]# chmod 777 cc.sh
[root@test1 opt]# ./cc.sh
方式二:
sum1 () {
sum=$[$1 + $2]
echo $sum
}
sum1 $1 $2
三.函數(shù)變量的作用范圍
1.函數(shù)變量的作用范圍
(1)函數(shù)在Shell腳本中僅在當(dāng)前Shell環(huán)境中有效
(2)Shell腳本中變量默認(rèn)全局有效
(3)將變量限定在函數(shù)內(nèi)部使用local命令
2.調(diào)用函數(shù)
加了local只能在函數(shù)內(nèi)部生效,如果函數(shù)外重新定義,值會(huì)被更改,
調(diào)用函數(shù):第一步內(nèi)部沒定義傳外部的9,第二步內(nèi)部重新定義全局變量為8不受外部影響,第三步第一次已經(jīng)傳參進(jìn)去打印。
2.1示例:
bash -x + 腳本名稱 ——查看詳細(xì)過程
abc () {
echo "inside $i"————————————#定義了外部9
let i++
local i
i=8
echo "inside $i"
}
i=9
abc
echo "outside $i"
3.遞歸
3.1含義
函數(shù)調(diào)用自己本身的函數(shù)
3.2遞歸示例
/etc,展示/etc 目錄下的所有內(nèi)容
mulu () {
for i in `ls $1`
do
if [ -d "$1/$i" ] #是否為目錄
then
echo "$1$i"
muli "$1/$i"#不是目錄的話要打印文件,調(diào)用查看目錄下是否還有東西
else
echo "$i" #$2 為空,不傳參,只輸入文件名
fi
done
}
mulu $1
4.階乘
4.1階乘的含義
階乘指從1乘以2乘以3乘以4一直乘到所要求的數(shù)。
例如所要求的數(shù)是4。則階乘式是1x2x3x4,得到的積是24,24就是4的階乘。 例如所要求的數(shù)是6.則階乘式足1x2x3*…6,得到的積是720,720就是6的階乘。例如所要求的數(shù)是n,則階乘式是1x2x3*…*n,設(shè)得到的積是x,x就是n的階難。
總:輸入一個(gè)數(shù)一直乘到自己,1不算,每一次自己減一再作為參數(shù)乘以自己到1不乘。
4.2階乘示例
jiecheng () {
if [ $1 -eq 1 ]
then
echo 1
else
local number=$(($1-1))
local result=$(jiecheng $number) #自己乘自己每次的
結(jié)果減1
echo "$(($1*$result))"
fi
}
read -p "輸入一個(gè)數(shù)求階乘: " num
result=`jiecheng $num`
echo $result
5.函數(shù)庫
vim hsk.sh
jiafa () {
result=$(($1+$2))
echo $result
}
jianfa () {
result=$(($1-$2))
echo $result
}
chengfa () {
result=$(($1*$2))
echo $result
}
chufa () {
if [ $2 -ne 0 ]
then
result=$(($1/$2))
echo $result
else
echo "$2不能是0!"
fi
調(diào)用數(shù)據(jù)庫
vim dy.sh
. /opt/hsk.sh
read -p "請(qǐng)輸入第一個(gè)數(shù):" first
read -p "請(qǐng)輸入第二個(gè)數(shù):" second
a=`jiafa $first $second`
b=`jianfa $first $second`
c=`chengfa $first $second`
d=`chufa $first $second`
echo $a
echo $b
echo $c
echo $d
6.拓展
函數(shù)能夠接受一個(gè)參數(shù),參數(shù)為用戶名; 判斷一個(gè)用戶是否存在 如果存在,就返回此用戶的shell 和 UID ;并返回正常狀態(tài)值; 如果不存在,就說此用戶不存在;并返回錯(cuò)誤狀態(tài)值。
文章來源:http://www.zghlxwxcb.cn/news/detail-470946.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-470946.html
到了這里,關(guān)于shell編程之循環(huán)語句與函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!