今天長沙做營銷推廣seo
一.函數(shù)
1、函數(shù)的作用
定義較為復(fù)雜的但是需要重復(fù)使用的內(nèi)容,以便再次使用,可以直接調(diào)用,節(jié)約時(shí)間,提高效率。
語句塊定義成函數(shù)約等于別名,定義函數(shù),再引用函數(shù)。
封裝的可重復(fù)利用的具有特定功能的代碼。
2、函數(shù)使用步驟
①首先是定義函數(shù)
②其次是調(diào)用函數(shù)(注意:若定義完成不調(diào)用則函數(shù)無效)
③查看系統(tǒng)限制所有函數(shù):declare -F
④查看函數(shù)定義詳細(xì)內(nèi)容:declare -f ?函數(shù)名
⑤刪除函數(shù):unset ?函數(shù)名
3、定義函數(shù)基本格式
1.function 函數(shù)名 () {函數(shù)內(nèi)容}2.function 函數(shù)名 {函數(shù)內(nèi)容}3.函數(shù)名 () {函數(shù)內(nèi)容}
4.函數(shù)變量
作用范圍
- 函數(shù)在Shell腳本中僅在當(dāng)前Shell環(huán)境中有效
- Shell腳本中變量默認(rèn)全局有效
- 將變最限定在函數(shù)內(nèi)部使用local命令
示例腳本1:Shell腳本中變量默認(rèn)全局有效
#!/bin/bashfun(){i=10
}i=20
fun
echo $i
示例腳本2:將變量限定在函數(shù)內(nèi)部使用local命令
5.函數(shù)的調(diào)用方法
示例腳本1:查看當(dāng)前操作系統(tǒng)
#定義函數(shù)
#!/bin/bashos (){
if grep -i -q "CentOS Linux 7 " /etc/os-release
then echo "此操作系統(tǒng)是centos 7"elif grep -i -q "CentOS Linux 6 " /etc/os-release
then echo "此操作系統(tǒng)是centos 6"elif grep -i -q "CentOS Linux 8 " /etc/os-release
then echo "此操作系統(tǒng)是centos 8"
fi
}#調(diào)用函數(shù)
os
示例腳本2:?函數(shù)備份yum線上源,創(chuàng)建yum本地源和清理緩存安裝httpd
#!/bin/bash
backups(){
cd /etc/yum.repos.d
mkdir repo.bak
mv *.repo repo.bak
mount /dev/sr0 /mnt >/dev/null
}configuration(){
echo -e '[local]\nname=local\nbaseurl=file:///mnt\nenable=1\ngpgcheck=0' >/etc/yum.repos.d/local.repo
}clean(){
yum clean all
yum makecache
yum install -y httpd > /dev/null
}backups
configuration
clean
6.函數(shù)的返回值
return表示退出函數(shù)并返回一個(gè)退出值,腳本中可以用$?變量顯示該值
使用原則:
函數(shù)一結(jié)束就取返回值,因?yàn)??變量只返回執(zhí)行的最后一條命令的退出狀態(tài)碼
退出狀態(tài)碼必須是0~255,超出范圍將除以256取余
如何解決大于255:
7.函數(shù)傳參
在Shell中,調(diào)用函數(shù)時(shí)可以向其傳遞參數(shù)。在函數(shù)體內(nèi)部,通過 $n 的形式來獲取參數(shù)的值,例如,$1表示第一個(gè)參數(shù),$2表示第二個(gè)參數(shù)…即使用位置參數(shù)來實(shí)現(xiàn)參數(shù)傳遞。
示例腳本:
#!/bin/bash
sum () {
echo "第一個(gè)位置參數(shù):" $1
echo "第二個(gè)位置參數(shù):" $2
let n=$1+$2
echo $n
}
sum $2 $1#!/bin/bash
sum () {
echo "第一個(gè)位置參數(shù):" $1
echo "第二個(gè)位置參數(shù):" $2
let n=$1+$2
echo $n
}
sum $1 $2
8.函數(shù)的遞歸?
函數(shù)調(diào)用自己本身的函數(shù)
示例腳本1:階乘
二.數(shù)組
1.數(shù)組定義
與大部分編程語言類似,數(shù)組元素的下標(biāo)由 0 開始
Shell 數(shù)組用括號來表示,元素用"空格"符號分割開
在shell語句中,使用、遍歷數(shù)組的時(shí)候,數(shù)組格式要寫成 ${arr[@]} 或 ${arr[*]}
2.數(shù)組分類
①關(guān)聯(lián)數(shù)組:必須聲明才可以使用,命令:delare? -A? ?數(shù)組名??
②普通數(shù)組:利用數(shù)字下標(biāo)節(jié)約變量,可以不聲明也可以聲明,命令:delare -a? 數(shù)組名
delare? -a命令也可查看有哪些普通數(shù)組
3.數(shù)組的語法格式
格式一:
數(shù)組名=(value1 value2 ... valuen)
arr_number=(1 2 3 4 5 6 7 8 9)格式二:
數(shù)組名=([0]=value0 [1]=value0 [2]=value0 ...)
arr_number=([0]=1 [1]=2 [2]=3 [3]=4)格式三:
列表名:“value1 value2 valueN ..."
數(shù)組名=($列表名)
list_number="1 2 3 4 5 6"
arr_number=($list_number)格式四:
數(shù)組名[0]="value"
數(shù)組名[1]="value"
數(shù)組名[2]="value"
arr_number[0]=1
arr_number[1]=2
arr_number[2]=3
4.數(shù)組的數(shù)據(jù)類型
- 數(shù)值類型
- 字符類型
- 使用 “ ”(雙引號) 或者 ‘ ’ (單引號)定義
#數(shù)組可以是數(shù)值型
a=(1 2 3 4 5);echo ${a[@]}
1 2 3 4 5#數(shù)組可以是混合型
a=(a 1 2 apple);echo ${a[@]}
a 1 2 apple
5.?獲取數(shù)組的長度
echo ${#數(shù)組名[*]}
echo ${#數(shù)組名[@]}
6.獲取數(shù)組下標(biāo)對應(yīng)的值
數(shù)組名=(元素0 元素1 元素2 ……) 定義數(shù)組
echo ${數(shù)組名[索引值]} 輸出數(shù)組索引值對應(yīng)的元素,索引值為從0開始
7.數(shù)組的常用操作
7.1??數(shù)組的遍歷
#!/bin/bash
a=(1 2 3 4 5 6)
for i in ${a[@]}
doecho $i
done
7.2??數(shù)組切片
a=(0 1 2 3 4 5 6 7 8)
echo "輸出整個(gè)數(shù)組: " ${a[@]}
echo "取出數(shù)組1到3: " ${a[@]:1:3}
echo "取出數(shù)組5到后面所有的元素: " ${a[@]:5:5}
7.3 數(shù)組替換
#臨時(shí)替換
echo ${a[@]/原替換位置/替換內(nèi)容} #重新賦值,可以永久修改
a=(${a[@]/原替換位置/替換內(nèi)容})
7.4??數(shù)組刪除和指定下標(biāo)的值刪除
#刪除整個(gè)數(shù)組
unset 數(shù)組名#刪除指定下標(biāo)的值
unset 數(shù)組名[數(shù)組下標(biāo)]
7.5 數(shù)組追加元素
?方法一:直接使用下標(biāo)進(jìn)行元素的追加
數(shù)組名[下標(biāo)]=變量
方法二:?將數(shù)組的長度作為下標(biāo)進(jìn)行追加元素
數(shù)組名[${數(shù)組名[@]}]=變量名
方法三:?使用+=進(jìn)行追加
數(shù)組名+=(變量1 變量2 ...)
7.6?declare -a:?查看所有數(shù)組
三.冒泡排序
#!/bin/bash
#排序之前的數(shù)組順序
a=(10 40 33 30 77 66 44 )
#確定循環(huán)比較的次數(shù)
for ((j=1;j<${#a[@]};j++))
do
#對比獲取每次的最大元素的索引位置
for ((i=0;i<${#a[@]}-j;i++))
do
#如果對比出最大元素,就把該元素賦值給后面的變量tmp
if [ ${a[$i]} -gt ${a[$i+1]} ]
then
#定義一個(gè)變量tmp,將每次比較的最大數(shù)值放進(jìn)tmp,實(shí)現(xiàn)變量對換
tmp=${a[$i+1]}
a[$i+1]=${a[$i]}
a[$i]=$tmp
fi
done
done
echo ${a[*]}
補(bǔ)充
全部調(diào)用:echo? ${a[@]}
? ? ? ? ? ? ? ? ? echo? ${a[*]}
echo? ${#a[@]}:顯示數(shù)組的值的個(gè)數(shù)
echo? ${!a[@]}:顯示所有下標(biāo)