1. 程式人生 > >函式-遞迴

函式-遞迴

函式就是一個功能
定義函式:描述一個功能的過程

[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開頭的檔案或目錄移動到指定位置