




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
38/45Shell腳本編程第一部分Shell腳本基礎(chǔ)語法 2第二部分變量與數(shù)值計(jì)算 7第三部分字符串操作與文本處理 12第四部分控制結(jié)構(gòu)與流程控制 17第五部分函數(shù)與參數(shù)傳遞 21第六部分文件操作與目錄管理 27第七部分正則表達(dá)式應(yīng)用 32第八部分高級(jí)特性與腳本優(yōu)化 38
第一部分Shell腳本基礎(chǔ)語法關(guān)鍵詞關(guān)鍵要點(diǎn)Shell腳本基礎(chǔ)語法
1.Shell腳本是一種用于自動(dòng)化任務(wù)的腳本語言,它可以在Unix和Linux操作系統(tǒng)上運(yùn)行。Shell腳本通常以.sh為擴(kuò)展名,可以使用各種文本編輯器編寫,如vi、vim等。
2.Shell腳本的基本語法包括變量、條件判斷、循環(huán)控制和函數(shù)等。其中,變量用于存儲(chǔ)數(shù)據(jù),條件判斷用于根據(jù)條件執(zhí)行不同的命令,循環(huán)控制用于重復(fù)執(zhí)行某段代碼,函數(shù)用于封裝可重用的代碼塊。
3.Shell腳本中的注釋以#開頭,可以對(duì)代碼進(jìn)行解釋說明。注釋不會(huì)被執(zhí)行,但有助于其他人理解代碼的功能和原理。
4.Shell腳本中的變量名區(qū)分大小寫,不能使用空格、特殊字符等作為變量名的一部分。變量名應(yīng)簡潔明了,易于理解。
5.Shell腳本中的運(yùn)算符包括算術(shù)運(yùn)算符(+、-、*、/等)、關(guān)系運(yùn)算符(==、!=、>、<等)和邏輯運(yùn)算符(&&、||、!等)。在編寫Shell腳本時(shí),應(yīng)注意運(yùn)算符的正確使用,以避免出現(xiàn)錯(cuò)誤的結(jié)果。
6.Shell腳本中的命令是一系列有序的操作,它們之間用分號(hào)(;)分隔。在編寫Shell腳本時(shí),應(yīng)盡量將復(fù)雜的操作分解為多個(gè)簡單的命令,以提高代碼的可讀性和可維護(hù)性。
7.Shell腳本中的文件操作是其重要組成部分,包括讀取文件內(nèi)容、寫入文件內(nèi)容、刪除文件等。在編寫Shell腳本時(shí),應(yīng)熟練掌握各種文件操作命令,以便對(duì)文件進(jìn)行有效的管理和處理。
8.Shell腳本中的進(jìn)程管理是指對(duì)系統(tǒng)中正在運(yùn)行的進(jìn)程進(jìn)行監(jiān)控和控制。在編寫Shell腳本時(shí),可以使用一些內(nèi)置命令(如ps、kill等)來實(shí)現(xiàn)進(jìn)程管理功能。
9.Shell腳本中的權(quán)限管理是指對(duì)文件和目錄的訪問權(quán)限進(jìn)行控制。在編寫Shell腳本時(shí),可以使用chmod和chown等命令來修改文件和目錄的權(quán)限和所有者信息。
10.Shell腳本中的網(wǎng)絡(luò)編程是指通過Socket接口實(shí)現(xiàn)網(wǎng)絡(luò)通信功能。在編寫Shell腳本時(shí),可以使用TCP/IP協(xié)議進(jìn)行網(wǎng)絡(luò)通信,實(shí)現(xiàn)客戶端和服務(wù)端之間的數(shù)據(jù)傳輸和交互。Shell腳本是一種用于自動(dòng)化任務(wù)的腳本語言,它可以在Unix和類Unix操作系統(tǒng)(如Linux)上運(yùn)行。Shell腳本通常用于批處理任務(wù)、系統(tǒng)管理和其他需要自動(dòng)化的任務(wù)。本文將介紹Shell腳本的基本語法,幫助您更好地理解和編寫Shell腳本。
1.Shell腳本的基本結(jié)構(gòu)
一個(gè)簡單的Shell腳本包含以下幾個(gè)部分:
-注釋:以#開頭的行表示注釋,不會(huì)被執(zhí)行。
-變量賦值:使用等號(hào)(=)為變量賦值。
-命令:Shell腳本的主要功能是通過執(zhí)行命令來實(shí)現(xiàn)的。
-控制結(jié)構(gòu):包括條件判斷(if-elif-else)、循環(huán)(for、while)等。
-函數(shù)定義:使用function關(guān)鍵字定義函數(shù),可以使用return語句返回函數(shù)結(jié)果。
2.變量賦值
在Shell腳本中,可以使用變量來存儲(chǔ)數(shù)據(jù)。變量名以字母或下劃線開頭,可以包含字母、數(shù)字和下劃線。變量賦值時(shí),等號(hào)兩邊不能有空格。
```bash
name="張三"
age=30
```
3.命令執(zhí)行
Shell腳本通過執(zhí)行命令來實(shí)現(xiàn)各種功能。命令可以是內(nèi)置命令,也可以是外部程序。要執(zhí)行命令,只需在Shell腳本中輸入命令名稱即可。
```bash
echo"Hello,World!"
ls
```
4.條件判斷
Shell腳本支持多種條件判斷語句,如if、elif、else等。條件判斷語句的一般格式如下:
```bash
[condition]&&[command]||[command]
```
其中,condition是一個(gè)邏輯表達(dá)式,如果為真(0),則執(zhí)行and后面的命令;如果為假(非0),則執(zhí)行or后面的命令。注意,條件判斷語句中的命令需要用括號(hào)括起來。
```bash
num=10
if[$num-gt5];then
echo"數(shù)字大于5"
elif[$num-lt5];then
echo"數(shù)字小于5"
else
echo"數(shù)字等于5"
fi
```
5.循環(huán)結(jié)構(gòu)
Shell腳本支持兩種循環(huán)結(jié)構(gòu):for循環(huán)和while循環(huán)。
-for循環(huán):用于遍歷序列(如文件列表、數(shù)組等)。for循環(huán)的一般格式如下:
```bash
forvariableinsequence;do[command];done
```
-while循環(huán):當(dāng)給定條件為真時(shí),重復(fù)執(zhí)行一組命令。while循環(huán)的一般格式如下:
```bash
while[condition];do[command];done
```
6.函數(shù)定義與調(diào)用
在Shell腳本中,可以使用function關(guān)鍵字定義函數(shù),然后通過函數(shù)名加括號(hào)的方式調(diào)用函數(shù)。函數(shù)可以有參數(shù),也可以沒有參數(shù)。函數(shù)內(nèi)部的變量和命令會(huì)保留到函數(shù)調(diào)用結(jié)束。
```bash
echo"Hello,$1!"
}
say_hello"張三"
```第二部分變量與數(shù)值計(jì)算關(guān)鍵詞關(guān)鍵要點(diǎn)Shell腳本中的變量與數(shù)值計(jì)算
1.Shell腳本中的變量:Shell腳本是一種用于自動(dòng)化任務(wù)的腳本語言,變量是Shell腳本中用來存儲(chǔ)數(shù)據(jù)的容器。在Shell腳本中,變量名由字母、數(shù)字和下劃線組成,且不能以數(shù)字開頭。變量可以通過賦值操作符(=)進(jìn)行賦值,也可以在變量名前加上美元符號(hào)($)來獲取變量的值。此外,Shell腳本還支持使用點(diǎn)號(hào)(.)來訪問變量的屬性,如$表示訪問名為name的屬性。
2.Shell腳本中的算術(shù)運(yùn)算:Shell腳本支持基本的算術(shù)運(yùn)算,如加法(+)、減法(-)、乘法(*)和除法(/)。在Shell腳本中,可以使用expr命令或者$(())進(jìn)行算術(shù)運(yùn)算。例如,$((3+4))表示3加4的結(jié)果,expr3+4表示相同的結(jié)果。此外,Shell腳本還支持整數(shù)除法,即只保留整數(shù)部分,忽略小數(shù)部分。
3.Shell腳本中的條件判斷:Shell腳本支持多種條件判斷語句,如if、elif、else和fi。這些語句可以根據(jù)條件執(zhí)行不同的代碼塊。例如,以下代碼判斷一個(gè)數(shù)字是否大于10:
```bash
#!/bin/bash
num=15
if[$num-gt10];then
echo"數(shù)字大于10"
elif[$num-eq10];then
echo"數(shù)字等于10"
else
echo"數(shù)字小于10"
fi
```
4.Shell腳本中的循環(huán):Shell腳本支持兩種循環(huán)結(jié)構(gòu),分別是for循環(huán)和while循環(huán)。for循環(huán)通常用于遍歷數(shù)組或序列,語法為forvariableinlist;do...done。while循環(huán)則根據(jù)條件重復(fù)執(zhí)行一段代碼,語法為whilecondition;do...done。
```bash
#!/bin/bash
localnum1=$1
localnum2=$2
echo$((num1+num2))
}
sum35
```
6.Shell腳本中的文件處理:Shell腳本可以對(duì)文件進(jìn)行讀寫操作,如創(chuàng)建、刪除、復(fù)制、移動(dòng)文件等。此外,Shell腳本還可以對(duì)文件內(nèi)容進(jìn)行處理,如查找、替換、分割等。常用的文件處理命令包括cat、echo、rm、cp、mv、grep等。《Shell腳本編程》中關(guān)于“變量與數(shù)值計(jì)算”的內(nèi)容主要涉及到Shell腳本中變量的定義、賦值、運(yùn)算以及輸出等功能。在Shell腳本編程中,變量是用來存儲(chǔ)數(shù)據(jù)的容器,可以用于表示數(shù)字、字符串等信息。本文將詳細(xì)介紹Shell腳本中的變量與數(shù)值計(jì)算相關(guān)知識(shí)。
一、變量定義與賦值
在Shell腳本中,變量名由字母、數(shù)字和下劃線組成,且不能以數(shù)字開頭。變量賦值時(shí),等號(hào)兩邊不能有空格。以下是一些基本的變量定義與賦值示例:
```bash
#定義整型變量
num1=10
#定義浮點(diǎn)型變量
num2=3.14
#定義字符串變量
str1="Hello,World!"
```
二、算術(shù)運(yùn)算符
Shell腳本支持多種算術(shù)運(yùn)算符,包括加法、減法、乘法、除法和取余數(shù)等。以下是一些算術(shù)運(yùn)算符的使用示例:
```bash
#加法運(yùn)算
sum=$((num1+num2))
echo"Sum:$sum"
#減法運(yùn)算
sub=$((num1-num2))
echo"Subtraction:$sub"
#乘法運(yùn)算
mul=$((num1*num2))
echo"Multiplication:$mul"
#除法運(yùn)算
if[$num2!=0];then
div=$((num1/num2))
echo"Division:$div"
else
echo"Divisionbyzeroisnotallowed."
fi
```
三、模運(yùn)算(取余數(shù))
模運(yùn)算用于求兩個(gè)整數(shù)相除后的余數(shù)。在Shell腳本中,可以使用`%`符號(hào)進(jìn)行模運(yùn)算。以下是一個(gè)模運(yùn)算的使用示例:
```bash
remainder=$((num1%num2))
echo"Remainder:$remainder"
```
四、比較運(yùn)算符
Shell腳本支持多種比較運(yùn)算符,包括等于、不等于、大于、小于、大于等于和小于等于等。以下是一些比較運(yùn)算符的使用示例:
```bash
#等于運(yùn)算
if[$num1-eq$num2];then
echo"Numbersareequal."
else
echo"Numbersarenotequal."
fi
```
五、邏輯運(yùn)算符與條件語句(if-else)
Shell腳本支持邏輯與(&&)、邏輯或(||)和邏輯非(!)等邏輯運(yùn)算符,以及if-else條件語句。以下是一個(gè)簡單的條件語句使用示例:
```bash
#if-else條件語句
if[$num1-gt$num2];then
echo"$num1isgreaterthan$num2."
elif[$num1-eq$num2];then
echo"$num1isequalto$num2."
else
echo"$num1islessthan$num2."
fi
```第三部分字符串操作與文本處理在Shell腳本編程中,字符串操作與文本處理是非常重要的一部分。它們涉及到對(duì)字符串的各種操作,如拼接、分割、替換、查找等,以及對(duì)文本文件的讀取、寫入、刪除等操作。本文將詳細(xì)介紹Shell腳本中的字符串操作與文本處理方法。
1.字符串拼接
在Shell腳本中,可以使用以下幾種方式進(jìn)行字符串拼接:
-直接拼接:使用`+`或`-`運(yùn)算符直接將兩個(gè)字符串拼接在一起。
```bash
str1="Hello"
str2="World"
result=$str1$str2
echo$result
```
輸出結(jié)果:`HelloWorld`
-使用`echo`和管道符(`|`)拼接:先使用`echo-n`命令輸出一個(gè)換行符,然后再用管道符將另一個(gè)字符串連接到第一個(gè)字符串后面。
```bash
str1="Hello"
str2="World"
result=$(echo-n"$str1"|echo"$str2")
echo$result
```
輸出結(jié)果:`HelloWorld`
-使用雙引號(hào)或單引號(hào)拼接:可以直接將兩個(gè)字符串放在雙引號(hào)或單引號(hào)內(nèi)進(jìn)行拼接。
```bash
str1="Hello"
str2="World"
result="$str1$str2"
echo$result
```
輸出結(jié)果:`HelloWorld`
2.字符串分割
在Shell腳本中,可以使用以下幾種方式對(duì)字符串進(jìn)行分割:
-使用`cut`命令分割字符串:根據(jù)指定的分隔符對(duì)字符串進(jìn)行分割。
```bash
str="Hello,World,Shell"
IFS=','read-raarr<<<"$str"
```
輸出結(jié)果:`Hello``World``Shell`
-使用`awk`命令分割字符串:根據(jù)指定的分隔符對(duì)字符串進(jìn)行分割。
```bash
str="Hello,World,Shell"
```
輸出結(jié)果:`Hello``World``Shell`
3.字符串替換
在Shell腳本中,可以使用以下幾種方式對(duì)字符串進(jìn)行替換:
-使用`sed`命令替換字符串:根據(jù)指定的正則表達(dá)式和替換內(nèi)容對(duì)字符串進(jìn)行替換。
```bash
str="Hello,World,Shell"
result=$(echo"$str"|sed's/World/Unix/')
echo$result
```
輸出結(jié)果:`Hello,Unix,Shell`
-使用`tr`命令替換字符串:根據(jù)指定的字符映射表對(duì)字符串進(jìn)行替換。
```bash
str="Hello,World,Shell"
result=$(echo"$str"|tr'[:upper:]''[:lower:]')
echo$result
```
輸出結(jié)果:`hello,world,shell`
4.字符串查找與替換
在Shell腳本中,可以使用以下幾種方式對(duì)字符串進(jìn)行查找與替換:
-使用`grep`命令查找字符串:根據(jù)指定的正則表達(dá)式查找包含匹配內(nèi)容的行。
```bash
str="Hello,World,Shell"
result=$(echo"$str"|grep'World')
echo$result
```第四部分控制結(jié)構(gòu)與流程控制關(guān)鍵詞關(guān)鍵要點(diǎn)條件語句
1.條件語句:Shell腳本中使用if、elif、else關(guān)鍵字進(jìn)行條件判斷,根據(jù)條件執(zhí)行不同的命令。
2.測(cè)試表達(dá)式:條件語句中的測(cè)試表達(dá)式可以是數(shù)字比較(如$a-eq$b)、字符串比較(如"$str1"="$str2")等。
3.邏輯運(yùn)算符:Shell腳本支持邏輯運(yùn)算符(&&、||、!)用于組合多個(gè)條件判斷。
循環(huán)結(jié)構(gòu)
1.for循環(huán):Shell腳本中的for循環(huán)用于遍歷序列(如數(shù)組、文件列表等),執(zhí)行一定次數(shù)的命令。
2.while循環(huán):Shell腳本中的while循環(huán)用于在滿足某個(gè)條件時(shí)重復(fù)執(zhí)行命令。
3.do...done結(jié)構(gòu):for和while循環(huán)的語法結(jié)構(gòu),do表示循環(huán)體開始,done表示循環(huán)體結(jié)束。
流程控制
1.break:用于跳出當(dāng)前循環(huán)體,終止循環(huán)。
2.continue:用于跳過當(dāng)前循環(huán)體的剩余部分,進(jìn)入下一次循環(huán)。
3.exit:用于退出Shell腳本,終止腳本的執(zhí)行。
選擇結(jié)構(gòu)
1.case語句:Shell腳本中的case語句用于多分支選擇,根據(jù)匹配的值執(zhí)行不同的命令。
2.default分支:當(dāng)沒有匹配到任何值時(shí)執(zhí)行default分支的命令。
3.esac關(guān)鍵字:用于結(jié)束case語句。
函數(shù)與子程序
1.函數(shù)定義:使用function關(guān)鍵字定義函數(shù),指定函數(shù)名和參數(shù)列表。
2.函數(shù)調(diào)用:通過函數(shù)名加空格和參數(shù)列表來調(diào)用已定義的函數(shù)。
3.return關(guān)鍵字:用于從函數(shù)中返回結(jié)果給調(diào)用者。
4.局部變量與全局變量:函數(shù)內(nèi)部定義的變量為局部變量,外部可通過函數(shù)名訪問;全局變量在整個(gè)腳本范圍內(nèi)都可以訪問。在Shell腳本編程中,控制結(jié)構(gòu)與流程控制是非常重要的概念。它們用于控制腳本的執(zhí)行順序和邏輯關(guān)系,使得腳本能夠按照預(yù)期的方式運(yùn)行。本文將詳細(xì)介紹Shell腳本中的控制結(jié)構(gòu)與流程控制,包括條件判斷、循環(huán)結(jié)構(gòu)、函數(shù)調(diào)用等。
1.條件判斷
條件判斷是Shell腳本中最基本的控制結(jié)構(gòu)之一,用于根據(jù)條件來決定腳本的執(zhí)行路徑。在Shell腳本中,我們可以使用`if`、`elif`(elseif的縮寫)和`else`關(guān)鍵字來實(shí)現(xiàn)條件判斷。
```bash
#!/bin/bash
num=10
if[$num-gt5];then
echo"數(shù)字大于5"
elif[$num-lt5];then
echo"數(shù)字小于5"
else
echo"數(shù)字等于5"
fi
```
在這個(gè)示例中,我們首先定義了一個(gè)變量`num`,然后使用`if`、`elif`和`else`關(guān)鍵字來判斷`num`的值。如果`num`大于5,輸出"數(shù)字大于5";如果`num`小于5,輸出"數(shù)字小于5";否則,輸出"數(shù)字等于5"。注意,條件判斷中的條件需要用方括號(hào)`[]`包圍,并且在每個(gè)條件后面跟一個(gè)分號(hào)`;`。
2.循環(huán)結(jié)構(gòu)
循環(huán)結(jié)構(gòu)用于重復(fù)執(zhí)行一段代碼,直到滿足指定的條件為止。在Shell腳本中,我們可以使用`for`循環(huán)和`while`循環(huán)來實(shí)現(xiàn)循環(huán)結(jié)構(gòu)。
#for循環(huán)
`for`循環(huán)用于遍歷一組數(shù)據(jù),通常與`in`關(guān)鍵字一起使用。以下是一個(gè)簡單的`for`循環(huán)示例:
```bash
#!/bin/bash
echo"這是第$i次循環(huán)"
done
```
#while循環(huán)
`while`循環(huán)用于在滿足指定條件時(shí)重復(fù)執(zhí)行一段代碼。以下是一個(gè)簡單的`while`循環(huán)示例:
```bash
#!/bin/bash
count=1
while[$count-le5];do
echo"這是第$count次循環(huán)"
count=$((count+1))
done
```
在這個(gè)示例中,我們使用`while`循環(huán)遍歷了一組從1到5的數(shù)字,并在每次循環(huán)中輸出當(dāng)前循環(huán)次數(shù)。注意,條件表達(dá)式需要用方括號(hào)`[]`包圍,并且在每個(gè)條件后面跟一個(gè)分號(hào)`;`,同時(shí)條件表達(dá)式兩側(cè)需要有空格。此外,我們需要使用一個(gè)變量(如本例中的`count`)來存儲(chǔ)循環(huán)計(jì)數(shù)器的值,并在每次循環(huán)結(jié)束時(shí)更新該變量的值。第五部分函數(shù)與參數(shù)傳遞關(guān)鍵詞關(guān)鍵要點(diǎn)Shell腳本函數(shù)定義與調(diào)用
1.Shell腳本函數(shù)定義:使用`function_name()`或`functionfunction_name`語法定義函數(shù)。函數(shù)名后面可以跟參數(shù)列表,參數(shù)之間用空格分隔。如果沒有參數(shù),則在函數(shù)名后加上圓括號(hào)。
2.Shell腳本函數(shù)調(diào)用:直接使用函數(shù)名,后面跟上括號(hào)和參數(shù)列表。如果沒有參數(shù),則只需使用函數(shù)名。
3.Shell腳本局部變量與全局變量:在函數(shù)內(nèi)部定義的變量為局部變量,只在函數(shù)內(nèi)部有效;在函數(shù)外部定義的變量為全局變量,可以在函數(shù)外部訪問。
Shell腳本參數(shù)傳遞
1.Shell腳本位置參數(shù):直接將參數(shù)放在函數(shù)調(diào)用的位置即可。位置參數(shù)是從左到右依次傳遞的。
2.Shell腳本特殊參數(shù):$0表示腳本名稱;$-表示所有命令行選項(xiàng);$#表示位置參數(shù)個(gè)數(shù);$*表示所有位置參數(shù);$@表示所有位置參數(shù),但每個(gè)參數(shù)前會(huì)加一個(gè)空格。
Shell腳本返回值
1.Shell腳本返回值:使用`return`語句返回一個(gè)整數(shù)值給調(diào)用者。如果沒有指定返回值,則默認(rèn)返回0。
2.Shell腳本返回多個(gè)值:使用逗號(hào)`,`分隔多個(gè)返回值。調(diào)用者可以使用`$?`獲取最后一個(gè)返回值,使用`$1、$2、$3...`分別獲取各個(gè)返回值。
3.Shell腳本返回字符串:使用雙引號(hào)`"`包圍字符串作為返回值。字符串中的反斜杠`\`需要轉(zhuǎn)義,或者使用單引號(hào)`'`包圍字符串。
Shell腳本默認(rèn)參數(shù)
1.Shell腳本默認(rèn)參數(shù):在函數(shù)定義中,可以使用`=value`為參數(shù)設(shè)置默認(rèn)值。當(dāng)調(diào)用函數(shù)時(shí)沒有提供該參數(shù)時(shí),將使用默認(rèn)值。
2.Shell腳本省略默認(rèn)參數(shù):在函數(shù)定義中,可以使用`=value`為參數(shù)設(shè)置默認(rèn)值。當(dāng)調(diào)用函數(shù)時(shí)提供了該參數(shù)時(shí),將使用提供的值覆蓋默認(rèn)值。
3.Shell腳本設(shè)置可變數(shù)量的默認(rèn)參數(shù):在函數(shù)定義中,可以使用`=value1value2value3...`為多個(gè)參數(shù)設(shè)置默認(rèn)值。當(dāng)調(diào)用函數(shù)時(shí)提供了部分參數(shù)時(shí),將使用提供的值覆蓋默認(rèn)值;未提供的參數(shù)將使用默認(rèn)值。
Shell腳本匿名函數(shù)與閉包
2.Shell腳本閉包:在一個(gè)函數(shù)內(nèi)部定義另一個(gè)函數(shù),內(nèi)部函數(shù)可以訪問外部函數(shù)的局部變量。當(dāng)外部函數(shù)執(zhí)行完畢后,其局部變量仍然存在,形成閉包。閉包可以實(shí)現(xiàn)數(shù)據(jù)封裝和狀態(tài)保持等功能。在Shell腳本編程中,函數(shù)是一種實(shí)現(xiàn)代碼復(fù)用的重要方式。通過定義函數(shù),我們可以將一段具有特定功能的代碼封裝起來,然后在需要的地方調(diào)用這個(gè)函數(shù),從而提高代碼的可讀性和可維護(hù)性。函數(shù)的參數(shù)傳遞是函數(shù)功能實(shí)現(xiàn)的關(guān)鍵,本文將詳細(xì)介紹Shell腳本中函數(shù)與參數(shù)傳遞的概念、語法和使用方法。
一、函數(shù)的概念
函數(shù)是一段具有特定功能的Shell腳本代碼塊。它可以接收輸入?yún)?shù),并根據(jù)這些參數(shù)執(zhí)行相應(yīng)的操作,最后返回一個(gè)結(jié)果。在Shell腳本中,函數(shù)使用關(guān)鍵字`function`定義,后面跟函數(shù)名和一對(duì)圓括號(hào)`()`。圓括號(hào)內(nèi)可以包含參數(shù)列表,參數(shù)之間用空格分隔。函數(shù)體以冒號(hào)`:`開始,后面的代碼需要縮進(jìn)。
二、函數(shù)的參數(shù)傳遞
1.位置參數(shù)
位置參數(shù)是指按照參數(shù)在函數(shù)定義中的位置順序傳遞給函數(shù)的參數(shù)。在調(diào)用函數(shù)時(shí),可以使用`$1`、`$2`等變量來引用這些參數(shù)。例如:
```bash
#!/bin/bash
echo"Hello,$1"
}
greeting"World"
```
在這個(gè)例子中,我們定義了一個(gè)名為`greeting`的函數(shù),它接受一個(gè)位置參數(shù)。在調(diào)用這個(gè)函數(shù)時(shí),我們傳入了一個(gè)字符串"World",所以輸出結(jié)果為"Hello,World"。
2.特殊參數(shù)
除了位置參數(shù)外,Shell腳本還支持一些特殊參數(shù)。這些特殊參數(shù)以單個(gè)美元符號(hào)`$`開頭,例如`$0`、`$$`等。以下是一些常用的特殊參數(shù):
-`$0`:表示當(dāng)前腳本的文件名;
-`$$`:表示當(dāng)前Shell進(jìn)程的進(jìn)程ID;
-`$#`:表示傳入函數(shù)的參數(shù)個(gè)數(shù);
-`$*`:表示傳入函數(shù)的所有參數(shù),以空格分隔;
-`$@`:表示傳入函數(shù)的所有參數(shù),但每個(gè)參數(shù)都會(huì)被當(dāng)作獨(dú)立的字符串處理;
-`$\$$`:表示當(dāng)前Shell進(jìn)程的完整命令行(包括文件名)。
3.引用特殊參數(shù)
在某些情況下,我們需要將特殊參數(shù)作為普通變量使用。這時(shí)可以使用反引號(hào)(``)進(jìn)行引用。例如:
```bash
#!/bin/bash
echo"Scriptname:$$"#輸出腳本名
echo"Totalarguments:$#"#輸出傳入?yún)?shù)個(gè)數(shù)
echo"Firstargument:$1"#輸出第一個(gè)參數(shù)(不使用反引號(hào)時(shí),這里的$1會(huì)被解釋為特殊參數(shù))
echo"Allarguments:$@"#輸出所有參數(shù)(不使用反引號(hào)時(shí),這里的$@會(huì)被解釋為特殊參數(shù))
echo"Commandline:$\$$"#輸出完整命令行(不使用反引號(hào)時(shí),這里的$\$\$會(huì)被解釋為特殊參數(shù))
```
三、函數(shù)的使用技巧
1.在調(diào)用函數(shù)之前設(shè)置環(huán)境變量:有時(shí)候我們需要在函數(shù)內(nèi)部使用某個(gè)環(huán)境變量的值,但是又不想修改全局環(huán)境變量。這時(shí)可以在調(diào)用函數(shù)之前使用`export`命令將環(huán)境變量導(dǎo)出到子shell中,這樣在函數(shù)內(nèi)部就可以訪問到這個(gè)變量了。例如:
```bash
#!/bin/bash
exportMY_VAR="Hello"
echo"Myvariableis:$MY_VAR"
}
my_function
```
2.將多個(gè)命令組合成一個(gè)函數(shù):有時(shí)候我們需要將一系列命令組合成一個(gè)簡單的功能,這時(shí)候可以將這些命令寫成一個(gè)函數(shù)。例如:
```bash
#!/bin/bash
echo"Hello,$1"
echo"Yourageis$2."
}
greeting"Tom"25"male"
```
3.返回值:有時(shí)候我們需要讓函數(shù)返回一個(gè)值,以便在其他地方使用這個(gè)值。在Shell腳本中,可以使用`return`語句返回一個(gè)整數(shù)值。例如:
```bash
#!/bin/bash
locala=$1b=$2sum=0ret=0
while[$b-ne0];do
letsum=$sum+$a%10ret=$((ret+$b%10))a=$((a/10))b=$((b/10))done
return$ret
}
result=$((add123456))echo"Thesumis:$result"
```第六部分文件操作與目錄管理關(guān)鍵詞關(guān)鍵要點(diǎn)文件操作
1.創(chuàng)建文件:使用`touch`命令可以創(chuàng)建一個(gè)空文件,例如:`touchfile.txt`。
2.查看文件內(nèi)容:使用`cat`、`more`、`less`等命令可以查看文件內(nèi)容,例如:`catfile.txt`。
3.編輯文件:使用文本編輯器如`vi`、`nano`等可以對(duì)文件進(jìn)行編輯,例如:`vifile.txt`。
4.復(fù)制文件:使用`cp`命令可以復(fù)制文件到指定位置,例如:`cpfile1.txtfile2.txt`。
5.移動(dòng)文件:使用`mv`命令可以將文件從一個(gè)位置移動(dòng)到另一個(gè)位置,例如:`mvfile1.txtfile2.txt`。
6.刪除文件:使用`rm`命令可以刪除文件,例如:`rmfile.txt`。
7.清空目錄:使用`rmdir`命令可以刪除空目錄,例如:`rmdirdir1`。
8.查找文件:使用`find`命令可以在指定目錄下查找文件,例如:`find/path/to/search-name"*.txt"`。
9.批量重命名:使用`rename`命令可以批量重命名文件,例如:`rename's/old/new/'*.txt`。
10.獲取文件信息:使用`stat`命令可以獲取文件的詳細(xì)信息,例如:`statfile.txt`。
目錄管理
1.創(chuàng)建目錄:使用`mkdir`命令可以創(chuàng)建一個(gè)新目錄,例如:`mkdirdir1`。
2.查看目錄內(nèi)容:使用`ls`、`tree`等命令可以查看目錄內(nèi)容,例如:`lsdir1`。
3.切換目錄:使用`cd`命令可以切換到指定目錄,例如:`cddir1`。
4.進(jìn)入子目錄:使用`.`或`cd..`命令可以進(jìn)入上一級(jí)目錄,例如:`cd../dir2`。
5.返回上一級(jí)目錄:使用`..`命令可以返回上一級(jí)目錄,例如:`cd..`。
6.刪除目錄:使用`rmdir`命令可以刪除空目錄,例如:`rmdirdir1`。
7.批量刪除目錄及其內(nèi)容:使用`rmdir-rdir1/*`命令可以批量刪除目錄及其內(nèi)容。
8.查找目錄:使用`find`命令可以在指定目錄下查找目錄,例如:`find/path/to/search-typed-name"dir1"`。Shell腳本編程中的文件操作與目錄管理是非常重要的一部分,它涉及到了對(duì)文件和目錄的基本操作,如創(chuàng)建、刪除、修改、查看等。本文將詳細(xì)介紹Shell腳本中關(guān)于文件操作與目錄管理的相關(guān)知識(shí)。
一、文件操作
1.創(chuàng)建文件
在Shell腳本中,可以使用`touch`命令來創(chuàng)建一個(gè)空文件。例如,要?jiǎng)?chuàng)建一個(gè)名為`example.txt`的文件,可以執(zhí)行以下命令:
```bash
touchexample.txt
```
2.創(chuàng)建目錄
使用`mkdir`命令可以創(chuàng)建一個(gè)新的目錄。例如,要?jiǎng)?chuàng)建一個(gè)名為`new_directory`的目錄,可以執(zhí)行以下命令:
```bash
mkdirnew_directory
```
3.刪除文件或目錄
使用`rm`命令可以刪除一個(gè)文件或目錄。例如,要?jiǎng)h除名為`example.txt`的文件,可以執(zhí)行以下命令:
```bash
rmexample.txt
```
要?jiǎng)h除名為`new_directory`的目錄,可以執(zhí)行以下命令:
```bash
rm-rnew_directory
```注意:`-r`選項(xiàng)表示遞歸刪除目錄及其內(nèi)容。
4.重命名文件或目錄
使用`mv`命令可以重命名一個(gè)文件或目錄。例如,將名為`old_name.txt`的文件重命名為`new_name.txt`,可以執(zhí)行以下命令:
```bash
mvold_name.txtnew_name.txt
```
5.查看文件內(nèi)容
使用`cat`命令可以查看文件的內(nèi)容。例如,查看名為`example.txt`的文件內(nèi)容,可以執(zhí)行以下命令:
```bash
catexample.txt
```
6.追加內(nèi)容到文件
使用`echo`命令可以將內(nèi)容追加到指定的文件中。例如,將字符串"Hello,World!"追加到名為`example.txt`的文件中,可以執(zhí)行以下命令:
```bash
echo"Hello,World!">>example.txt
```注意:`>>`選項(xiàng)表示追加內(nèi)容到文件末尾。如果要覆蓋文件內(nèi)容,可以使用單個(gè)大于號(hào)`>`。例如:
```bash
echo"Hello,Shell!">example.txt
```二、目錄管理
1.切換目錄
使用`cd`命令可以切換到指定的目錄。例如,要切換到名為`home`的目錄,可以執(zhí)行以下命令:
```bash
cdhome
```要返回上一級(jí)目錄,可以執(zhí)行以下命令:
```bash
cd..
```要進(jìn)入用戶主目錄,可以執(zhí)行以下命令:
```bash
cd~
```或簡寫為:
```bash
cd$(pwd)/~
```2.顯示當(dāng)前目錄內(nèi)容(ls)和子目錄(ll)列表(list)3.創(chuàng)建并進(jìn)入子目錄(mkdir)4.刪除子目錄(rmdir)5.刪除空目錄(rmdir-p)6.列出當(dāng)前目錄下所有文件和文件夾(ls-l)7.列出當(dāng)前目錄下所有文件(ls-a)8.批量重命名文件(rename)9.批量移動(dòng)或復(fù)制文件(mv)10.批量刪除文件(rm)11.批量壓縮或解壓文件(tar)12.批量查找并替換文本內(nèi)容(sed)13.按字母順序排序(sort)14.按時(shí)間順序排序(ls-lt)15.按大小排序(ls-lS)16.合并多個(gè)文件(cat)17.將多個(gè)文件壓縮成一個(gè)壓縮包(zip)18.將多個(gè)文件解壓縮(unzip)19.將多個(gè)文件打包成一個(gè)tarball20.將多個(gè)文件打包成一個(gè)RPM包第七部分正則表達(dá)式應(yīng)用關(guān)鍵詞關(guān)鍵要點(diǎn)正則表達(dá)式基礎(chǔ)
1.正則表達(dá)式:正則表達(dá)式是一種用于處理字符串的強(qiáng)大工具,它可以用來檢查一個(gè)字符串是否符合某種模式、查找和替換字符串中的特定字符或子串等。
2.元字符:正則表達(dá)式中有一些特殊字符,稱為元字符,它們具有特殊的意義。例如,`*`表示匹配前面的字符0次或多次,`+`表示匹配前面的字符1次或多次,`?`表示匹配前面的字符0次或1次等。
3.基本語法:正則表達(dá)式的基本語法包括字符集、量詞、錨點(diǎn)、分組和選擇符等。通過組合這些元素,可以構(gòu)建出復(fù)雜的正則表達(dá)式。
正則表達(dá)式高級(jí)應(yīng)用
1.邊界匹配:在正則表達(dá)式中,使用`\b`可以匹配單詞邊界,確保只匹配整個(gè)單詞,而不是部分單詞。這在處理多語言文本時(shí)非常有用。
2.否定預(yù)測(cè):正則表達(dá)式支持否定預(yù)測(cè),即在某些情況下,可以指定不匹配某個(gè)特定的模式。例如,`[^a-z]`表示匹配除了小寫字母之外的所有字符。
3.貪婪匹配與非貪婪匹配:默認(rèn)情況下,正則表達(dá)式是貪婪的,會(huì)盡可能多地匹配字符。然而,可以通過在量詞后面加上`?`來實(shí)現(xiàn)非貪婪匹配,只匹配最短的滿足條件的子串。
正則表達(dá)式與Shell腳本結(jié)合使用
1.文件操作:正則表達(dá)式可以在Shell腳本中用于文件操作,例如查找、替換或分割文件中的文本內(nèi)容。
2.參數(shù)化正則表達(dá)式:為了避免SQL注入等安全問題,可以使用參數(shù)化正則表達(dá)式來處理用戶輸入的數(shù)據(jù)。這樣可以確保只有合法的正則表達(dá)式被執(zhí)行。
3.正則表達(dá)式測(cè)試:在Shell腳本中,可以使用`[[...]]`或者`=~...`來進(jìn)行正則表達(dá)式的測(cè)試,以判斷一個(gè)字符串是否符合特定的模式。
正則表達(dá)式性能優(yōu)化
1.預(yù)編譯正則表達(dá)式:為了提高效率,可以將常用的正則表達(dá)式預(yù)編譯成字面量(使用`regcomp()`函數(shù)),這樣在多次使用同一個(gè)正則表達(dá)式時(shí),無需重復(fù)編譯,從而提高性能。
2.避免回溯:回溯是正則表達(dá)式在處理復(fù)雜模式時(shí)可能出現(xiàn)的一種現(xiàn)象,它會(huì)導(dǎo)致大量的重復(fù)計(jì)算。為了避免回溯,可以盡量使用簡單的正則表達(dá)式或者將復(fù)雜的模式分解成多個(gè)簡單的子模式。
3.使用原子組:原子組是一種特殊的字符集,它可以確保在一個(gè)原子組內(nèi)的字符之間不會(huì)發(fā)生轉(zhuǎn)義。這樣可以避免一些不必要的計(jì)算,提高性能。正則表達(dá)式(RegularExpression,簡稱regex)是一種用于處理字符串的強(qiáng)大工具。它是一種模式匹配的方法,可以用來檢查一個(gè)字符串是否符合某種特定的模式、查找和替換字符串中的特定字符或者子串等。在Shell腳本編程中,正則表達(dá)式被廣泛應(yīng)用于文本處理、文件操作、網(wǎng)絡(luò)編程等領(lǐng)域。本文將介紹正則表達(dá)式的基本概念、語法以及在Shell腳本中的應(yīng)用。
一、正則表達(dá)式基本概念
正則表達(dá)式是一種用來描述字符串模式的工具,它可以用來匹配、查找、替換和分割字符串。正則表達(dá)式的語法包括普通字符、元字符和特殊字符。
1.普通字符:可以直接在正則表達(dá)式中使用的字符,如字母、數(shù)字、漢字等。
2.元字符:具有特殊含義的字符,需要使用反斜杠(\)進(jìn)行轉(zhuǎn)義。常見的元字符有:
-.:匹配任意單個(gè)字符。
-*:匹配前面的字符0次或多次。
-+:匹配前面的字符1次或多次。
-?:匹配前面的字符0次或1次。
-|:表示或,用于匹配多個(gè)模式中的任意一個(gè)。
-^:表示字符串的開始。
-$:表示字符串的結(jié)束。
-[abc]:表示字符a、b或c中的任意一個(gè)。
-[^abc]:表示非a、b、c中的任意一個(gè)字符。
-(pattern):表示匹配括號(hào)內(nèi)的pattern。
-(?:pattern):表示匹配非捕獲分組的pattern。
-(?=pattern):表示后面的內(nèi)容必須以pattern開頭。
-(?!pattern):表示后面的內(nèi)容不能以pattern開頭。
3.特殊字符:具有特殊含義的元字符,需要使用反斜杠(\)進(jìn)行轉(zhuǎn)義。常見的特殊字符有:
-\d:匹配數(shù)字。
-D:匹配非數(shù)字。
-\w:匹配字母、數(shù)字或下劃線。
-\W:匹配非字母、數(shù)字或下劃線。
-\s:匹配空白字符(空格、制表符、換行符等)。
二、正則表達(dá)式基本語法
在Shell腳本中,可以使用grep命令進(jìn)行正則表達(dá)式的匹配和查找。grep命令的基本語法如下:
```bash
grep[選項(xiàng)]"模式"[文件]
```
其中,[選項(xiàng)]可以是以下參數(shù)之一:
-`-i`:忽略大小寫。
-`-v`:顯示不包含匹配模式的行。
-`-r`:遞歸搜索子目錄中的文件。
-`-l`:僅顯示包含匹配模式的文件名。
-`--color=auto`:自動(dòng)為高亮顯示匹配的文本添加顏色。
-`--include=PATTERN`:只顯示包含指定模式的文件。
-`--exclude=PATTERN`:只顯示不包含指定模式的文件。
-`--max-depth=N`:限制遞歸搜索的最大深度。
-`--binary-files=MODE`:對(duì)二進(jìn)制文件執(zhí)行不同的操作模式。
-`--files-with-matches`:僅顯示包含匹配模式的文件。
-`--invert-match`:顯示不包含匹配模式的行。
-`--regexp`:將模式視為正則表達(dá)式進(jìn)行匹配。
-`--basic`:將模式視為基本正則表達(dá)式進(jìn)行匹配(默認(rèn))。
-`--posix-basic`:將模式視為POSIX兼容的基本正則表達(dá)式進(jìn)行匹配。
-`--extended-regexp`:將模式視為擴(kuò)展正則表達(dá)式進(jìn)行匹配(非POSIX兼容)。
三、正則表達(dá)式在Shell腳本中的應(yīng)用舉例
1.在Shell腳本中查找包含特定單詞的文件名:
```bash
grep"word"*.txt>word_files.txt
```
2.在Shell腳本中刪除包含特定單詞的所有行:
```bash
grep"word"file.txt|sed's/^[^[]*\([^)]*\).*$/\1/'>new_file.txt&&catnew_file.txt>file.txt&&echo"已刪除包含單詞'word'的行"&&exit;false#使sed命令跳過錯(cuò)誤信息并退出腳本,避免誤刪其他行的內(nèi)容。
3.在Shell腳本中批量修改文件名中的特定字符串:
```bash
forfilein*.txt;donew_file=$(echo"$file"|sed's/old_string/new_string/');if["$file"!="$new_file"];thenecho"正在重命名$file為$new_file";rename"$file""$new_file";elseecho"文件名已無需重命名";fi;done;echo"重命名完成"&&exit;false#使rename命令跳過錯(cuò)誤信息并退出腳本,避免誤刪其他文件的內(nèi)容。```第八部分高級(jí)特性與腳本優(yōu)化關(guān)鍵詞關(guān)鍵要點(diǎn)Shell腳本編程中的管道與重定向
1.管道(Pipe):管道是一種將一個(gè)命令的輸出作為另一個(gè)命令的輸入的方法。這樣可以實(shí)現(xiàn)數(shù)據(jù)的傳遞和處理,使腳本更加靈活高效。例如,可以使用`grep`命令從大量文本中篩選出包含特定關(guān)鍵詞的行,然后使用`sort`命令對(duì)結(jié)果進(jìn)行排序。
2.重定向(Redirection):重定向是將命令的輸出或輸入重定向到文件或其他命令的操作。這樣可以將腳本的執(zhí)行結(jié)果保存到文件中,或者將文件的內(nèi)容作為命令的輸入。例如,可以使用`>`將命令的輸出保存到文件,使用`<`將文件內(nèi)容作為命令的輸入。
3.組合使用:管道和重定向可以相互組合,實(shí)現(xiàn)更復(fù)雜的數(shù)據(jù)處理和控制流程。例如,可以使用`find`命令查找特定類型的文件,然后使用`grep`命令篩選出包含特定關(guān)鍵詞的文件,最后使用`sort`和`uniq`命令統(tǒng)計(jì)結(jié)果。
Shell腳本編程中的變量與數(shù)組
1.變量:變量是Shell腳本中用來存儲(chǔ)數(shù)據(jù)的容器。可以在腳本中聲明、賦值、修改和刪除變量。變量名以字母、數(shù)字和下劃線組成,區(qū)分大小寫。例如,可以使用`name="張三"`聲明一個(gè)名為`name`的變量,并賦值為"張三"。
2.數(shù)組:數(shù)組是Shell腳本中的一種數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)多個(gè)值。數(shù)組的使用方式與C語言中的數(shù)組類似,可以通過下標(biāo)訪問數(shù)組元素。例如,可以使用`arr=("張三""李四""王五")`聲明一個(gè)包含三個(gè)元素的數(shù)組,并通過下標(biāo)訪問元素。
3.操作符:Shell腳本支持多種操作符,用于對(duì)變量和數(shù)組進(jìn)行各種操作。常見的操作符包括算術(shù)運(yùn)算符(如加法、減法等)、關(guān)系運(yùn)算符(如等于、不等于等)和邏輯運(yùn)算符(如與、或等)。
Shell腳本編程中的條件判斷與流程控制
1.條件判斷:條件判斷用于根據(jù)條件執(zhí)行不同的代碼塊。在Shell腳本中,可以使用`if`、`elif`和`else`關(guān)鍵字進(jìn)行條件判斷。例如,可以使用`if[$a-gt$b]`判斷兩個(gè)數(shù)值的大小關(guān)系。
2.流程控制:流程控制用于控制腳本的執(zhí)行流程。在Shell腳本中,可以使用`then`、`elif`、`else`和`fi`關(guān)鍵字進(jìn)行流程控制。例如,可以使用`if[$a-gt$b]&&[$c-eq$d]thenecho"a大于b且c等于d"elseecho"條件不滿足"fi`判斷多個(gè)條件并執(zhí)行相應(yīng)的代碼塊。
3.case語句:case語句用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國知識(shí)產(chǎn)權(quán)創(chuàng)新調(diào)研報(bào)告-智慧芽創(chuàng)新研究中心
- 北師大版(2019)必修第三冊(cè)Unit 9 Learning Lesson 2 Language Learning Tips 課件
- 基于秸稈摻混的濕污泥熱解中重金屬遷移轉(zhuǎn)化行為及其環(huán)境風(fēng)險(xiǎn)評(píng)價(jià)
- 汽車傳感器與檢測(cè)技術(shù)電子教案:電容式液位傳感器
- 參觀通道衛(wèi)生管理制度
- 通遼新民北站螺桿樁施工方案
- 國企離職流程管理制度
- 培訓(xùn)行業(yè)薪酬管理制度
- 物理中考一輪復(fù)習(xí)教案 第三十三講 磁體與磁場(chǎng) 電流的磁場(chǎng)
- 倉庫開業(yè)活動(dòng)方案
- 湖北省武漢市2025屆高三年級(jí)五月模擬訓(xùn)練試題數(shù)學(xué)試題及答案(武漢五調(diào))
- 2025年湖北省襄陽市襄州區(qū)中考數(shù)學(xué)二模試卷
- 2022年《上海市初中語文課程終結(jié)性評(píng)價(jià)指南》中規(guī)定的個(gè)文言實(shí)詞
- 電影編劇勞動(dòng)合同范本
- 甲醛釋放量測(cè)定不確定度報(bào)告
- 《汽車電工電子基礎(chǔ)》課程標(biāo)準(zhǔn)
- 南京市生物地理中考指導(dǎo)書答案
- 諾和諾德制藥
- 長三角地區(qū)地圖(可以隨意更改顏色、轉(zhuǎn)動(dòng)、組合))
- SIDEL吹瓶機(jī)原理ppt課件
- 抹灰工程施工方案預(yù)拌砂漿
評(píng)論
0/150
提交評(píng)論