Linux系統(tǒng)管理及應用項目式教程(RHEL9CentOSStream9)(微課版)(第2版) 課件 項目10 編寫shell腳本(第2版)_第1頁
Linux系統(tǒng)管理及應用項目式教程(RHEL9CentOSStream9)(微課版)(第2版) 課件 項目10 編寫shell腳本(第2版)_第2頁
Linux系統(tǒng)管理及應用項目式教程(RHEL9CentOSStream9)(微課版)(第2版) 課件 項目10 編寫shell腳本(第2版)_第3頁
Linux系統(tǒng)管理及應用項目式教程(RHEL9CentOSStream9)(微課版)(第2版) 課件 項目10 編寫shell腳本(第2版)_第4頁
Linux系統(tǒng)管理及應用項目式教程(RHEL9CentOSStream9)(微課版)(第2版) 課件 項目10 編寫shell腳本(第2版)_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

公司近期有一大批新員工入職,大路安排小喬為新員工創(chuàng)建登錄Linux服務器的用戶賬號和初始密碼。雖然小喬已經(jīng)對添加用戶的命令useradd非常熟悉了,但是她覺得使用useradd命令一個一個地添加用戶,效率太低而且容易出現(xiàn)錯誤,有沒有什么方法可以提高效率?小喬主動思考如何提升工作效率的態(tài)度讓導師大路很是欣慰,他告訴小喬可以利用shell編寫程序,實現(xiàn)批量添加用?戶。對于小喬來講,這是一個從未接觸過的領(lǐng)域,于是她請教了有經(jīng)驗的同事。同事告訴她,shell也可以像C語言和Java一樣定義變量、使用分支和循環(huán)等,在實際工作中通常利用shell腳本完成自動化任務,如批量添加、文件備份、定時文件清理?等。在同事的指點下,小喬的思路越來越明?確。理解shell腳本的概?念。學會使用shell腳本創(chuàng)建程?序。掌握分支結(jié)構(gòu)的用?法。具有擔當精神掌握循環(huán)結(jié)構(gòu)的用?法。具有精益求精的工匠精神1創(chuàng)建shell腳本2條件測試與分支結(jié)構(gòu)3循環(huán)結(jié)構(gòu)10.1創(chuàng)建shell腳本10.1.1創(chuàng)建并運行shell腳本shell腳本是一種為shell編寫的腳本程?序。1.理解shell腳本shell腳本是一種高效、便捷的編程工具,無需編譯即可直接執(zhí)行,極大地簡化了編程流程。此外,它具備數(shù)組處理、循環(huán)控制、條件分支和邏輯運算等豐富的編程特性,使得自動化任務處理變得高效而靈活。因此,作為系統(tǒng)管理人員,需要掌握shell腳本的編寫方法,以簡化系統(tǒng)管理任務,提高工作效?率。shell腳本的結(jié)構(gòu)如圖10-1所示。由此可以看出,shell腳本由以#!開頭的解釋器、以#開頭的注釋行和程序體3個部分組?成。圖10-1

shell腳本的結(jié)構(gòu)10.1.1創(chuàng)建并運行shell腳本2.編寫shell腳本下面以輸出HelloWorld!為例,講解shell腳本的編寫及運行方?法。(1)編寫程序?qū)崿F(xiàn)輸出HelloWorld!。[root@Server~]#mkdirshellscript[root@Server~]#cdshellscript/[root@Servershellscript]#vimHelloWorld.sh1#!/bin/bash2#Program3#Thisprogramshows"HelloWorld!"inyourscreen.4#History5#2020/06/08testFirstrelease6echo-e"HelloWorld!\n"10.1.1創(chuàng)建并運行shell腳本(2)注意事?項。

1

行的#!/bin/bash不能省略,該行表示執(zhí)行腳本時,使用的shell腳本的解釋器為/bin/bash。

第2~第5行為注釋行,以#開頭,通常用于標注程序的功能、創(chuàng)建時間、修改時間等。在編寫程序時,添加適當?shù)淖⑨屖橇己玫木幊塘晳T,有利于以后的維護工?作。

第6行為主程序部分,使用echo命令輸出HelloWorld!。10.1.1創(chuàng)建并運行shell腳本(3)設(shè)置執(zhí)行權(quán)限,并運行HelloWorld.sh文?件。編寫完HelloWorld.sh文件后,在目錄shellscript下,可以通過shHelloWorld.sh、sourceHelloWorld.sh和./HelloWorld.sh等3種命令運行該腳?本。[root@Servershellscript]#shHelloWorld.sh

HelloWorld!或者[root@Servershellscript]#sourceHelloWorld.sh

HelloWorld!或者[root@Servershellscript]#chmoda+xHelloWorld.sh[root@Servershellscript]#./HelloWorld.shHelloWorld!10.1.2定義shell變量、接收用戶輸入的數(shù)據(jù):read命令在shell腳本中,為了構(gòu)建更復雜的功能,可以定義多種類型的變量,并且支持與用戶互動來動態(tài)賦值,從而增強了腳本的交互性和適應?性。1.shell變量的類型與其他程序設(shè)計語言中的變量一樣,shell變量也可以根據(jù)作用范圍分為全局變量和局部變?量。

全局變量又被稱為環(huán)境變量,其作用范圍包括當前shell進程及其子進?程。

局部變量的作用范圍僅限制在其命令行所在的shell或shell腳本文件?中。10.1.2定義shell變量、接收用戶輸入的數(shù)據(jù):read命令2.設(shè)置shell環(huán)境變量shell環(huán)境變量一般是指用export命令設(shè)置的變量,用于設(shè)置shell程序的運行環(huán)?境。環(huán)境變量可以在命令行中設(shè)置,用戶退出shell時,這些變量值會丟失,若想要永久保存環(huán)境變量,可在用戶主目錄下的.bash_profile或.bashrc文件中定義,也可以在/etc/profile文件中定義,這樣每次用戶登錄時,這些變量都將自動設(shè)?置。10.1.2定義shell變量、接收用戶輸入的數(shù)據(jù):read命令(1)在命令行中使用export命令設(shè)置環(huán)境變?量。在bash中,設(shè)置環(huán)境變量可以使用export命令,命令格式如?下。export環(huán)境變量名=變量值使用export命令設(shè)置用戶的主目錄為/home/test,并使用cd$HOME命令切換到用戶主目錄,如?下。[root@Server~]#mkdir/home/test[root@Server~]#exportHOME=/home/test[root@Serverroot]#cd$HOME[root@Server~]#pwd/home/test[root@Server~]#echo$HOME/home/test10.1.2定義shell變量、接收用戶輸入的數(shù)據(jù):read命令(2)修改/etc/profile文件,設(shè)置環(huán)境變?量。使用export命令可以設(shè)置臨時性的環(huán)境變量,退出shell時,這些環(huán)境變量就失效了,若想永久保存環(huán)境變量,需要修改/etc/profile文?件。若要為Java設(shè)置環(huán)境變量,可在/etc/profile文件的最后加入如下代?碼。[root@Server~]#vim/etc/profileexportJAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-2.el9_1.x86_64exportPATH=$PATH:$JAVA_HOME/bin[root@Server~]#source/etc/profile[root@Server~]#echo$JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-2.el9_1.x86_643.定義shell局部變量shell局部變量一般在shell腳本中定義,只在當前shell腳本執(zhí)行期間有效。定義局部變量命令格式如?下。變量名=變量值變量的命名需遵循一定的規(guī)則,具體如?下。

變量名由數(shù)字、字母、下畫線等組成,必須以字母或者下畫線開?頭。

等號兩側(cè)不能有空?格。

變量值若包含空格,則必須用引號引起?來。

變量名建議大寫,便于與shell命令區(qū)?分。10.1.2定義shell變量、接收用戶輸入的數(shù)據(jù):read命令【例10-1】

定義變量VAR、STR,并輸出變量的?值。[root@Server~]#VAR=100[root@Server~]#STR="HelloLinux"[root@Server~]#echo$VAR100[root@Server~]#echo$STRHelloLinux【例10-2】

定義變量A,值為HelloWorld,并輸出變量A。[root@Server~]#vimprinta.sh#!/bin/bash#對變量賦值A(chǔ)="HelloWorld"echo"Ais:"echo$A[root@Server~]#shprinta.shAis:HelloWorld10.1.2定義shell變量、接收用戶輸入的數(shù)據(jù):read命令4.接收用戶輸入的數(shù)據(jù):read命令read命令用于接收從鍵盤輸入的數(shù)據(jù),并將其作為變量的值。此命令通常用在shell腳本與用戶進行交互的場合中。命令格式如?下。read[選項]變量名read命令的常用選項如表10-1所?示。10.1.2定義shell變量、接收用戶輸入的數(shù)據(jù):read命令【例10-3】

通過提示“Pleaseenteryourname:”輸入用戶的姓名,輸出“HelloXX,welcometothelinuxclassroom!”。[root@Server~]#vimmyname.sh#!/bin/bash#Thisprogramshows"HelloXX,welcometothelinuxclassroom!"inyourscreen.read-p"Pleaseenteryourname:"NAMEecho"Hello$NAME,welcometothelinuxclassroom!"exit0[root@Server~]#shmyname.shPleaseenteryourname:bobbyHellobobby,welcometothelinuxclassroom!10.1.2定義shell變量、接收用戶輸入的數(shù)據(jù):read命令10.2條件測試與分支結(jié)構(gòu)10.2.1條件測試test命令用來檢查某個條件是否成立。執(zhí)行條件測試操作以后,通過預定義變量$?獲取測試命令的返回值,返回值為0表示條件成立,返回值為1表示條件不成?立。常見的測試類型有文件測試、整數(shù)值比較、字符串比較和邏輯測試?等。1.文件測試test命令可以對文件進行測試,如test-efilename用于表示判斷文件名是否存在。文件測試的常用選項如表10-2所?示。表10-2文件測試的常用選項10.2.1條件測試【例10-4】

使用test命令判斷/root目錄是否存?在。[root@Server~]#test-e/root[root@Server~]#echo$?0echo$?語句用于查看上一條命令的返回值,返回值為0表示/root目錄存?在。10.2.1條件測試2.整數(shù)值比較test命令可以將兩個整數(shù)進行比較,如testnum1-eqnum2表示判斷num1和num2是否相等。整數(shù)值比較的常用選項如表10-3所?示。表10-3

整數(shù)值比較的常用選項10.2.1條件測試【例10-5】

使用test命令比較10和11是否相?等。[root@Server~]#test10-eq11[root@Server~]#echo$?1通過echo$?語句查看到上一條命令的返回值為1,表示10和11不相?等。10.2.1條件測試3.字符串比較test命令可以將兩個字符串進行比較,如test-zstring表示判斷字符串string是否為空。字符串比較的常用選項如表10-4所?示。選項說明-z判斷字符串是否為空-n判斷字符串是否不為空str1=str2判斷字符串str1是否等于字符串str2str1!=str2判斷字符串str1是否不等于字符串str210.2.1條件測試【例10-6】

使用test命令判斷字符串sas和sas是否相?等。[root@Server~]#test"sas"="sas"[root@Server~]#echo$?0通過echo$?語句查看到上一條命令的返回值為0,表示兩個字符串相?等。10.2.1條件測試4.邏輯測試shell提供了與、或、非等邏輯運算來測試某個條件是否成立。邏輯測試的常用選項如表10-5所?示。表10-5

邏輯測試的常用選項選項說明!表達式測試表達式是否為假表達式1-a表達式2測試兩個表達式是否同時為真,也可以用&&表示表達式1-o表達式2測試兩個表達式是否至少有一個為真,也可以用||表示【例10-7】

使用test命令判斷/root目錄是否不存?在。[root@Server~]#test!-e/root/[root@Server~]#echo$?1通過echo

$?語句查看到上一條命令的返回值為1,表示/root目錄存?在。if語句有3種類型:單分支if語句、雙分支if語句、多分支if語?句。1.單分支if語句單分支if語句是常見的條件判斷式。當條件成立時,執(zhí)行相應的操作,否則不執(zhí)行任何操作,其語法格式如?下。if[條件表達式];then

命令序列fi單分支if語句的流程如圖10-2所?示。10.2.2if語句圖10-2

單分支if語句的流程【例10-8】

編寫如下程序,文件名為compare.sh,查看運行結(jié)?果。[root@Server~]#vimcompare.sh#!/bin/bashFIRST=50SECOND=10if[$FIRST-gt$SECOND];thenecho"$FIRST>$SECOND"fi[root@Server~]#chmoda+xcompare.sh[root@Server~]#./compare.sh50>10在例10-8中,F(xiàn)IRST初值為50,SECOND初值為10,F(xiàn)IRST大于SECOND,因此在執(zhí)行過程中可以執(zhí)行到if分支語句。但是如果要根據(jù)用戶輸入的數(shù)據(jù)來判斷條件是否成立,就需要用到雙分支if語句?了。10.2.2if語句2.雙分支if語句

雙分支if語句在條件成立和條件不成立時執(zhí)行不同的操作,其語法格式如?下。if[條件表達式];then

命令序列1else

命令序列2fi雙分支if語句的流程如圖10-3所?示。圖10-3

雙分支if語句的流程10.2.2if語句【例10-9】

使用雙分支if語句改進例10-8中的代碼,查看運行結(jié)?果。[root@Server~]#vimcompare.sh#!/bin/bashread-p"Pleaseinputthefirstnum:"FIRSTread-p"Pleaseinputthesecondnum:"SECONDif[$FIRST-gt$SECOND];thenecho"$FIRST>$SECOND"elseecho"$FIRST<=$SECOND"fi[root@Server~]#shcompare.shPleaseinputthefirstnum:12Pleaseinputthesecondnum:4512<=4510.2.2if語句3.多分支if語句多分支if語句能針對多個條件執(zhí)行不同操作,其語法格式如?下。if[條件表達式1];then

命令序列1elif[條件表達式2];then

命令序列2elif……else

命令序列nfi多分支if語句的流程如圖10-4所?示。10.2.2if語句圖10-4

多分支if語句的流程10.2.2if語句【例10-10】

根據(jù)輸入的成績判斷成績檔次是優(yōu)秀、良好、及格還是不及?格。[root@Server~]#vimscorelevel.sh#!/bin/bashread-p"請輸入您的成績(0-100):"SCOREif(($SCORE>=90))&&(($SCORE<=100))thenecho"$SCORE,屬于優(yōu)秀檔次!"elif(($SCORE<90))&&(($SCORE>=80))thenecho"$SCORE,屬于良好檔次!"elif(($SCORE<80))&&(($SCORE>=60))thenecho"$SCORE,屬于及格檔次!"elseecho"$SCORE,屬于不及格檔次!"fi[root@Server~]#chmoda+xscorelevel.sh

[root@Server~]#./scorelevel.sh請輸入您的成績(0-100):9999,屬于優(yōu)秀檔次!10.2.2if語句提示

例10-10使用了shell的雙括號運算符,語法格式如下。((表達式1,表達式2…))特點如下。(1)在雙括號結(jié)構(gòu)中,所有表達式都可以像C語言表達式一樣書寫,如a++、b--等。(2)在雙括號結(jié)構(gòu)中,所有變量可以不加$前綴。(3)雙括號可以進行邏輯運算、四則運算。(4)雙括號結(jié)構(gòu)擴展了for、while、if條件測試運算。(5)雙括號結(jié)構(gòu)支持多個表達式運算,各個表達式之間用,分開。雙括號運算符不僅可以用在if語句中,也可以用在case分支及循環(huán)結(jié)構(gòu)中,大大降低了編寫代碼的復雜性,是對shell中算術(shù)運算及賦值運算的擴?展。10.2.3case語句例10-10利用多分支if語句實現(xiàn)了成績的檔次分類,但是我們發(fā)現(xiàn)如果if語句太多,代碼量比較大,代碼邏輯容易混亂。case語句可以很好地實現(xiàn)多分支的條件判斷,達到更好的效?果。case語句的語法格式如?下。case變量in

值1)

命令序列1;;

值2)

命令序列2;;

值3)

命令序列3;;……*)

默認命令序列;;esac(1)使用case語句需要注意以下3點。①

首行關(guān)鍵字是case,末行關(guān)鍵字是esac(case反過來寫)。②

值后面都有)。③

每條分支語句結(jié)尾一般會有一對分號即;;。(2)case語句的執(zhí)行過程如?下。①shell通過計算變量的值,將其結(jié)果依次與值1、值2、值3……比較,直到找到一個匹配?項。②

找到匹配項,執(zhí)行它后面的命令,直到遇到一對分號即;;為止。若找不到匹配項,則執(zhí)行*)默認命令序?列。10.2.3case語句case語句的流程如圖10-5所?示。10.2.3case語句圖10-5

case語句的流程【例10-11】

使用case語句實現(xiàn):根據(jù)輸入的成績判斷成績等級是優(yōu)秀、良好、中等還是?差。[root@Server~]#vimcaselevel.sh#!/bin/bashread-p"Pleaseinputyourscore:"SCOREcase$SCOREin[9][0-9]|100)echo"成績?yōu)椋?SCORE,等級為優(yōu)秀";;[8][0-9])echo"成績?yōu)椋?SCORE,等級為良好";;[6-7][0-9])echo"成績?yōu)椋?SCORE,等級為中等";;[0-9]|[0-5][0-9])echo"成績?yōu)椋?SCORE,等級為差";;*)echo"輸入的成績不合法:$SCORE";;esac10.2.3case語句[root@Server~]#shcaselevel.shPleaseinputyourscore:45成績?yōu)椋?5,等級為差[root@Server~]#shcaselevel.shPleaseinputyourscore:86成績?yōu)椋?6,等級為良好[root@Server~]#shcaselevel.sh

Pleaseinputyourscore:94成績?yōu)椋?4,等級為優(yōu)秀10.3循環(huán)結(jié)構(gòu)10.3.1for循環(huán)語句for循環(huán)語句對一個變量依次賦值后,重復執(zhí)行同一個命令序列。對于賦給變量的幾個數(shù)值,既可以在程序中以數(shù)值列表的形式提供,又可以在程序以外以位置參數(shù)的形式提供。for循環(huán)語句有如下兩種語法格?式。1.for循環(huán)語句的第一種語法格式for循環(huán)語句的第一種語法格式如?下。for循環(huán)變量名in取值列表do

命令序列done使用該語法格式需要注意以下3點。

取值列表指的是循環(huán)變量所能取到的值的列?表。do和done之間的所有語句稱為循環(huán)?體。

循環(huán)執(zhí)行的次數(shù)取決于取值列表中元素的個?數(shù)。該語句的執(zhí)行流程如圖10-6所?示。圖10-6

for循環(huán)語句的執(zhí)行流程【例10-12】

使用for循環(huán)語句求1+2+3+…+100的?和。[root@Server~]#vimforloop.sh#/bin/bashs=0for((i=1;i<=100;i=i+1))dos=$(($s+$i))doneecho"Theresultof'1+2+…+100'is==>$s"[root@Server~]#shforloop.shTheresultof'1+2+…+100'is==>505010.3.1for循環(huán)語句while循環(huán)語句也稱為不定循環(huán)語句,其語法格式如?下。while條件測試do

命令序列done當條件測試成立時,執(zhí)行命令序列,不成立時,跳出循?環(huán)。10.3.2while循環(huán)語句【例10-13】

使用while循環(huán)語句求1+2+3+…+100的?和。[root@Server~]#vimwhileloop.sh#/bin/bashs=0i=0while["$i"!="100"]doi=$(($i+1))s=$(($s+$i))doneecho"Theresultof'1+2+…+100'is==>$s"

[root@Server~]#shwhileloop.shTheresultof'1+2+…+100'is==>505010.3.2while循環(huán)語句【例10-14】

將例10-13中的部分代碼修改為如下形?式。#/bin/bashs=0i=0while:doi=$(($i+1))s=$(($s+$i))doneecho"Theresultof'1+2+…+100'is==>$s"再次運行并觀察結(jié)果,發(fā)現(xiàn)程序進入了死循環(huán)狀態(tài),按Ctrl+C組合鍵強制終止程?序。10.3.2while循環(huán)語句until循環(huán)語句也稱為不定循環(huán)語句,其執(zhí)行過程與while循環(huán)語句的正好相反,其語法格式如?下。until條件測試do

命令序列done當條件測試成立時,終止循環(huán),不成立時,執(zhí)行循環(huán)中的命令序?列。10.3.3until循環(huán)語句【例10-15】

使用until循環(huán)語句求1+2+3+…+100的?和。[root@Server~]#vimuntilloop.sh#/bin/bashs=0i=1until(($i>100))dos=$(($s+$i))i=$(($i+1))doneecho"Theresultof'1+2+…+100'is==>$s"[root@Server~]#shuntilloop.shTheresultof'1+2+…+100'is==>505010.3.3until循環(huán)語句使用while、until、for循環(huán)語句時,如果希望在不滿足結(jié)束條件的情況下跳出循環(huán),需要使用break或者continue語句。break與continue語句的區(qū)別如?下。break:用于跳出當前循環(huán)體,終止循環(huán)語句,執(zhí)行done后面的語?句。continue:用于跳過當前循環(huán)體內(nèi)剩余未執(zhí)行的語句,重新判斷循環(huán)條件,以便執(zhí)行下一輪循?環(huán)。10.3.3until循環(huán)語句1創(chuàng)建用戶信息文件2編寫shell腳本項目實施3運行shell腳本任務10-1創(chuàng)建用戶信息文件任務10-1創(chuàng)建用戶信息文件為了更好地完成本任務,我們做如下約?定。(1)新用戶的用戶名來自一個包含文件名列表的文件userlist,文件內(nèi)容如表10-6所?示。(2)用戶的密碼與用戶名相?同。(3)這些用戶都屬于新員工用戶組newgroup。表10-6

userlist文件內(nèi)容用戶名密碼LiLeiLiLeiHanMeiMeiHanMeiMeiMengLiMengLiHuFeiHuFeiLiuMingLiuMingWangLeiWangLei任務10-1創(chuàng)建用戶信息文件(1)新建空文件userlist。[root@Server~]#touchuserlist(2)把用戶名和密碼分為兩列添加到文件中,保存并退?出。[root@Server~]#vimuserlistLiLeiLiLeiHanMeiMeiHanMeiMeiMengLiMengLiHuFeiHuFeiLiuMingLiuMingWangLeiWangLei任務10-2編寫shell腳本任務10-2編寫shell腳本(1)新建空文件createuser.sh。[root@Server~]#touchcreateuser.sh(2)使用Vim編輯器編寫createuser.sh腳本,輸入如下內(nèi)?容。[root@Server~]#vimcreateuser.sh#!/bin/bashUsers=/root/userlist#批量新增用戶的內(nèi)容文件UserAdd=/usr/sbin/useradd#新增用戶命令路徑Passwd=/usr/bin/passwd#設(shè)置用戶密碼命令路徑Cut=/bin/cut#字符串分割命令路徑whilereadLINES#逐行讀取用戶數(shù)據(jù)文件任務10-2編寫shell腳本doUSERNAME=$(echo$LINES|$Cut-f1-d'')#從每行中分割出用戶名PASSWORD=$(echo$LINES|$Cut-f2-d'')#從每行中分割出用戶密碼#echo$USERNAMEgrep-E"newgroup"/etc/group&>/dev/nullif[$?-ne0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論