[轉] Bash中的if


if語法[Linux(bash_shell)]

BASH IF

我使用過的Linux命令之if - Bash中的條件判斷語句

關於bash中if語法結構的廣泛誤解

Linux 技巧:Bash的測試和比較函數(探密test,[,[[,((和if-then-else)

if語法[Linux(bash_shell)]

http://blog.csdn.net/ycl810921/article/details/4988778

1:
定義變量時, =號的兩邊不可以留空格.
eg:
gender=femal------------right
gender =femal-----------wrong
gender= femal-----------wrong
2
條件測試語句 [ 符號的兩邊都要留空格.
eg:
if [ $gender = femal ]; then-------right.
     echo "you are femal";
fi

if[ $gender...-----------------------wrong
if [$gender...----------------------wrong.

3
條件測試的內容,如果是字符串比較的話, 比較符號兩邊要留空格!
eg:
if [ $gender = femal ]; then-------right.
if [ $gender= femal ]; then--------wrong.
if [ $gender=femal ]; then---------wrong.

4
如果if 和 then寫在同一行, 那么,注意, then的前面要跟上 ; 號.
如果 then 換行寫, 那么也沒問題.
eg:
if [ $gender = femal ]; then-------right.
if [ $gender = femal ]
     then-------------------------------right.
if [ $gender = femal ] then-------wrong. then前面少了 ; 號.
提示出錯信息:
syntax error near unexpected token then
同理,還有很多出錯信息 比如
syntax error near unexpected token fi 等都是這樣引起的.

5
if 后面一定要跟上 then. 同理
elif 后面一定要跟上 then.
不然提示出錯信息:
syntax error near unexpected token else

 top

 

BASH IF  

http://lhsblog01.blog.163.com/blog/static/10200451920081118105937818/

Linux SHELL if 命令參數說明
2007年10月30日 星期二 08:47

    * –b 當file存在並且是塊文件時返回真
    * -c 當file存在並且是字符文件時返回真
    * -d 當pathname存在並且是一個目錄時返回真
    * -e 當pathname指定的文件或目錄存在時返回真
    * -f 當file存在並且是正規文件時返回真
    * -g 當由pathname指定的文件或目錄存在並且設置了SGID位時返回為真
    * -h 當file存在並且是符號鏈接文件時返回真,該選項在一些老系統上無效
    * -k 當由pathname指定的文件或目錄存在並且設置了“粘滯”位時返回真
    * -p 當file存在並且是命令管道時返回為真
    * -r 當由pathname指定的文件或目錄存在並且可讀時返回為真
    * -s 當file存在文件大小大於0時返回真
    * -u 當由pathname指定的文件或目錄存在並且設置了SUID位時返回真
    * -w 當由pathname指定的文件或目錄存在並且可執行時返回真。一個目錄為了它的內容被訪問必然是可執行的。
    * -o 當由pathname指定的文件或目錄存在並且被子當前進程的有效用戶ID所指定的用戶擁有時返回真。

UNIX Shell 里面比較字符寫法:

    * -eq   等於
    * -ne    不等於
    * -gt    大於
    * -lt    小於
    * -le    小於等於
    * -ge   大於等於
    * -z    空串
    * =    兩個字符相等
    * !=    兩個字符不等
    * -n    非空串 

 

#這里的-d 參數判斷$myPath是否存在
if [ ! -d "$myPath"]; then
mkdir "$myPath"
fi

#這里的-f參數判斷$myFile是否存在
if [ ! -f "$myFile" ]; then
touch "$myFile"
fi

top

 我使用過的Linux命令之if - Bash中的條件判斷語句

 

用途說明

Shell中的條件判斷語句,與其他編程語言類似。

如果需要知道有哪些條件判斷方式,通過man test就可以得到幫助。

常用格式

格式一

if 條件; then

    語句

fi

格式二

if 條件; then

    語句

else

    語句

fi

格式三

if 條件; then

    語句

elif 條件; then

    語句

fi

格式四

if 條件; then

    語句

elif 條件; then

    語句

else

    語句

fi

使用示例

示例一

Bash代碼
  1. if [ "foo" = "foo" ]; then   
  2.     echo expression evaluated as true   
  3. fi  
if [ "foo" = "foo" ]; then
    echo expression evaluated as true
fi

 

[root@jfht ~]# if [ "foo" = "foo" ]; then
>     echo expression evaluated as true
> fi
expression evaluated as true
[root@jfht ~]#

示例二

Bash代碼 復制代碼  收藏代碼
  1. if [ "foo" = "foo" ]; then   
  2.     echo expression evaluated as true   
  3. else   
  4.     echo expression evaluated as false   
  5. fi  
if [ "foo" = "foo" ]; then
    echo expression evaluated as true
else
    echo expression evaluated as false
fi

 

[root@jfht ~]# if [ "foo" = "foo" ]; then
>     echo expression evaluated as true
> else
>     echo expression evaluated as false
> fi
expression evaluated as true
[root@jfht ~]#

示例三

Bash代碼 
  1. T1="foo"  
  2. T2="bar"  
  3. if [ "$T1" = "$T2" ]; then   
  4.     echo expression evaluated as true   
  5. else   
  6.     echo expression evaluated as false   
  7. fi  
T1="foo"
T2="bar"
if [ "$T1" = "$T2" ]; then
    echo expression evaluated as true
else
    echo expression evaluated as false
fi

 

[root@jfht ~]# T1="foo"
[root@jfht ~]# T2="bar"
[root@jfht ~]# if [ "$T1" = "$T2" ]; then
>     echo expression evaluated as true
> else
>     echo expression evaluated as false
> fi
expression evaluated as false
[root@jfht ~]#

示例四 判斷命令行參數數量

文件 if_4.sh

Bash代碼 復制代碼  收藏代碼
  1. #!/bin/sh   
  2.   
  3. if [ "$#" != "1" ]; then   
  4.     echo "usage: $0 <file>"  
  5.     exit 1  
  6. fi  
#!/bin/sh

if [ "$#" != "1" ]; then
    echo "usage: $0 <file>"
    exit 1
fi

 

[root@smsgw root]# cat if_4.sh
#!/bin/sh

if [ "$#" != "1" ]; then
    echo "usage: $0 <file>"
    exit 1
fi

[root@smsgw root]# chmod +x if_4.sh
[root@smsgw root]# ./if_4.sh
usage: ./if_4.sh <file>
[root@smsgw root]# ./if_4.sh hello
[root@smsgw root]#

 

示例五 判斷文件中是否包含某個字符串

Bash代碼 復制代碼  收藏代碼
  1. if grep -q root /etc/passwd; then   
  2.     echo account root exists   
  3. else   
  4.     echo account root not exist   
  5. fi  
if grep -q root /etc/passwd; then
    echo account root exists
else
    echo account root not exist
fi

 

[root@jfht ~]# if grep -q root /etc/passwd; then
>     echo account root exists
> else
>     echo account root not exist
> fi
account root exists
[root@jfht ~]#

 

示例六 判斷文件是否存在

Bash代碼 復制代碼  收藏代碼
  1. if [ -e myfile ]; then   
  2.     echo myfile exists   
  3. else   
  4.     touch myfile   
  5.     echo myfile created   
  6. fi  
if [ -e myfile ]; then
    echo myfile exists
else
    touch myfile
    echo myfile created
fi

 

[root@jfht ~]# if [ -e myfile ]; then
>     echo myfile exists
> else
>     touch myfile
>     echo myfile created
> fi
myfile created
[root@jfht ~]# if [ -e myfile ]; then
>     echo myfile exists
> else
>     touch myfile
>     echo myfile created
> fi
myfile exists
[root@jfht ~]# ls -l myfile
-rw-r--r-- 1 root root 0 10-09 20:44 myfile

 

示例七 判斷兩個文件是否相同

Bash代碼 復制代碼  收藏代碼
  1. echo 1 >file1   
  2. echo 2 >file2   
  3. if ! diff -q file1 file2; then   
  4.     echo file1 file2 diff   
  5. else   
  6.     echo file1 file2 same   
  7. fi   
echo 1 >file1
echo 2 >file2
if ! diff -q file1 file2; then
    echo file1 file2 diff
else
    echo file1 file2 same
fi 

 

[root@jfht ~]# echo 1 >file1
[root@jfht ~]# echo 2 >file2
[root@jfht ~]# if ! diff -q file1 file2; then
>     echo file1 file2 diff
> else
>     echo file1 file2 same
> fi
Files file1 and file2 differ
file1 file2 diff
[root@jfht ~]#

問題思考

1. 怎么判斷字符串非空?

2. 怎么判斷文件非空?

3. 怎么判斷文件可執行?

4. 怎么判斷目錄?

5. 怎么判斷數值大小判斷?

相關資料

【1】BASH Programming 6.1 Dry Theory

【2】劉 泰山的博客 bash if 條件判斷

top

關於bash中if語法結構的廣泛誤解

       http://www.linuxdiyf.com/viewarticle.php?id=105505
何人, 或者說幾乎任何人, 都會在這種描述下自然地認為: [ 和 ] 是這種語法結構本身的一部分, 並且, 老老實實地在自己的腳本中總是這樣使用if 語句, 如果你總是在判斷字符串是否相等, 或文件的各種屬性, 這么做倒是沒錯, 只不過你可能會這樣犯錯:(下文都假設$1內容為-a)

if ["$1" = "-a" ]

if [ "$1 = "-a"]

畢竟, 很多其它語言中, 特殊符號如()、{}做分隔符時, 可以與被分隔內容親密無間. 而bash會來答復你的這種寫法:

[-a: command not found
bash: [: missing `]'

我相信, 以上這種心理模型造成的失敗后果十分嚴重, bash的錯誤信息顯示出它內部並不這樣看待if 條件語句的結構.

上面的模型同樣不能解釋下面的合法bash 命令:

[ "$1" = "-a" ]

僅僅這本身就是一個合法的命令, 沒有if、then、fi這些東西,當然, 下面這樣的也合法

[ "$1" = "-a" ] && echo yes

你如何解釋這些爛事? 當然你可以自圓其說地不斷對上面的if進行補充, 呃, [ .. ] 這種結構就是這么特別, 你必需在[之后有至少一個空格, 並且在]之前也至少有一個空格, 同時[..] 結構還可以單獨出現, 就象上面這樣, 另外... 這樣的解釋簡直是自欺欺人, 我敢保證企圖對自己這樣解釋的人根本自己就在懷疑這種說法, 因為你根本不知道這個結構還有其它什么怪誕詭秘之處何時會突然跳出來讓你大吃一驚. 我承認,我自己也曾經經歷過這樣的想法.

為了徹底批判這種錯誤概念, 容我再舉一例:

if ps ax | grep oracle > /dev/null 2>&1 ; then
...
fi

首先, 這是合法的, 它的目的是想知道進程列表中有沒有與oracle相關的東西, 當然, 如果你夠牛, 就能看出這種做法有另外的問題. 但這不是我想說的重點.

我想說的是, 你前面被教導的這種if 語句的語法模型, 如何解釋這個, [ 與 ] 又不見了, 並且還出現了管道, 普通的管道我們都見過, 但它能安全地出現在if 語句中嗎, 並且, 讓你感覺熟悉和安全的[ 和 ]又不見了.

好吧, 撥亂的部分至此為止, 如果你想獲得一個關於bash中if結構的正確的健康的環保的知識, 就打起精神往下看:

1. 首先, [ 在bash中沒有特殊地位, 它是一個命令, 就跟cat, ls, grep一樣讓你感到熟悉的命令. 它不是關鍵字,雖然它的更出色的胞弟"[["是

echo [

你就得到 [, 不信就試試, bash不會報告任何錯誤! 但這不說明它不是關鍵字, echo if你也能得到if

所以, 請再試:

which [
以及
ls -l $(which [)

2. 然后, if 的真正模型是:

if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi

其實, bash中的help if就給了你正確的答案, 但我不知道什么原因無數人就是忽略了它, 而非常多的bash教學資料中都采用了本文開頭提出的那種模型來告訴你關於if 結構的事.

注意: [ "$1" = "-a" ] 只一個命令, [ 是命令名!, "$1"是第一個參數, =是第二個參數, "-a"是第三個, ]是第4個. 是[這個命令, 而不是bash本身在報怨 [ "$1" = "-a"] 這樣的結構造成的錯誤, 因為[這個命令對它的參數有所期望, 它期望最后一個參數是 ], 而你用"-a"] 這種連寫的形式, 它得到的就只有3個參數: $1, = 和 -a].

這也解釋了這樣的錯誤:
["$1" = "-a" ]

bash解釋器得到了這樣的一個命令行:
[-a = "-a" ]

當然, 它認為 [-a 是命令名部分, 而你的系統中沒有這個命令, 所以會報告說:
[-a: command not found

3. 其次, bash中有一個builtin的 [命令, 通常你使用[執行的都是這個內置的命令, 目的是效率. 啟動一個進程的代價太高.

試試
type [
命令
top
 

Linux 技巧:Bash的測試和比較函數(探密test,[,[[,((和if-then-else)

http://article.yeeyan.org/view/wangxiaoyu/58410

概述:你有沒有為Bash中太多的測試和比較選項而困惑呢?這則技巧可以幫助你深刻理解多種文件類型、數值和字符串的測試,這樣你便會知道什么時候需要用test、[ ]、[[ ]]、(( ))或者是if-then-else結構。

現在,許多 Linux® 和 UNIX® 都有Bash 環境,它往往還是Linux默認的shell環境。Bash擁有強大的程序設計能力,包括各種的測試文件類型的函數和其它特性,比如像大多數程序語言中的數值和字符串的比較一樣。

理解各種測試,並且懂得在shell中通過元操作符表達大部分的操作,這些是成為一個強大的shell用戶重要的步驟。這篇文章,摘自developerWorks tutorial LPI exam 102 prep: Shells, scripting, programming, and compiling ,它指出如何理解和使用bash環境下的測試和比較操作。

這則內容闡述了shell的測試和比較函數,以及如何增加shell的程序設計能力。你可能已經認識了通過 && 和 || 表達簡單的shell邏輯,它可以讓我們根據前邊命令的返回正常或者是錯誤決定是否執行后邊的命令。在本文中,你將會認識到如何把這些基本的測試操作擴充成更復雜的shell程序。

在許多程序設計語言中,我們都知道,在定義了變量的值或者是傳遞參數后,都需要測試這變量的值和參數值。shell環境下的測試命令像其它shell命令一樣都會設置返回的狀態,實際上,test命令是一個shell內建命令!

shell內建命令test根據表達式 expr 的運算結果返回0(真)或者是1(假)。你也可以使用[ ],test expr和[ expr ]是等價的。你即可以通過變量 $? 來測試測試操作的返回值;也可以把返回值直接與 &&、|| 連用;當然后面我們還會涉及到通過多個條件結構來測試返回值。

 列表 1. 一些簡單的test

[ian@pinguino ~]$ test 3 -gt 4 && echo True || echo false
false
[ian@pinguino ~]$ [ "abc" != "def" ];echo $?
0
[ian@pinguino ~]$ test -d "$HOME" ;echo $?
0

在列表1的第一個例子中,-gt操作符對兩個數值進行算術比較。在第二個例子中,test的變形 [ ] 則是比較不等式兩邊的字符串。在最后一個例子中,是通過一元操作符 -d 來測試變量 HOME 變量的值是否是一個正常的目錄。

你可以通過-eq、-ne、-lt、-le、-gt或者是-ge來比較算術值,它們分別表示相等、不相等、小於、小於等於、大於或者是大於等於。

同樣你也可以用 = 和 != 比較字符串相等和不等,或者通過 < 或 > 測試第一個字符串是否排在第二個字符串的前邊或后邊,通過一元操作符 - z測試字符串是否為空,而一元操作符 -n 或不加操作符則當字符串為非空時返回真值。

注意:< 和 > 這兩個符號同時也是用來做shell重定向,所以你必須通過 < 和 > 來反轉它的意思。列表2給出了更多的字符測試的例子。檢驗一下是不是你所期望樣子。

列表 2. 一些字符串 tests

[ian@pinguino ~]$ test "abc" = "def" ;echo $?
1
[ian@pinguino ~]$ [ "abc" != "def" ];echo $?
0
[ian@pinguino ~]$ [ "abc" < "def" ];echo $?
0
[ian@pinguino ~]$ [ "abc" > "def" ];echo $?
1
[ian@pinguino ~]$ [ "abc" <"abc" ];echo $?
1
[ian@pinguino ~]$ [ "abc" > "abc" ];echo $?
1

下面的表1中列出一些更常用的文件測試,如果測試一個文件存在且包匹配指定的特性則返回的結果為真。

表 1. 一些常用的文件test
操作符 屬性
-d Directory
-e Exists (also -a)
-f Regular file
-h Symbolic link (also -L)
-p Named pipe
-r Readable by you
-s Not empty
-S Socket
-w Writable by you
-N Has been modified since last being read

 除了上面的一元測試以外,,你也可以通過一對操作符來對兩個文件進行比較,如表2.

表 2. 測試兩個文件
操作符號 為真的情況
-nt Test if file1 is newer than file 2. The modification date is used for this and the next comparison.
-ot Test if file1 is older than file 2.
-ef Test if file1 is a hard link to file2.

一些其它的測試還能檢查其它信息如文件的權限。想了解更多內容請使用 help test 來查看 man 手冊中 shell 內建命令test的小節。你也可以使用 help 命令來查看其它的 shell 內建命令。

-o 這個操作符能讓我們測試那些可以通過 set 的 -o option 來設定的各種shell選項,如果對應的選項設置了就返回真(1),否則返回假(0),請看列表3.

列表 3. 測試 shell 選項

[ian@pinguino ~]$ set +o nounset
[ian@pinguino ~]$ [ -o nounset ];echo $?
1
[ian@pinguino ~]$ set -u
[ian@pinguino ~]$ test -o nounset; echo $?
0


最后,-a 和 -o 選項分別表示通過邏輯的與(AND)和(OR)把表達式連接起來,一元操作符 -a 則是用來反轉一個測試的真值。你甚於可以用括號把表達式分組來改變默認的優先級。要謹記,一般情況下,shell 環境會把括號中的表達式放到子 shell 中去運行,所以你需要通過 ( 和 ) 或者把它倆放到單引號或雙引號中來反轉它的意思。列表4演示了對一個表達式德摩根定律的應用。

列表 4. 連接和分組tests

[ian@pinguino ~]$ test "a" != "$HOME" -a 3 -ge 4 ; echo $?
1
[ian@pinguino ~]$ [ ! ( "a" = "$HOME" -o 3 -lt 4 ) ]; echo $?
1
[ian@pinguino ~]$ [ ! ( "a" = "$HOME" -o '(' 3 -lt 4 ')' ")" ]; echo $?
1

(( and [[

雖然test命令功能非常強大,但有些時候也非常笨拙,像需要轉義時候或者是需要區別字符串比較和算術比較。所幸的是, bash 環境還包含了另外兩種測試方式,這兩種方式對於那些熟悉 C、C++、或者是 Java® 語法的朋友會更自然一些。

復合命令 (( )) 計算一個算術表達式的值,並且當運算結果為0時,設置返回的狀態為1,運算結果為非0的值時則設置返回狀態為0。同時你也不必轉義 (( 和 )) 之間的操作符號。支持整數的四則運算。被0除會導致錯誤,但是不會溢出。你也可以在其中運行usual C形式的算術表達式、邏輯和移位操作。let 命令也可以運行一個或多個算術表達式。它常常用來給算術變量賦值。


列表5. 賦值並測試算術表達式

[ian@pinguino ~]$ let x=2 y=2**3 z=y*3;echo $? $x $y $z
0 2 8 24
[ian@pinguino ~]$ (( w=(y/x) + ( (~ ++x) & 0x0f ) )); echo $? $x $y $w
0 3 8 16
[ian@pinguino ~]$ (( w=(y/x) + ( (~ ++x) & 0x0f ) )); echo $? $x $y $w
0 4 8 13

像 (( )) 一樣復合命令 [[ ]] 允許你使用更自然的語法對文件或字符串進行測試。你也可以通過括號和邏輯操作符連接多個測試。


列表6.使用復合命令[[

[ian@pinguino ~]$ [[ ( -d "$HOME" ) && ( -w "$HOME" ) ]] &&  
> echo "home is a writable directory"
home is a writable directory

當使用 = 或 != 時 [[ 復合命令也可以對字符串執行模式匹配,針對通配符的匹配如列表7所示。

列表7. 通過 [[ 做匹配tests

[ian@pinguino ~]$ [[ "abc def .d,x--" == a[abc]* ?d* ]]; echo $?
0
[ian@pinguino ~]$ [[ "abc def c" == a[abc]* ?d* ]]; echo $?
1
[ian@pinguino ~]$ [[ "abc def d,x" == a[abc]* ?d* ]]; echo $?
1

你甚至也可以通過 [[ 執行算術操作,但是請謹慎,只有是在 (( 復合命令中,< 和 > 操作符會把字符串作為操作對象測試其對應的次序前后。列表8中通過幾個例子做了演示。

列表8.通過 [[ 做算術測試

[ian@pinguino ~]$ [[ "abc def d,x" == a[abc]* ?d* || (( 3 > 2 )) ]]; echo $?
0
[ian@pinguino ~]$ [[ "abc def d,x" == a[abc]* ?d* || 3 -gt 2 ]]; echo $?
0
[ian@pinguino ~]$ [[ "abc def d,x" == a[abc]* ?d* || 3 > 2 ]]; echo $?
0
[ian@pinguino ~]$ [[ "abc def d,x" == a[abc]* ?d* || a > 2 ]]; echo $?
0
[ian@pinguino ~]$ [[ "abc def d,x" == a[abc]* ?d* || a -gt 2 ]]; echo $?
-bash: a: unbound variable

[ian@pinguino ~]$ function mycalc ()
> {
> local x
> if [ $# -lt 1 ]; then
> echo "This function evaluates arithmetic for you if you give it some"
> elif (( $* )); then
> let x="$*"
> echo "$* = $x"
> else
> echo "$* = 0 or is not an arithmetic expression"
> fi
> }
[ian@pinguino ~]$ mycalc 3 + 4
3 + 4 = 7
[ian@pinguino ~]$ mycalc 3 + 4**3
3 + 4**3 = 67
[ian@pinguino ~]$ mycalc 3 + (4**3 /2)
-bash: syntax error near unexpected token `('
[ian@pinguino ~]$ mycalc 3 + "(4**3 /2)"
3 + (4**3 /2) = 35
[ian@pinguino ~]$ mycalc xyz
xyz = 0 or is not an arithmetic expression
[ian@pinguino ~]$ mycalc xyz + 3 + "(4**3 /2)" + abc
xyz + 3 + (4**3 /2) + abc = 35


這個計算器用 loca l那句聲明了一個本地變量 x ,它只在 mycalc 函數的范圍內有效。let 函數可以有多個選項,像 declare 函數一樣,選項與函數的作用也是密切相關聯。更多信息請查看bash的man手冊,或者通過 help let 獲得。

[ian@pinguino ~]$ mycalc 015
015 = 13
[ian@pinguino ~]$ mycalc 0xff
0xff = 255
[ian@pinguino ~]$ mycalc 29#37
29#37 = 94
[ian@pinguino ~]$ mycalc 64#1az
64#1az = 4771
[ian@pinguino ~]$ mycalc 64#1azA
64#1azA = 305380
[ian@pinguino ~]$ mycalc 64#1azA_@
64#1azA_@ = 1250840574
[ian@pinguino ~]$ mycalc 64#1az*64**3 + 64#A_@
64#1az*64**3 + 64#A_@ = 1250840574

這些附加的輸入已經走出了這篇文章的范圍,用你的這個計算器時請謹慎使用。

elif 語句非常方便,它幫助你在寫腳本時簡單地實現的縮進。當你看到列表11中通過type命令查看mycalc函數的內容時你可能會驚訝。


列表 11. 打印mycalc

[ian@pinguino ~]$ type mycalc
mycalc is a function
mycalc ()
{
local x;
if [ $# -lt 1 ]; then
echo "This function evaluates arithmetic for you if you give it some";
else
if (( $* )); then
let x="$*";
echo "$* = $x";
else
echo "$* = 0 or is not an arithmetic expression";
fi;
fi
}


當然,你可以像列表12中一樣通過 $(( expression )) 和 echo 命令僅僅利用 shell 做算術。那種方式你不會學會任何與函數有關的東西,但提示你的是,在 (( expression )) 或者是 [[ expression ]] 中, shell 不會翻譯元字符,像 * 等等。


列表 12. 直接在shell環境中通過(( ))和echo命令運算

[ian@pinguino ~]$  echo $((3 + (4**3 /2)))
35

 

 top

 

 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM