函式-遞迴
函式就是一個功能
定義函式:描述一個功能的過程
[function] 函式名()
{
command1
......
}
呼叫函式:執行一次函式:
函式名 實參1 實參2 實參3…
函式中接受實參:$1 $2 $3…>> shell變數
$# 傳遞實參的個數
[email protected]引用所有的實參
f(x)=3x+2 f(2)=3*2+2=8
返回值:return 字串
呼叫函式時,若有返回值,通過$?來獲取
注:只有1byte的寬度<=255,因為shell一般只用於配置,功能函式一般只返回true或false
遞迴:自己呼叫自己
本質:when從什麼時候開始 when到什麼時候結束what每次遞迴需要幹嘛
eg:列印1-100 從1開始,到一百結束,每次列印當前數字
shell是一門弱語言
shell並不關心此串是什麼,如果需要進行數學計算,必須用expr,let等等命令來輔助計算。
shell變數:
區域性變數:在shell程式碼中定義的變數,都稱作區域性變數(使用者變數) (小寫)
環境變數:使用者經常需要用到某些值時,shell將這些值定義為全域性變數(大寫)
$num $1第一個實參
$?代表上一個函式或上一個命令的返回值
檔案流:向該檔案寫入資訊的介面 ->a.txt
流重定向:將當前的檔案流改變到其他檔案中
>(截斷長度為0)
>>(追加到檔案末尾)
螢幕(沒有緩衝,不能顯示內容):/dev/null
練習:
1,列印n-m區間的數字,並求出n-m區間總和
# !/bin/bash
read -p "輸入左區間" left
read -p "輸入右區間" right
sum=0
function add()
{
for var in `seq $1 $2`
do
echo "$var"
sum=`expr $var + $sum`
done
printf "$sum"
}
add $left $right
3,求m(4位數),逆序列印
# 1/bin/bash read -p "請輸入一個4位數" num a=`expr $num % 10` b=`expr $a % 10` c=`expr $b % 10` d=`expr $c % 10` e=`expr $d \* 1000 + $c \* 100 + $b \* 10 + $a` echo "$e"
4,求192.168.8.141~192.168.8.254區間的主機是否線上
4.1求當前使用者有多少使用者?
# !/binbash
#192.168.8.141~254
online=0
for ip in `seq 141 254`
do
ping -c 2 -i 0.2 "192.168.8.${ip}" >> /dev/null
if test $? -eq 0
then
online=`expr $online + 1` #統計線上人數,每返回一個線上online+1
echo "192.168.8.${ip}線上" >> online.date #將輸出資訊“追加”到此檔案中
fi
done
echo "正在查詢請多等一會,檢視資訊請到檢視online.date"
echo "一共有${online}線上"
6.改進第四題
7,列印100-1(函式呼叫)
# !/bin/bash
function dy()
{
for var in `seq 1 100`
do
echo "$var"
done
}
echo "開始呼叫dy函式"
dy
/列印100~1(用了函式遞迴的思想)(默寫)
# !/bin/bash
function dg()
{
if test $1 -eq 0
then
return
fi
echo "$1"
dg `expr $1 - 1`
}
dg 100
8.9.遍歷某層檔案,遍歷深層次檔案
# !/bin/bash
function list()
{
for var in `ls $1` #ls為shell遍歷命令,$1為輸入的路徑(path)的實參
do
if test -d $1/$var
then
echo "-d ${var}是資料夾"
list ${1}/${var} #呼叫函式,(自己呼叫自己),遞迴思想
else
echo "-- $var這不是資料夾"
fi
done
}
read -p "請輸入路徑,開始遍歷:" path
list $path #呼叫函式
執行結果
10.遍歷某層路徑下的某個檔案是否存在?
執行
11,將某路徑下所有tmp開頭的檔案或目錄移動到指定位置