Linux云計(jì)算架構(gòu)師精編實(shí)戰(zhàn)教程:shell中色彩處理和awk使用技巧

全套學(xué)習(xí)資料移步至公眾號(hào)【學(xué)神來(lái)啦】

本節(jié)所講內(nèi)容:

??24.1 ?shell中的色彩處理

??24.2 ?awk基本應(yīng)用

??24.3 ?awk高級(jí)應(yīng)用

24.1 ?Shell中的色彩處理

shell腳本中echo顯示內(nèi)容帶顏色顯示,echo顯示帶顏色,需要使用參數(shù)-e

格式1: echo -e “\033[背景顏色;文字顏色m要輸出的字符\033[0m”

格式2:echo -e “\e[背景顏色;文字顏色m要輸出的字符\e[0m”

例:綠底藍(lán)字

如圖:

注:其中42的位置代表底色,34的位置代表的是字的顏色,0m是關(guān)閉屬性

1、字背景顏色和文字顏色之間是英文的分號(hào)";"

2、文字顏色后面有個(gè)m

3、字符串前后可以沒(méi)有空格,如果有的話(huà),輸出也是同樣有空格

4、echo顯示帶顏色,需要使用參數(shù)-e ,-e 允許對(duì)下面列出的加反斜線(xiàn)轉(zhuǎn)義的字符進(jìn)行解釋.

控制選項(xiàng):

\033[0m 關(guān)閉所有屬性

\033[1m 設(shè)置高亮度,加粗

\033[5m 閃爍

[root@xuegod63 ~]# echo -e "\e[42;34mhello world\e[5m"??#執(zhí)行后,發(fā)現(xiàn)后期所有輸出都閃爍狀態(tài),如何關(guān)閉?

[root@xuegod63 ~]# echo -e "?\e[0m"??????#可以使用\e[0m 關(guān)閉所有屬性

[root@xuegod63 ~]# echo -e "?\033[0m" ???#可以使用\033[0m 關(guān)閉所有屬性

常見(jiàn)shell輸入帶顏色文字: ?3x代表字的顏色,4x代表背景色

echo -e "\033[30m 黑色字 \033[0m"

echo -e "\033[31m 紅色字 \033[0m"

echo -e "\033[32m 綠色字 \033[0m"

echo -e "\033[33m 黃色字 \033[0m"

echo -e "\033[34m 藍(lán)色字 \033[0m"

echo -e "\033[35m 紫色字 \033[0m"

echo -e "\033[36m 天藍(lán)字 \033[0m"

echo -e "\033[37m 白色字 \033[0m"

?

echo -e "\033[40;37m 黑底白字 \033[0m"

echo -e "\033[41;37m 紅底白字 \033[0m"

echo -e "\033[42;37m 綠底白字 \033[0m"

echo -e "\033[43;37m 黃底白字 \033[0m"

echo -e "\033[44;37m 藍(lán)底白字 \033[0m"

echo -e "\033[45;37m 紫底白字 \033[0m"

echo -e "\033[46;37m 天藍(lán)底白字 \033[0m"

echo -e "\033[47;30m 白底黑字 \033[0m"

shell色彩應(yīng)用實(shí)戰(zhàn):

[root@xuegod63 ~]#?echo -e "\033[31m 2. 部署apache環(huán)境 \033[0m" \

&& yum -y install httpd &> /dev/null \

&& ?systemctl start httpd \

&& echo -e "\033[42m apache啟動(dòng)成功 \033[0m" || echo -e "\033[41m 啟動(dòng)失??! \033[0m"

#安裝服務(wù),部署開(kāi)始時(shí)輸出紅色字體。部署成功并啟動(dòng)服務(wù)后輸出綠底start字樣,失敗則輸出紅底error字樣。

24.2 ?awk基本應(yīng)用

grep和egrep:文本過(guò)濾的

sed:流編輯器,實(shí)現(xiàn)編輯的

awk:文本報(bào)告生成器,實(shí)現(xiàn)格式化文本輸出

24.2.1 ?AWK基本概念

AWK是一種優(yōu)良的文本處理工具,Linux及Unix環(huán)境中現(xiàn)有的功能最強(qiáng)大的數(shù)據(jù)處理引擎之一。這種編程及數(shù)據(jù)操作語(yǔ)言的最大功能取決于一個(gè)人所擁有的知識(shí)。awk命名:Alfred Aho Peter (阿爾弗雷德·霍彼得)、Weinberger(溫伯格)和brian kernighan(布萊恩·柯林漢)三個(gè)人的姓的縮寫(xiě)。

awk---->gawk 即: gun awk

在linux上常用的是gawk,awk是gawk的鏈接文件

man gawk----》pattern scanning and processing language??模式掃描和處理語(yǔ)言。

任何awk語(yǔ)句都是由模式和動(dòng)作組成,一個(gè)awk腳本可以有多個(gè)語(yǔ)句。模式?jīng)Q定動(dòng)作語(yǔ)句的觸發(fā)條件和觸發(fā)時(shí)間。

模式:

正則表達(dá)式 : ? /root/ 匹配含有root的行 ???? /*.root/

關(guān)系表達(dá)式: ??< ?> ?&& ?|| ??+ ?*

匹配表達(dá)式: ??~ ?!~

動(dòng)作:

變量 ?命令 ?內(nèi)置函數(shù) ?流控制語(yǔ)句

它的語(yǔ)法結(jié)構(gòu)如下:

awk?[options]?'BEGIN{ print "start" }‘pattern{ commands }’END{ print "end" }'file

其中:BEGIN ?END是AWK的關(guān)鍵字部,因此必須大寫(xiě);這兩個(gè)部分開(kāi)始?jí)K和結(jié)束塊是可選的

特殊模塊:

BEGIN語(yǔ)句設(shè)置計(jì)數(shù)和打印頭部信息,在任何動(dòng)作之前進(jìn)行

END語(yǔ)句輸出統(tǒng)計(jì)結(jié)果,在完成動(dòng)作之后執(zhí)行

通過(guò)上面我們可以知道;AWK它工作通過(guò)三個(gè)步驟

1、讀:從文件、管道或標(biāo)準(zhǔn)輸入中讀入一行然后把它存放到內(nèi)存中

2、執(zhí)行:對(duì)每一行數(shù)據(jù),根據(jù)AWK命令按順序執(zhí)行。默認(rèn)情況是處理每一行數(shù)據(jù),也可以指定模式

3、重復(fù):一直重復(fù)上述兩個(gè)過(guò)程直到文件結(jié)束

AWK支持兩種不同類(lèi)型的變量:內(nèi)建變量,自定義變量

awk內(nèi)置變量:

$n 當(dāng)前記錄的第n個(gè)字段,比如: $1表示第一個(gè)字段,$2表示第二個(gè)字段

$0 這個(gè)變量包含執(zhí)行過(guò)程中當(dāng)前行的文本內(nèi)容

FILENAME 當(dāng)前輸入的文件名

FS 字段分隔符(默認(rèn)是空格)

NF 表示字段數(shù),在執(zhí)行過(guò)程中對(duì)應(yīng)于當(dāng)前的字段數(shù),NF:列的個(gè)數(shù)

FNR ?各文件分別計(jì)數(shù)的行號(hào)

NR 表示記錄數(shù),在執(zhí)行過(guò)程中對(duì)應(yīng)于當(dāng)前的行號(hào) , NR :行號(hào)

OFS 輸出字段分隔符(默認(rèn)值是一個(gè)空格)

ORS 輸出記錄分隔符(默認(rèn)值是一個(gè)換行符)

RS 記錄分隔符(默認(rèn)是一個(gè)換行符)

24.2.2 ?實(shí)例演示

常用的命令選項(xiàng):

-F ?fs指定分隔符

-v 賦值一個(gè)用戶(hù)自定義變量

-f 指定腳本文件,從腳本中讀取awk命令

(1)分隔符的使用

用法:-Ffs 其中fs是指定輸入分隔符,fs可以是字符串或正則表達(dá)式;分隔符默認(rèn)是空格

常見(jiàn)寫(xiě)法:-F: ??-F, ?-F[Aa]

例1:

[root@xuegod63 ~]# echo "AA BB CC DD"|awk '{print $2}'

BB

[root@xuegod63 ~]# echo "AA|BB|CC|DD"|awk -F"|" '{print $2}'

BB

[root@xuegod63 ~]# echo "AA,BB,CC,DD"|awk -F"," '{print $2}'

BB

[root@xuegod63 ~]# echo "AA,BB,CC,DD"|awk -F, '{print $2}'

BB

[root@xuegod63 ~]# awk -F: '{print $1}' /etc/passwd??#以:分隔,打印第1列用戶(hù)名

[root@xuegod63 ~]# cut -d: -f1 /etc/passwd

例2:指定多個(gè)分隔符

[root@xuegod63 ~]# echo "12AxAbADXaAD52" | awk -F"[aA]" '{print $1}'

12

例3:使用FS指定分隔符

[root@xuegod63 ~]# echo "12AxAbADXaAD52" | awk 'BEGIN {FS="aA"} {print $2}'

D52

例4:過(guò)濾出本系統(tǒng)的IP地址

[root@xuegod63 ~]# ifconfig ens33 | grep netmask

????????inet 192.168.1.63 ?netmask 255.255.255.0 ?broadcast 192.168.1.255

[root@xuegod63 ~]# ifconfig ens33 | grep netmask | awk '{print $2}'

192.168.1.63

(2)關(guān)系運(yùn)算符的使用

例1:

[root@xuegod63 ~]# echo "3 2 3 4 5" > a.txt

[root@xuegod63 ~]# awk '{print $1+10}' ?a.txt

13

例2:

[root@xuegod63 ~]# echo "one two three four" | awk '{print $4}'

four

[root@xuegod63 ~]# echo "one two three four" | awk '{print $NF}'

four

[root@xuegod63 ~]# echo "one two three four" | awk '{print $(NF-2)}'??#打印倒數(shù)第3列

two

[root@xuegod63 ~]# echo "one two three four" | awk '{print $(NF/2-1)}'

one

例2:打印出passwd文件中用戶(hù)UID小于10的用戶(hù)名和它登錄使用的shell

參數(shù): $NF 最后一列

[root@xuegod63 ~]# awk -F: '$3<10{print $1 $NF}' /etc/passwd??#直接輸出格式太亂

root/bin/bash

bin/sbin/nologin

daemon/sbin/nologin

adm/sbin/nologin

lp/sbin/nologin

sync/bin/sync

shutdown/sbin/shutdown

halt/sbin/halt

mail/sbin/nologin

[root@xuegod63 ~]# awk -F: '$3<10{print $1 "<======>" $NF}' /etc/passwd?

#awk格式化輸出

root<======>/bin/bash

bin<======>/sbin/nologin

daemon<======>/sbin/nologin

在$1和$NF之間加一下\t tab

[root@xuegod63 ~]# awk -F:?'$3<10{print $1"\t"$NF}'/etc/passwd

注:awk 最外面使用了單引號(hào)'' ,里面都使用雙引號(hào)“”

輸出多個(gè)列時(shí),可以加,分隔一下.

[root@xuegod63 ~]# awk -F: '$3<10{print $1,$NF}' /etc/passwd

例2:打印出系統(tǒng)中UID大于1000且登錄shell是/bin/bash的用戶(hù)

[root@xuegod63 ~]# ?awk -F: '$3>=1000 && $NF=="/bin/bash"{print $1"\t"$NF}' /etc/passwd

mk /bin/bash

(3)在腳本中的一些應(yīng)用

例:統(tǒng)計(jì)當(dāng)前內(nèi)存的使用率

[root@xuegod63 ~]#

[root@xuegod63 ~]# vim?user_cache.sh

#!/bin/bash

echo "當(dāng)前系統(tǒng)內(nèi)存使用百分比為:"

USEFREE=`free -m | grep -i mem | awk '{print $3/$2*100"%"}'`

echo -e "內(nèi)存使用百分比: \e[31m${USEFREE}\e[0m"

[root@xuegod63 ~]# bash user_cache.sh

正在上傳…重新上傳取消

24.3 ?awk高級(jí)應(yīng)用

命令格式:

awk ?[-F | -f | -v ]?'BEGIN {} /?/ {command1;command2} END {}' filename

-F指定分隔符

-f? 調(diào)用腳本

-v? 定義變量

‘{}’引用代碼塊

{…}命令代碼塊,包含一條或多條命令

BEGIN 初始化代碼塊

/ str /匹配代碼塊,可以是字符串或正則表達(dá)式

{print A;print B}? 多條命令使用分號(hào)分隔

END? 結(jié)尾代碼塊

在awk中,pattern有以下幾種:

empty空模式,這個(gè)也是我們常用的

/regular expression/ ?僅處理能夠被這個(gè)模式匹配到的行

例:打印以root開(kāi)頭的行

[root@xuegod63 ~]# awk -F: '/^root/{print $0}' /etc/passwd

root:x:0:0:root:/root:/bin/bash

3) 行范圍匹配 startline,endline

例1:輸出行號(hào)大于等于3且行號(hào)小于等于6的行

[root@xuegod63 ~]# awk -F: '(NR>=3&&NR<=6){print NR,$0}' /etc/passwd

3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

4 adm:x:3:4:adm:/var/adm:/sbin/nologin

5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

6 sync:x:5:0:sync:/sbin:/bin/sync

內(nèi)置變量的特殊用法:

$0表示整個(gè)當(dāng)前行

NF字段數(shù)量????NF(Number?數(shù)量 ;??field?字段)?;NF:列的個(gè)數(shù)

NR每行的記錄號(hào),多文件記錄遞增???Record?[?rek?:d] NR :行號(hào)

\t 制表符

\n換行符

~ 匹配

!~ 不匹配

-F'[:#/]+' 定義三個(gè)分隔符

例1:使用NR行號(hào)來(lái)定位,然后提取IP地址

注:這個(gè)思路很好,之前都是通過(guò) 過(guò)濾關(guān)鍵字來(lái)定位,這次是通過(guò)行號(hào),多了一種思路

[root@xuegod63 ~]# ifconfig ens33 | awk 'NR==2{print $2}'

192.168.1.63

注:NR==2??表示行號(hào)為第2行

例2:NR與FNR的區(qū)別

[root@xuegod63 ~]# awk '{printNR"\t" $0}' /etc/hosts /etc/hostname

1 127.0.0.1 ??localhost localhost.localdomain localhost4 localhost4.localdomain4

2 ::1 ????????localhost localhost.localdomain localhost6 localhost6.localdomain6

3 192.168.1.63 ??xuegod63.cn

4 192.168.1.64 ??xuegod64.cn

5 192.168.1.64 ??xuegod62.cn

6

7xuegod63.cn

[root@xuegod63 ~]# awk '{printFNR"\t" $0}' /etc/hosts /etc/hostname

1 127.0.0.1 ??localhost localhost.localdomain localhost4 localhost4.localdomain4

2 ::1 ????????localhost localhost.localdomain localhost6 localhost6.localdomain6

3 192.168.1.63 ??xuegod63.cn

4 192.168.1.64 ??xuegod64.cn

5 192.168.1.64 ??xuegod62.cn

6

1xuegod63.cn

注:對(duì)于NR來(lái)說(shuō),在讀取不同的文件時(shí),NR是一直加的 ;

對(duì)于FNR來(lái)說(shuō),在讀取不同的文件時(shí),它讀取下一個(gè)文件時(shí),F(xiàn)NR會(huì)從1開(kāi)始重新計(jì)算的

例3:使用3種方法去除首行

方法1:[root@xuegod63 ~]# route -n | grep -v Kernel

Destination ????Gateway ????????Genmask ????????Flags Metric Ref ???Use Iface

0.0.0.0 ????????192.168.1.1 ????0.0.0.0 ????????UG ???100 ???0 ???????0 ens33

192.168.1.0 ????0.0.0.0 ????????255.255.255.0 ??U ????100 ???0 ???????0 ens33

192.168.122.0 ??0.0.0.0 ????????255.255.255.0 ??U ????0 ?????0 ???????0 virbr0

方法2:sed ?1d #刪除第1行的內(nèi)容

[root@xuegod63 ~]# route -n | sed 1d

方法3: awk

[root@xuegod63 ~]# route -n | awk 'NR!=1 {print $0}'

例4:匹配,使用awk查出以包括root字符的行 , 有以下3種方法

[root@xuegod63 ~]# awk -F: '/root/{print}'?/etc/passwd

[root@xuegod63 ~]# awk -F: '/root/' /etc/passwd

[root@xuegod63 ~]# awk -F: '/root/{print $0}' /etc/passwd

做一個(gè)不匹配root行:

[root@xuegod63 ~]# awk -F: '!/root/{print $0}' /etc/passwd

以root開(kāi)頭的行:

[root@xuegod63 ~]# awk -F: '/^root/{print $0}' /etc/passwd

以bash結(jié)尾的行:

[root@xuegod63 ~]# awk -F: '/bash$/{print $0}' /etc/passwd

root:x:0:0:root:/root:/bin/bash

mk:x:1000:1000:mk:/home/mk:/bin/bash

=====以下知識(shí),大家了解一下======

例5:條件表達(dá)式

表達(dá)式?if-true:if-false問(wèn)號(hào)前面是條件,如果條件為真執(zhí)行if-true,為假執(zhí)行if-false

例1:如果passwd中UID小于10,則給變量USER賦值成aaa,否則賦值成bbb

[root@xuegod63 ~]# awk -F: '{$3<10? USER="aaa":USER="bbb";print $1,USER}' /etc/passwd

root aaa

bin aaa

daemon aaa

adm aaa

lp aaa

sync aaa

shutdown aaa

halt aaa

mail aaa

operator bbb

。。。

用if(條件){命令1;命令2}elif(條件){命令;}else{命令}中,在比較條件中用( )擴(kuò)起來(lái),在AWK中,如果條件為1為真,0為假

例:如果UID小于10 ,則輸出user=>用戶(hù)名,否則輸出pass=>用戶(hù)名

[root@xuegod63 ~]# awk -F: '{if($3<10){print "user=>"$1}else{print "pass=>"$1}}' /etc/passwd

user=>root

user=>bin

user=>daemon

user=>adm

user=>lp

user=>sync

user=>shutdown

user=>halt

user=>mail

pass=>operator

~ ?匹配

!~ 不匹配

例:查出UID小于等于5且包括bin/bash的行

[root@xuegod63 ~]# ?awk -F: '{if($3<=5 && $NF ~ "bin/bash"){print $1,$NF}}' /etc/passwd

root /bin/bash

例6:變量

(1)用-v指定 ?var=value 變量名區(qū)分大小寫(xiě)

(2)在程序中直接定義

(3)在awk里,使用 -v?定義的變量可以不用加$符號(hào)

[root@xuegod63 ~]# var="test"

[root@xuegod63 ~]# awk 'BEGIN{print "'$var'"}'??#引用變量時(shí),使用雙引號(hào)+單引號(hào)括起來(lái)

test

[root@xuegod63 ~]# awk -v myvar=$var 'BEGIN{print myvar}'

test

[root@xuegod63 ~]# vim log.txt

1

2

3

4

[root@xuegod63 ~]# awk -v a=1 -v b=2 '{print $1,$1+a,$1b}' log.txt

1 2 12

2 3 22

3 4 32

4 5 42

[root@xuegod63 ~]# vim log.txt

a

b

c

d

[root@xuegod63 ~]# awk -v a=1 -v b=2 '{print $1,$1+a,$1b}' log.txt

a 1 a2

b 1 b2

c 1 c2

d 1 d2

例7:格式化輸出

printf命令:格式化輸出 ?printf“FORMAT”,item1,item2.......

format使用注意事項(xiàng):

1、其與print命令的最大不同是,printf需要指定format樣式

2、format用于指定后面的每個(gè)item的輸出格式

3、printf語(yǔ)句不會(huì)自動(dòng)打印換行符;\n

4、format格式的指示符都以%開(kāi)頭,后跟一個(gè)字符;如下:

%c: 顯示字符的ASCII碼

%d, %i:十進(jìn)制整數(shù)

%e, %E:科學(xué)計(jì)數(shù)法顯示數(shù)值

%f: 顯示浮點(diǎn)數(shù)

%g, %G: 以科學(xué)計(jì)數(shù)法的格式或浮點(diǎn)數(shù)的格式顯示數(shù)值;

%s: 顯示字符串

%u: 無(wú)符號(hào)整數(shù)

%%: 顯示%自身

例1:輸入passwd文件中的第1列內(nèi)容,輸出時(shí)不會(huì)換行

[root@xuegod63 ~]# ?awk -F: '{printf "%s",$1}' /etc/passwd??##不會(huì)自動(dòng)換行

rootrootbindaemonadmlpsyncshutdownhaltmailoperatorgamesftpnobodysystemd-networkdbuspolkitdabrtlibstoragemgmtrpccolordsaslauthrtkitchronyqemutssusbmuxdgeocluerpcusernfsnobodyradvdsetroubleshootpulsegdmgnome-initial-setupsshdavahipostfixntptcpdumpmk[root@xuegod63 ~]#

例2:換行輸出

[root@xuegod63 ~]# awk -F: '{printf "%s\n",$1}' /etc/passwd?

例3:在輸出的字母前面添加自定義字符串USERNAME:

[root@xuegod63 ~]# awk -F: '{printf "USERNAME: %s\n",$1}' /etc/passwd ?

USERNAME: root

USERNAME: bin

USERNAME: daemon

USERNAME: adm

例4:對(duì)$1和$NF都做格式化輸出

[root@xuegod63 ~]# awk -F: '{printf "USERNAME: %s %s\n",$1,$NF}' /etc/passwd

USERNAME: root /bin/bash

USERNAME: bin /sbin/nologin

USERNAME: daemon /sbin/nologin

例5:對(duì)$1和$NF都做格式化輸出,在$1和$NF兩者之間添加一串====字符進(jìn)行輸入

[root@xuegod63 ~]# awk -F: '{printf "USERNAME: %s=========%s\n",$1,$NF}' /etc/passwd

USERNAME: root=========/bin/bash

USERNAME: bin=========/sbin/nologin

awk修飾符:

N: 顯示寬度;

-: 左對(duì)齊;

例1:顯示時(shí)用10(N)個(gè)字符串右對(duì)齊顯示。如果要顯示的字符串不夠10個(gè)寬度,以字符串的左邊自動(dòng)添加。一個(gè)字母占一個(gè)寬度。默認(rèn)是右對(duì)齊

[root@xuegod63 ~]# awk -F":" '{printf "%10s\n",$1}' ?/etc/passwd

正在上傳…重新上傳取消

例2:使用10個(gè)寬度,左對(duì)齊顯示

[root@xuegod63 ~]# awk -F":" '{printf "%-10s\n",$1}' ?/etc/passwd

root ?????

bin ??????

daemon ???

adm ??????

lp ??

例3:第1列使用15個(gè)字符寬度左對(duì)齊輸出,最后一列使用15個(gè)字符寬度右對(duì)齊輸出

[root@xuegod63 ~]# awk -F: '{printf "USERNAME: %-15s %15s\n",$1,$NF}' /etc/passwd

USERNAME: root ?????????????????/bin/bash

USERNAME: bin ??????????????/sbin/nologin

正在上傳…重新上傳取消

例4:使用開(kāi)始和結(jié)束模塊來(lái)格式化輸出

[root@xuegod63 ~]# cat test.awk

BEGIN{

print "UserId\t\t\tShell"

print "-------------------------------"

FS=":"

}

$3>=500 && $NF=="/sbin/nologin"{

printf "%-20s %-20s\n", $1,$NF

}

END{

print "--------------------------------"

}

[root@xuegod63 ~]# awk -f test.awk /etc/passwd

UserId? Shell

-------------------------------

polkitd ?????????????/sbin/nologin ??????

libstoragemgmt ????/sbin/nologin ??????

colord ??????????????/sbin/nologin ??????

saslauth ????????????/sbin/nologin ??????

chrony ??????????????/sbin/nologin ??????

geoclue ?????????????/sbin/nologin ??????

nfsnobody ??????????/sbin/nologin ??????

setroubleshoot ??????/sbin/nologin ??????

gnome-initial-setup ?/sbin/nologin ??????

--------------------------------

更多學(xué)習(xí)資料請(qǐng)移步至公眾號(hào)【學(xué)神來(lái)啦】

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容