版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
LinuxBashShell快速入門BASH的基本語法最簡單的例子——HelloWorld!關于輸入、輸出和錯誤輸出BASH中對變量的規(guī)定(與C語言的異同)BASH中的基本流程控制語法函數(shù)的使用2.1最簡單的例子——HelloWorld!幾乎所有的講解編程的書給讀者的第一個例子都是HelloWorld程序,那么我們今天也就從這個例子出發(fā),來逐步了解BASH。用vi編輯器編輯一個hello文件如下:#!/bin/bash#ThisisaverysimpleexampleechoHelloWorld這樣最簡單的一個BASH程序就編寫完了。這里有幾個問題需要說明一下:一,第一行的#!是什么意思二,第一行的/bin/bash又是什么意思三,第二行是注釋嗎四,echo語句五,如何執(zhí)行該程序#!是說明hello這個文件的類型的,有點類似于Windows系統(tǒng)下用不同文件后綴來表示不同文件類型的意思(但不相同)。Linux系統(tǒng)根據(jù)"#!"及該字串后面的信息確定該文件的類型,關于這一問題同學們回去以后可以通過"manmagic"命令及/usr/share/magic文件來了解這方面的更多內容。在BASH中第一行的"#!"及后面的"/bin/bash"就表明該文件是一個BASH程序,需要由/bin目錄下的bash程序來解釋執(zhí)行。BASH這個程序一般是存放在/bin目錄下,如果你的Linux系統(tǒng)比較特別,bash也有可能被存放在/sbin、/usr/local/bin、/usr/bin、/usr/sbin或/usr/local/sbin這樣的目錄下;如果還找不到,你可以用"locatebash""find/-namebash2>/dev/null"或"whereisbash"這三個命令找出bash所在的位置;如果仍然找不到,那你可能需要自己動手安裝一個BASH軟件包了。第二行的"#Thisisa..."就是BASH程序的注釋,在BASH程序中從“#”號(注意:后面緊接著是“!”號的除外)開始到行尾的多有部分均被看作是程序的注釋。的三行的echo語句的功能是把echo后面的字符串輸出到標準輸出中去。由于echo后跟的是"HelloWorld"這個字符串,因此"HelloWorld"這個字串就被顯示在控制臺終端的屏幕上了。需要注意的是BASH中的絕大多數(shù)語句結尾處都沒有分號。如何執(zhí)行該程序呢?有兩種方法:一種是顯式制定BASH去執(zhí)行:$bashhello或$shhello(這里sh是指向bash的一個鏈接,“l(fā)rwxrwxrwx1rootroot4Aug2005:41/bin/sh->bash”)或者可以先將hello文件改為可以執(zhí)行的文件,然后直接運行它,此時由于hello文件第一行的"#!/bin/bash"的作用,系統(tǒng)會自動用/bin/bash程序去解釋執(zhí)行hello文件的:$chmodu+xhello$./hello此處沒有直接“$hello”是因為當前目錄不是當前用戶可執(zhí)行文件的默認目錄,而將當前目錄“.”設為默認目錄是一個不安全的設置。需要注意的是,BASH程序被執(zhí)行后,實際上Linux系統(tǒng)是另外開設了一個進程來運行的。2.2關于輸入、輸出和錯誤輸出在字符終端環(huán)境中,標準輸入/標準輸出的概念很好理解。輸入即指對一個應用程序或命令的輸入,無論是從鍵盤輸入還是從別的文件輸入;輸出即指應用程序或命令產(chǎn)生的一些信息;與Windows系統(tǒng)下不同的是,Linux系統(tǒng)下還有一個標準錯誤輸出的概念,這個概念主要是為程序調試和系統(tǒng)維護目的而設置的,錯誤輸出于標準輸出分開可以讓一些高級的錯誤信息不干擾正常的輸出信息,從而方便一般用戶的使用。在Linux系統(tǒng)中:標準輸入(stdin)默認為鍵盤輸入;標準輸出(stdout)默認為屏幕輸出;標準錯誤輸出(stderr)默認也是輸出到屏幕(上面的std表示standard)。在BASH中使用這些概念時一般將標準輸出表示為1,將標準錯誤輸出表示為2。下面我們舉例來說明如何使用他們,特別是標準輸出和標準錯誤輸出。輸入、輸出及標準錯誤輸出主要用于I/O的重定向,就是說需要改變他們的默認設置。先看這個例子:$ls>ls_result$ls-l>>ls_result上面這兩個命令分別將ls命令的結果輸出重定向到ls_result文件中和追加到ls_result文件中,而不是輸出到屏幕上。">"就是輸出(標準輸出和標準錯誤輸出)重定向的代表符號,連續(xù)兩個">"符號,即">>"則表示不清除原來的而追加輸出。下面再來看一個稍微復雜的例子:$find/home-namelost*2>err_result這個命令在">"符號之前多了一個"2","2>"表示將標準錯誤輸出重定向。由于/home目錄下有些目錄由于權限限制不能訪問,因此會產(chǎn)生一些標準錯誤輸出被存放在err_result文件中。大家可以設想一下find/home-namelost*2>>err_result命令會產(chǎn)生什么結果?如果直接執(zhí)行find/home-namelost*>all_result,其結果是只有標準輸出被存入all_result文件中,要想讓標準錯誤輸出和標準輸入一樣都被存入到文件中,那該怎么辦呢?看下面這個例子:$find/home-namelost*>all_result2>&1上面這個例子中將首先將標準錯誤輸出也重定向到標準輸出中,再將標準輸出重定向到all_result這個文件中。這樣我們就可以將所有的輸出都存儲到文件中了。為實現(xiàn)上述功能,還有一種簡便的寫法如下:$find/home-namelost*>&all_result如果那些出錯信息并不重要,下面這個命令可以讓你避開眾多無用出錯信息的干擾:$find/home-namelost*2>/dev/null同學們回去后還可以再試驗一下如下幾種重定向方式,看看會出什么結果,為什么?$find/home-namelost*>all_result1>&2$find/home-namelost*2>all_result1>&2$find/home-namelost*2>&1>all_result另外一個非常有用的重定向操作符是"-",請看下面這個例子:$(cd/source/directory&&tarcf-.)|(cd/dest/directory&&tarxvfp-)該命令表示把/source/directory目錄下的所有文件通過壓縮和解壓,快速的全部移動到/dest/directory目錄下去,這個命令在/source/directory和/dest/directory不處在同一個文件系統(tǒng)下時將顯示出特別的優(yōu)勢。下面還幾種不常見的用法:n<&-表示將n號輸入關閉<&-表示關閉標準輸入(鍵盤)n>&-表示將n號輸出關閉>&-表示將標準輸出關閉2.3BASH中對變量的規(guī)定(與C語言的異同)好了下面我們進入正題,先看看BASH中的變量是如何定義和使用的。對于熟悉C語言的程序員,我們將解釋BASH中的定義和用法與C語言中有何不同。2.3.1.BASH中的變量介紹我們先來從整體上把握一下BASH中變量的用法,然后再去分析BASH中變量使用與C語言中的不同。BASH中的變量都是不能含有保留字,不能含有"-"等保留字符,也不能含有空格。簡單變量在BASH中變量定義是不需要的,沒有"inti"這樣的定義過程。如果想用一個變量,只要他沒有在前面被定義過,就直接可以用,當然你使用該變量的第一條語句應該是對他賦初值了,如果你不賦初值也沒關系,只不過該變量是空(注意:是NULL,不是0)。不給變量賦初值雖然語法上不反對,但不是一個好的編程習慣。好了我們看看下面的例子:首先用vi編輯下面這個文件hello2:#!/bin/bash#givetheinitializevaluetoSTRSTR="HelloWorld"echo$STR在上面這個程序中我們需要注意下面幾點:一,變量賦值時,'='左右兩邊都不能有空格;二,BASH中的語句結尾不需要分號(";");三,除了在變量賦值和在FOR循環(huán)語句頭中,BASH中的變量使用必須在變量前加"$"符號,同學們可以將上面程序中第三行改為"echoSTR"再試試,看看會出什么結果。==>output:STR四,由于BASH程序是在一個新的進程中運行的,所以該程序中的變量定義和賦值不會改變其他進程或原始Shell中同名變量的值,也不會影響他們的運行。更細致的文檔甚至提到以單引號括起來的變量將不被BASH解釋為變量,如'$STR',而被看成為純粹的字符串。而且更為標準的變量引用方式是${STR}這樣的,$STR自不過是對${STR}的一種簡化。在復雜情況下(即有可能產(chǎn)生歧義的地方)最好用帶{}的表示方式。BASH中的變量既然不需要定義,也就沒有類型一說,一個變量即可以被定義為一個字符串,也可以被再定義為整數(shù)。如果對該變量進行整數(shù)運算,他就被解釋為整數(shù);如果對他進行字符串操作,他就被看作為一個字符串。請看下面的例子:#!/bin/bashx=1999let"x=$x+1"echo$xx="olympic'"$xecho$x關于整數(shù)變量計算,有如下幾種:"+-*/%",他們的意思和字面意思相同。整數(shù)運算一般通過let和expr這兩個指令來實現(xiàn),如對變量x加1可以寫作:let"x=$x+1"或者x=`expr$x+1`在比較操作上,整數(shù)變量和字符串變量各不相同,詳見下表:對應的操作 整數(shù)操作 字符串操作相同 -eq =不同 -ne !=大于 -gt >小于 -lt <大于或等于 -ge 小于或等于 -le 為空 -z不為空 -n比如:比較字符串a(chǎn)和b是否相等就寫作:if[$a=$b]判斷字符串a(chǎn)是否為空就寫作:if[-z$a]判斷整數(shù)變量a是否大于b就寫作:if[$a-gt$b]更細致的文檔推薦在字符串比較時盡量不要使用-n,而用!-z來代替。(其中符號"!"表示求反操作)BASH中的變量除了用于對整數(shù)和字符串進行操作以外,另一個作用是作為文件變量。BASH是Linux操作系統(tǒng)的Shell,因此系統(tǒng)的文件必然是BASH需要操作的重要對象,如if[-x/root]可以用于判斷/root目錄是否可以被當前用戶進入。下表列出了BASH中用于判斷文件屬性的操作符:運算符 含義(滿足下面要求時返回TRUE)-efile 文件file已經(jīng)存在-ffile 文件file是普通文件-sfile 文件file大小不為零-dfile 文件file是一個目錄-rfile 文件file對當前用戶可以讀取-wfile 文件file對當前用戶可以寫入-xfile 文件file對當前用戶可以執(zhí)行-gfile 文件file的GID標志被設置-ufile 文件file的UID標志被設置-Ofile 文件file是屬于當前用戶的-Gfile 文件file的組ID和當前用戶相同file1-ntfile2 文件file1比file2更新file1-otfile2 文件file1比file2更老注意:上表中的file及file1、file2都是指某個文件或目錄的路徑。.關于局部變量在BASH程序中如果一個變量被使用了,那么直到該程序的結尾,該變量都一直有效。為了使得某個變量存在于一個局部程序塊中,就引入了局部變量的概念。BASH中,在變量首次被賦初值時加上local關鍵字就可以聲明一個局部變量,如下面這個例子:#!/bin/bashHELLO=Hellofunctionhello{localHELLO=Worldecho$HELLO}echo$HELLOhelloecho$HELLO該程序的執(zhí)行結果是:HelloWorldHello這個執(zhí)行結果表明全局變量$HELLO的值在執(zhí)行函數(shù)hello時并沒有被改變。也就是說局部變量$HELLO的影響只存在于函數(shù)那個程序塊中。2.3.2.BASH中的變量與C語言中變量的區(qū)別這里我們?yōu)樵瓉聿皇煜ASH編程,但是非常熟悉C語言的程序員總結一下在BASH環(huán)境中使用變量需要注意的問題。1,BASH中的變量在引用時都需要在變量前加上"$"符號(第一次賦值及在For循環(huán)的頭部不用加"$"符號);2,BASH中沒有浮點運算,因此也就沒有浮點類型的變量可用;3,BASH中的整形變量的比較符號與C語言中完全不同,而且整形變量的算術運算也需要經(jīng)過let或expr語句來處理;2.4BASH中的基本流程控制語法BASH中幾乎含有C語言中常用的所有控制結構,如條件分支、循環(huán)等,下面逐一介紹。2.4.1if...then...elseif語句用于判斷和分支,其語法規(guī)則和C語言的if非常相似。其幾種基本結構為:if[expression]thenstatmentsfi或者if[expression]thenstatmentselsestatmentsfi或者if[expression]thenstatmentselseif[expression]thenstatmentselsestatmentsfi或者if[expression]thenstatmentselif[expression]thenstatmentselsestatmentsfi值得說明的是如果你將if和then簡潔的寫在一行里面,就必須在then前面加上分號,如:if[expression];then...。下面這個例子說明了如何使用if條件判斷語句:#!/bin/bashif[$1-gt90]thenecho"Good,$1"elif[$1-gt70]thenecho"OK,$1"elseecho"Bad,$1"fiexit0上面例子中的$1是指命令行的第一個參數(shù),這個會在后面的“BASH中的特殊保留字”中講解。2.4.2forfor循環(huán)結構與C語言中有所不同,在BASH中for循環(huán)的基本結構是:for$varindostatmentsdone其中$var是循環(huán)控制變量,是$var需要遍歷的一個集合,do/done對包含了循環(huán)體,相當于C語言中的一對大括號。另外如果do和for被寫在同一行,必須在do前面加上";"。如:for$varin;do。下面是一個運用for進行循環(huán)的例子:#!/bin/bashfordayinSunMonTueWedThuFriSatdoecho$daydone#如果列表被包含在一對雙引號中,則被認為是一個元素fordayin"SunMonTueWedThuFriSat"doecho$daydoneexit0注意上面的例子中,在for所在那行的變量day是沒有加"$"符號的,而在循環(huán)體內,echo所在行變量$day是必須加上"$"符號的。另外如果寫成forday而沒有后面的in部分,則day將取遍命令行的所有參數(shù)。如這個程序:#!/bin/bashforparamdoecho$paramdoneexit0上面這個程序將列出所有命令行參數(shù)。for循環(huán)結構的循環(huán)體被包含在do/done對中,這也是后面的while、until循環(huán)所具有的特點。2.4.3whilewhile循環(huán)的基本結構是:while[condition]dostatmentsdone這個結構請大家自己編寫一個例子來驗證。2.4.4untiluntil循環(huán)的基本結構是:until[conditionisTRUE]dostatmentsdone這個結構也請大家自己編寫一個例子來驗證。2.4.5caseBASH中的case結構與C語言中的switch語句的功能比較類似,可以用于進行多項分支控制。其基本結構是:case"$var"incondition1)statments1;;condition2)statments2;;...*)defaultstatments;;esac下面這個程序是運用case結構進行分支執(zhí)行的例子:#!/bin/bashecho"Hitakey,thenhitreturn."readKeypresscase"$Keypress"in[a-z])echo"Lowercaseletter";;[A-Z])echo"Uppercaseletter";;[0-9])echo"Digit";;*)echo"Punctuation,whitespace,orother";;esacexit0上面例子中的第四行"readKeypress"一句中的read語句表示從鍵盤上讀取輸入。這個命令將在本講義的BASH的其他高級問題中講解。2.4.6break/continue熟悉C語言編程的都很熟悉break語句和continue語句。BASH中同樣有這兩條語句,而且作用和用法也和C語言中相同,break語句可以讓程序流程從當前循環(huán)體中完全跳出,而continue語句可以跳過當次循環(huán)的剩余部分并直接進入下一次循環(huán)。2.5函數(shù)的使用BASH是一個相對簡單的腳本語言,不過為了方便結構化的設計,BASH中也提供了函數(shù)定義的功能。BASH中的函數(shù)定義很簡單,只要向下面這樣寫就可以了:functionmy_funcname{codeblock}或者my_funcname(){codeblock}上面的第二種寫法更接近于C語言中的寫法。BASH中要求函數(shù)的定義必須在函數(shù)使用之前,這是和C語言用頭文件說明函數(shù)方法的不同。更進一步的問題是如何給函數(shù)傳遞參數(shù)和獲得返回值。BASH中函數(shù)參數(shù)的定義并不需要在函數(shù)定義處就制定,而只需要在函數(shù)被調用時用BASH的保留變量$1$2...來引用就可以了;BASH的返回值可以用return語句來指定返回一個特定的整數(shù),如果沒有return語句顯式的返回一個返回值,則返回值就是該函數(shù)最后一條語句執(zhí)行的結果(一般為0,如果執(zhí)行失敗返回錯誤碼)。函數(shù)的返回值在調用該函數(shù)的程序體中通過$?保留字來獲得。下面我們就來看一個用函數(shù)來計算整數(shù)平方的例子:#!/bin/bashsquare(){let"res=$1*$1"return$res}square$1result=$?echo$resultexit0BASH中的特殊保留字保留變量隨機數(shù)運算符變量的特殊操作3.1保留變量BASH中有一些保留變量,下面列出了一些:$IFS這個變量中保存了用于分割輸入?yún)?shù)的分割字符,默認識空格。$HOME這個變量中存儲了當前用戶的根目錄路徑。$PATH這個變量中存儲了當前Shell的默認路徑字符串。$PS1表示第一個系統(tǒng)提示符。$PS2表示的二個系統(tǒng)提示符。$PWD表示當前工作路徑。$EDITOR表示系統(tǒng)的默認編輯器名稱。$BASH表示當前Shell的路徑字符串。$0,$1,$2,...表示系統(tǒng)傳給腳本程序或腳本程序傳給函數(shù)的第0個、第一個、第二個等參數(shù)。$#表示腳本程序的命令參數(shù)個數(shù)或函數(shù)的參數(shù)個數(shù)。$$表示該腳本程序的進程號,常用于生成文件名唯一的臨時文件。$?表示腳本程序或函數(shù)的返回狀態(tài)值,正常為0,否則為非零的錯誤號。$*表示所有的腳本參數(shù)或函數(shù)參數(shù)。$@和$*涵義相似,但是比$*更安全。$!表示最近一個在后臺運行的進程的進程號。3.2隨機數(shù)隨機數(shù)是經(jīng)常要用到的,BASH中也提供了這個功能,請看下面這個程序:#!/bin/bash#Printsdifferentrandomintegerfrom1to65536a=$RANDOMecho$aexit0這個程序可以在每次執(zhí)行的時候隨機的打印出一個大小在1到65536之間的整數(shù)。3.3運算符算術運算符+-*/%表示加減乘除和取余運算+=-=*=/=同C語言中的含義位操作符<<<<=>>>>=表示位左右移一位操作&&=||=表示按位與、位或操作~!表示非操作^^=表示異或操作關系運算符<><=>===!=表示大于、小于、大于等于、小于等于、等于、不等于操作&&||邏輯與、邏輯或操作3.4變量的特殊操作BASH中還有一些對變量的簡潔、快速的操作,大家還記得"${var}"和"$var"同樣是對變量的引用吧,對${var}進行一些變化就可以產(chǎn)生一些新功能:${var-default}表示如果變量$var還沒有設置,則保持$var沒有設置的狀態(tài),并返回后面的默認值default。${var=default}表示如果變量$var還沒有設置,則取后面的默認值default。${var+otherwise}表示如果變量$var已經(jīng)設置,則返回otherwise的值,否則返回空(null)。${var?err_msg}表示如果變量$var已經(jīng)設置,則返回該變量的值,否則將后面的err_msg輸出到標準錯誤輸出上。請同學們自己嘗試下面的例子:#!/bin/bashecho${var?Thereisanerror}exit0還有下面一些用法,這些用法主要用于從文件路徑字符串中提取有用信息:${var#pattern},${var##pattern}用于從變量$var中剝去最短(最長)的和pattern相匹配的最左側的串。${var%pattern},${var%%pattern}用于從變量$var中剝去最短(最長)的和pattern相匹配的最右側的串。另外BASH2中還加入下面一些操作:${var:pos}表示去掉變量$var中前pos個字符。${var:pos:len}表示變量$var中去掉前pos個字符后的剩余字符串的前l(fā)en個字符。${var/pattern/replacement}表示將變量$var中第一個出現(xiàn)的pattern模式替換為replacement字符串。${var//pattern/replacement}表示將變量$var中出現(xiàn)的所有pattern模式全部都替換為replacment字符串。BASH中的其他高級問題BASH中對返回值的處理用BASH設計簡單用戶界面在BASH中讀取用戶輸入一些特殊的慣用法BASH程序的調試關于BASH24.1BASH中對返回值的處理無論是在Shell中對BASH腳本返回值的處理,還是在腳本中對函數(shù)返回值的處理,都是通過"$?"系統(tǒng)變量來獲得。BASH要求返回值必須為一個整數(shù),不能用return語句返回字符串變量。4.2用BASH設計簡單用戶界面BASH中提供了一個小的語句格式,可以讓程序快速的設計出一個字符界面的用戶交互選擇的菜單,該功能就是由select語句來實現(xiàn)的,select語句的語法為:selectvarindostatmentsuse$vardone上面的語法結構在執(zhí)行后,BASH會將中的所有項加上數(shù)字列在屏幕上等待用戶選擇,在用戶作出選擇后,變量$var中就包含了那個被選中的字符串,然后就可以對該變量進行需要的操作了。我們可以從下面的例子中更直觀的來理解這個功能:#!/bin/bashOPTIONS="HelloQuit"selectoptin$OPTIONS;doif["$opt"="Quit"];thenechodoneexitelif["$opt"="Hello"];thenechoHelloWorldelseclearechobadoptionfidoneexit0大家可以試著執(zhí)行上面的程序,看看是什么執(zhí)行結果。4.3在BASH中讀取用戶輸入BASH中通過read函數(shù)來實現(xiàn)讀取用戶輸入的功能,如下面這段程序:#!/bin/bashechoPleaseenteryournamereadNAMEecho"Hi!$NAME!"exit0上面這個腳本讀取用戶的輸入,并
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年湖南民族職業(yè)學院單招職業(yè)傾向性考試題庫參考答案詳解
- 2026年廣東茂名幼兒師范專科學校單招職業(yè)適應性考試題庫及答案詳解一套
- 2026年朔州師范高等??茖W校單招職業(yè)技能考試題庫含答案詳解
- 2026年錦州師范高等專科學校單招職業(yè)適應性考試題庫及參考答案詳解1套
- 2026年湖北職業(yè)技術學院單招職業(yè)傾向性考試題庫及參考答案詳解
- 2026年棗莊職業(yè)學院單招職業(yè)適應性測試題庫附答案詳解
- 2026年山西省財政稅務專科學校單招職業(yè)適應性測試題庫及參考答案詳解
- 2026年福州科技職業(yè)技術學院單招職業(yè)適應性考試題庫及答案詳解一套
- 2026年臨汾職業(yè)技術學院單招職業(yè)傾向性考試題庫參考答案詳解
- 2026年哈爾濱鐵道職業(yè)技術學院單招職業(yè)適應性測試題庫參考答案詳解
- 童年的閱讀測試題及答案
- 爆破備案工作報告
- 企業(yè)現(xiàn)金流管理課件
- 舊電梯拆除合同協(xié)議書
- 山東省濟南市鋼城區(qū)(五四學制)2024-2025學年八年級上學期1月期末考試數(shù)學試卷
- 客戶押款協(xié)議書范本
- 地理建筑特征教案課件
- 1.1冪的乘除第4課時(課件)-2024-2025學年七年級數(shù)學下冊同步課堂(北師大版)
- 人教版(PEP)英語六年級上冊 Unit4 Part A Lets learn 教案
- 中國當代文學專題-003-國開機考復習資料
- 基于無人機的精準投遞技術研究
評論
0/150
提交評論