《樹莓派應用開發(fā)》課程 第09章-Shell script_第1頁
《樹莓派應用開發(fā)》課程 第09章-Shell script_第2頁
《樹莓派應用開發(fā)》課程 第09章-Shell script_第3頁
《樹莓派應用開發(fā)》課程 第09章-Shell script_第4頁
《樹莓派應用開發(fā)》課程 第09章-Shell script_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第一季度工作報告XXXXXX公司名稱LOGO站長之家PPT模板樹莓派應用開發(fā)第九章Shellscript9.1Shellscript基本介紹9.2Shellecho命令9.3Shellprintf命令9.4Shell傳遞參數(shù)9.5Shell變量9.6Shell基本運算符9.7Shell流程控制9.8Shell字符串9.9Shell數(shù)組9.10Shell函數(shù)9.11Shell輸入/輸出重定向9.12Shelltest命令9.13Shell判斷符[]9.14Shellscript的追蹤與調試9.15Shell文件包含9.16Shellscript實例9.17修改SSH登錄信息

Shellscript基本介紹Shellscript是利用Shell的功能編寫的程序,這個程序保存后是純文本文件,將一些Shell

的語法與指令存儲在里面,然后用正規(guī)表示法,管道命令以及數(shù)據(jù)流重導向等功能,簡化我們日常的工作管理,以達到我們所想要的處理目的。Shellscript就像早期dos年代的bat文件,最簡單的功能就是將許多指令編寫在一起,讓使用者很容易地就能夠一次操作執(zhí)行多個命令。Shellscript還提供了數(shù)組,循環(huán),條件以及邏輯判斷等重要功能,讓使用者可以直接以Shell腳本來寫程序,卻不必使用類似C程序語言等傳統(tǒng)程序編寫的語法。

Shellscript環(huán)境和種類Shellscript編程跟JavaScript、php編程類似,只要有一個能編寫代碼的文本編輯器和一個能解釋執(zhí)行的腳本解釋器就可以。Linux的Shell種類眾多,常見的有:BourneShell(目錄是/usr/bin/sh或/bin/sh)BourneAgainShell(目錄是/bin/bash)CShell(目錄是/usr/bin/csh)KShell(目錄是/usr/bin/ksh)ShellforRoot(目錄是/sbin/sh)

……

BourneAgainShell,由于易用和免費,Bash在日常工作中被廣泛使用。同時,Bash也是大多數(shù)Linux系統(tǒng)默認的Shell。在一般情況下,大家并不區(qū)分使用的Shell是BourneShell還是BourneAgainShell,所以,像#!/bin/sh,它同樣也可以改為#!/bin/bash。

Shell和Shellscript的區(qū)別Shell是一個命令行解釋器或者應用程序,提供了一個界面,用戶通過這個界面訪問操作系統(tǒng)內核的服務,作用是遵循一定的語法將輸入的命令加以解釋并傳給系統(tǒng)。為用戶提供了一個向Linux發(fā)送請求以便運行程序的接口系統(tǒng)級程序,用戶可以用Shell來啟動、掛起、停止甚至是編寫一些程序。Shell本身是一個用C語言編寫的程序,它是用戶使用Linux的橋梁。Shellscript既是一種命令語言,又是一種程序設計語言(Shell腳本)。作為命令語言,它互動式地解釋和執(zhí)行用戶輸入的命令;作為程序設計語言,它定義了各種變量和參數(shù),并提供了許多在高階語言中才具有的控制結構,包括循環(huán)和分支。它雖然不是Linux系統(tǒng)內核的一部分,但它調用了系統(tǒng)內核的大部分功能來執(zhí)行程序、創(chuàng)建文檔并以并行的方式協(xié)調各個程序的運行。

Shellscript編寫規(guī)則1.命令的執(zhí)行順序:從上而下,自左向右。2.命令、選項、參數(shù)間的多個空格都會被忽略掉。3.空白行也將被忽略掉,按tab鍵所生成的空白也會被忽略掉。4.如果讀取到一個Enter符號,就嘗試開始執(zhí)行該行命令。5.如果一行的內容太多,可以使用“[Enter]”來擴展到下一行。6."#"符號作為注釋,#后面的字符將被視為注釋被忽略掉,不會被執(zhí)行。Shellscript文件以sh(代表Shell)為擴展名,并且必須賦予可執(zhí)行權限。擴展名并不影響腳本執(zhí)行,如果使用php語言寫Shell腳本,可以使用php做擴展名。

編寫helloworld

腳本在LX終端打開文件編輯器,新建一個文件test.sh:sudonanotest.sh在test.sh文件中輸入如下內容:#!/bin/bash#Program:shows"Helloworld"inscreen.#Version1.0#History:Thisismyfirstscript#2022/10/27DZHFirstreleaseecho"HelloWorld!"exit0

良好的編寫習慣建議養(yǎng)成良好的script撰寫習慣,在每個script的文件頭處還應該包含如下內容:script的功能;script的版本信息;script的作者與聯(lián)絡方式;script的版權宣告方式;script的歷史紀錄;script內較特殊的指令,使用絕對路徑的方式來記錄;script運行時需要的環(huán)境變量相關信息的記錄和說明。

Script的執(zhí)行方法一般有以下兩種方法可以執(zhí)行sh腳本文件:1.直接指令下達絕對路徑:工作目錄隨意,可以使用絕對路徑/home/pi/myshell.sh來執(zhí)行;相對路徑:假設工作目錄在/home/pi/,則使用相對路徑./myshell.sh來執(zhí)行;變量PATH功能:將myshell.sh放在PATH指定的目錄內,直接使用myshell.sh來執(zhí)行。2.以bash程序來執(zhí)行直接使用bash或sh來執(zhí)行腳本,命令參數(shù)就是Shell腳本的文件名,這種方式,不需要在第一行指定解釋器信息#!/bin/bash:bashmyshell.shshmyshell.sh

單行注釋以#開頭的程序行就是注釋,#后的同一行內容會被解釋器忽略,可以通過每一行加一個#號設置多行注釋#####用戶配置區(qū)開始########這里可以添加腳本描述信息#######用戶配置區(qū)結束

#####

多行注釋多行注釋還可以使用以下格式::<<EOF注釋內容...注釋內容...注釋內容...EOF

Shellecho命令Shell的echo指令與PHP語言的echo指令類似,都是用于字符串的輸出。命令格式為:echostring#string為字符串除了簡單格式,還可以使用echo實現(xiàn)更復雜的輸出格式控制。1.顯示普通字符串:echo"Itisatest"2.顯示轉義字符echo"\"Itisatest\""3.顯示輸入變量read命令從標準輸入中讀取一行,并把輸入行的每個字段的值指定給某個自定義Shell變量。新建一個test.sh文件,輸入以下代碼:#!/bin/shreadnameecho"$nameItisatest"4.顯示換行使用\n輸出換行,新建一個sh文件,輸入以下代碼:echo-e"OK!\n"#-e開啟轉義echo"Itisatest"

Shellecho命令5.顯示不換行使用\c輸出不換行,新建一個sh文件,輸入以下代碼:#!/bin/shecho-e"OK!\c"#-e開啟轉義\c不換行echo"Itisatest"6.顯示結果定向至文件使用>顯示結果定向至文件,新建一個sh文件,輸入以下代碼:echo"Itisatest">myfile7.原樣輸出字符串,不進行轉義或取變量使用'(單引號)原樣輸出字符串,不進行轉義或取變量,新建一個sh文件,輸入以下代碼:echo'$name\"'8.顯示命令執(zhí)行結果使用`(反引號,不是單引號')顯示命令執(zhí)行結果,例如顯示date命令的運行結果,建一個sh文件,輸入以下代碼:echo`date`

Shellprintf命令Printf命令使用引用文本或空格分隔的參數(shù),外面可以在printf中使用格式化字符串,還可以制定字符串的寬度、左右對齊方式等。printf命令的語法:printf格式控制字符串[參數(shù)列表]首先是使用printf的簡單方法如下:echo"Hello,Shell"$printf"Hello,Shell\n"接下來,學習使用一個腳本來體現(xiàn)printf命令的強大功能:#!/bin/bashprintf"%-10s%-8s%-4s\n"姓名性別體重kgprintf"%-10s%-8s%-4.2f\n"郭靖男66.1234printf"%-10s%-8s%-4.2f\n"楊過男48.6543printf"%-10s%-8s%-4.2f\n"郭芙女47.9876

printf的轉義序列序列說明\a警告字符,通常為ASCII的BEL字符\b退格\c不顯示輸出結果中任何結尾的換行字符(只在%b格式指示符控制下的參數(shù)字符串中有效),任何留在參數(shù)里的字符、任何接下來的參數(shù)以及任何留在格式字符串中的字符,都將被忽略\f換頁\n換行\(zhòng)r回車\t水平制表符\v垂直制表符\\反斜杠字符

Shell傳遞參數(shù)在執(zhí)行Shell腳本時,可以向腳本傳遞參數(shù)。腳本內獲取參數(shù)的格式一般為:$n。其中n代表一個數(shù)字,0為執(zhí)行包含文件路徑的文件名,1為執(zhí)行腳本的第一個參數(shù),2為執(zhí)行腳本的第二個參數(shù),后面的數(shù)字依次類推。

Shell傳遞參數(shù)首先需要記住幾個默認的變量可以用來處理參數(shù)參數(shù)處理說明$#代表后接的傳遞到腳本的參數(shù)個數(shù)$*以一個單字符串顯示所有向腳本傳遞的參數(shù)。如果"$*"用""括起來的情況,以"$1$2…$n"的形式輸出所有參數(shù)。$$腳本運行的當前進程ID號$!后臺運行的最后一個進程的ID號$@與$*作用相同,使用時加引號,并在引號中返回每個參數(shù)。如果"$@"用""括起來的情況,以"$1""$2"…"$n"的形式輸出所有參數(shù),其中每個變量都是獨立的。$-顯示Shell使用的當前選項,與set命令功能相同。$?顯示最后命令的退出狀態(tài)。0表示沒有錯誤,其他任何值表明有錯誤。

Shell傳遞參數(shù)例如我們向腳本test1.sh傳遞三個參數(shù),并分別輸入的代碼如下:#!/bin/bashecho"測試Shell傳遞參數(shù)";echo"執(zhí)行的文件名:$0";echo"第一個參數(shù):$1";echo"第二個參數(shù):$2";echo"第三個參數(shù):$3";exit0執(zhí)行腳本命令:sudochmod+xtest1.sh./test1.sh123

Shell變量在定義變量時,變量名前面不加美元符號$或者其他任何符號,變量名和等號之間不能有空格變量名的命名須遵循如下規(guī)則:(1)變量名只能使用英文字母,數(shù)字和下劃線,首個字符不能以數(shù)字開頭。(2)變量名中間不能有空格,可以使用下劃線_。(3)變量名不能使用標點符號。(4)變量名不能使用bash里的關鍵字。除了顯式地直接賦值,還可以用語句給變量賦值

使用變量使用一個定義過的變量,只要在變量名前面加美元符號$即可變量名外面的大括號是可選的,加大括號是為了幫助解釋器識別變量的邊界建議給所有變量加上大括號,這是個好的編程習慣已經(jīng)賦值過的變量,還可以重新賦予變量新的值

只讀變量使用readonly命令可以將變量定義為只讀變量,只讀變量的例如下面的例子嘗試更改只讀變量,結果會報錯:#!/bin/bashmyurl=""readonlymyurlmyurl="https://www."值不能被改變。

刪除變量使用unset命令可以刪除不是只讀的變量。語法:unset變量名變量被刪除后不能再次使用。例如刪除不是只讀的變量myurl:#!/bin/bashmyurl=""unsetmyurlecho$myurl代碼執(zhí)行后沒有任何輸出。

變量類型運行Shell的三種變量:局部變量:局部變量在腳本或命令中定義,僅在當前Shell實例中有效,其他Shell啟動的程序不能訪問局部變量。環(huán)境變量:所有的程序,包括Shell啟動的程序,都能訪問環(huán)境變量,有些程序需要環(huán)境變量來保證其正常運行。必要的時候Shell腳本也可以定義環(huán)境變量。Shell變量:Shell變量是由Shell程序設置的特殊變量。Shell變量中有一部分是環(huán)境變量,有一部分是局部變量,這些變量保證了Shell的正常運行。

Shell基本運算符Shell和其他編程語言一樣,支持多種運算符,包括:(1)算術運算符(2)關系運算符(3)布爾運算符(4)字符串運算符(5)文件測試運算符

算術運算符運算符說明舉例+加法`expr$a+$b`結果為30。-減法`expr$a-$b`結果為-10。*乘法`expr$a\*$b`結果為200。/除法`expr$b/$a`結果為2。%取余`expr$b%$a`結果為0。=賦值a=$b把變量b的值賦給a。==相等。比較兩個數(shù)字,相等返回true。[$a==$b]返回false。!=不相等。用于比較兩個數(shù)字,不相等返回true。[$a!=$b]返回true。

關系運算符運算符說明舉例-eq檢測兩個數(shù)是否相等,相等返回true。[$a-eq$b]返回false。-ne檢測兩個數(shù)是否不相等,不相等返回true。[$a-ne$b]返回true。-gt檢測左邊的數(shù)是否大于右邊的,如果是,則返回true。[$a-gt$b]返回false。-lt檢測左邊的數(shù)是否小于右邊的,如果是,則返回true。[$a-lt$b]返回true。-ge檢測左邊的數(shù)是否大于等于右邊的,如果是,則返回true。[$a-ge$b]返回false。-le檢測左邊的數(shù)是否小于等于右邊的,如果是,則返回true。[$a-le$b]返回true。

布爾運算符運算符說明舉例!非運算,表達式為true則返回false,否則返回true。[!false]返回true。-o或運算,有一個表達式為true則返回true。[$a-lt20-o$b-gt100]返回true。-a與運算,兩個表達式都為true才返回true。[$a-lt20-a$b-gt100]返回false。

邏輯運算符運算符說明舉例&&邏輯AND[[$a-lt100&&$b-gt100]]返回false||邏輯OR[[$a-lt100||$b-gt100]]返回true

字符串運算符運算符說明舉例=檢測兩個字符串是否相等,相等返回true。[$a=$b]返回false。!=檢測兩個字符串是否不相等,不相等返回true。[$a!=$b]返回true。-z檢測字符串長度是否為0,為0返回true。[-z$a]返回false。-n檢測字符串長度是否不為0,不為0返回true。[-n"$a"]返回true。$檢測字符串是否不為空,不為空返回true。[$a]返回true。

文件測試運算符運算符說明舉例-bfile檢測文件是否是塊設備文件,如果是則返回true。[-b$file]返回false。-cfile檢測文件是否是字符設備文件,如果是則返回true。[-c$file]返回false。-dfile檢測文件是否是目錄,如果是則返回true。[-d$file]返回false。-ffile檢測文件是否是普通文件(既不是目錄,也不是設備文件),如果是則返回true。[-f$file]返回true。-gfile檢測文件是否設置了SGID位,如果是則返回true。[-g$file]返回false。-kfile檢測文件是否設置了粘著位(StickyBit),如果是則返回true。[-k$file]返回false。-pfile檢測文件是否是有名管道,如果是則返回true。[-p$file]返回false。-ufile檢測文件是否設置了SUID位,如果是則返回true。[-u$file]返回false。-rfile檢測文件是否可讀,如果是則返回true。[-r$file]返回true。-wfile檢測文件是否可寫,如果是則返回true。[-w$file]返回true。-xfile檢測文件是否可執(zhí)行,如果是,則返回true。[-x$file]返回true。-sfile檢測文件是否為空(文件大小是否大于0),不為空返回true。[-s$file]返回true。-efile檢測文件(包括目錄)是否存在,如果是則返回true。[-e$file]返回true。

Shell流程控制Shellscript也有if語句,只不過它們在形式上有所區(qū)別,在功能上完全一樣。和其他程序設計語言不同,sh的流程控制不可為空,例如PHP語言中流程控制代碼如下:<?phpif(isset($_GET["q"])){

search(q);}else{

//空語句}在sh/bash里不能這樣編寫,如果else分支沒有語句執(zhí)行,那就不要寫這個else語句。

ifthenfiifthenfi語句

語法格式:ifconditionthencommand1command2...commandNfi

末尾的fi就是if倒過來的拼寫,表示if語句的結束。整個語句可以在終端命令提示符后寫成一行:if[$(ps-ef|grep-c"ssh")-gt1];thenecho"true";fi當有多個條件要判別時,除了可以將多個條件寫入一個中括號內的情況之外,還可以使用多個中括號,此時每個中括號內只寫入一個判斷式:["$yn"=="Y"-o"$yn"=="y"]可以被替換為["$yn"=="Y"]||["$yn"=="y"]

ifthenelsefiifthenelsefi語句語法

格式:ifconditionthencommand1command2...commandNelsecommandfi

ifthenelifthenelsefiifthenelifthenelsefi語句語法

格式:ifcondition1thencommand1elifcondition2thencommand2elsecommandNfi

fordodoneShellscript支持for循環(huán)

。for循環(huán)有兩種語法,第一種主要用于非數(shù)值處理,第二種主要用于數(shù)值處理,第二種類似于c語言里邊的for循環(huán)。

for循環(huán)第一種格式為:forvarinitem1item2...itemNdocommand1command2...commandNdone可以在終端命令提示符后寫成一行:forvarinitem1item2...itemN;docommand1;command2…done;

whiledodonewhile循環(huán)

用于不斷執(zhí)行一系列命令,也用于從輸入文件中讀取數(shù)據(jù)。其語法格式為:

whileconditiondocommanddone

當condition條件成立時,就進行循環(huán),直到condition的條件不成立才停止。

無限循環(huán)無限循環(huán)語法格式:while:docommanddone或者whiletruedocommanddone或者for((;;))

untildodoneuntil循環(huán)執(zhí)行一系列命令直至條件為true時停止。until循環(huán)與while循環(huán)在處理方式上剛好相反。一般while循環(huán)優(yōu)于until循環(huán),但在某些時候—也只是極少數(shù)情況下,until循環(huán)更加有用。until

循環(huán)語法格式:untilconditiondocommanddonecondition一般為條件表達式,如果返回值為false,則繼續(xù)執(zhí)行循環(huán)體內的語句,否則跳出循環(huán)。

case...esaccase...esac為多選擇語句,一般稱它為開關語句,功能上與其他語言中的switch..case語句類似可以用case語句匹配一個值與一個模式,如果匹配成功,執(zhí)行相匹配的命令。case...esac語法格式如下:case$值in模式1)command1command2...commandN;;模式2)command1command2...commandN;;*)exit1;esac

跳出循環(huán)在循環(huán)過程中,有時候需要在未達到循環(huán)結束條件時強制跳出循環(huán),Shell使用兩個命令來實現(xiàn)該功能:break命令和continue命令。break命令允許跳出所有循環(huán)(終止執(zhí)行后面的所有循環(huán))。continue命令與break命令類似,只有一點差別,它不會跳出所有循環(huán),僅僅跳出當前循環(huán)。

Shell字符串字符串是Shell編程中最常用的數(shù)據(jù)類型,字符串可以用單引號,也可以用雙引號,也可以不用引號。1.單引號2.雙引號3.拼接字符串4.獲取字符串長度5.提取子字符串6.查找子字符串

Shell數(shù)組BashShell只支持一維數(shù)組,數(shù)組中可以存放多個值,并且沒有限定數(shù)組的大小,初始化時不需要定義數(shù)組大小,但不支持多維數(shù)組。數(shù)組元素的下標由0開始編號。獲取數(shù)組中的元素要利用下標,下標可以是整數(shù)或算術表達式,其值應是大于或等于0的整數(shù)。

定義數(shù)組在Shell中,用括號來表示數(shù)組,數(shù)組元素用"空格"符號分割開。定義數(shù)組的一般形式為:數(shù)組名=(值1值2...值n)array_name=(value1value2...valuen)例如:array_name=(value0value1value2value3)

讀取數(shù)組讀取數(shù)組元素值的一般格式是:${數(shù)組名[下標]}${array_name[index]}例如:valuen=${array_name[n]}

獲取數(shù)組的長度獲取數(shù)組長度的方法與獲取字符串長度的方法相同例如:#取得數(shù)組元素的個數(shù)length=${#array_name[@]}#或者length=${#array_name[*]}#取得數(shù)組單個元素的長度lengthn=${#array_name[n]}

關聯(lián)數(shù)組Bash支持關聯(lián)數(shù)組,可以使用任意的字符串、或者整數(shù)作為下標來訪問數(shù)組元素。關聯(lián)數(shù)組使用declare命令來聲明,語法格式如下:declare-Aarray_name選項-A就是用于聲明一個關聯(lián)數(shù)組。關聯(lián)數(shù)組的鍵是唯一的。

實例:創(chuàng)建一個關聯(lián)數(shù)組site,并創(chuàng)建不同的鍵值:declare-Asite=(["google"]=""["baidu"]=""["huawei"]="")

獲取數(shù)組中的所有元素使用@或*可以獲取數(shù)組中的所有元素,例如:#!/bin/bashmy_array[0]=Amy_array[1]=Bmy_array[2]=Cmy_array[3]=Decho"數(shù)組的元素為:${my_array[*]}"echo"數(shù)組的元素為:${my_array[@]}"

Shell函數(shù)Shell函數(shù)的功能是將一連串的命令打包起來,優(yōu)點是簡化了程序,增加Shell腳本的可移植性,便于維護腳本,還可以用Shell函數(shù)的功能自定義一些命令行模式下使用的命令。

定義和調用函數(shù)Shell可以用戶自定義函數(shù),然后在Shell腳本中可以調用它。在這里沒有返回值和參數(shù)列表而已,雖然沒有參數(shù)列表,但是可以傳遞參數(shù)。Shell中函數(shù)的定義格式如下:[function]funname[()]{

action;

[returnint;]}

函數(shù)參數(shù)在Shell中,調用函數(shù)時可以向其傳遞參數(shù)。在函數(shù)體內部,通過$n的形式來獲取參數(shù)的值,例如,$1表示第一個參數(shù),$2表示第二個參數(shù)...帶參數(shù)的函數(shù)示例:#!/bin/bashfunWithParam(){

echo"第一個參數(shù)為$1!"

echo"第二個參數(shù)為$2!"

echo"第十個參數(shù)為$10!"

echo"第十個參數(shù)為${10}!"

echo"第十一個參數(shù)為${11}!"

echo"參數(shù)總數(shù)有$#個!"

echo"作為一個字符串輸出所有參數(shù)$*!"}

處理參數(shù)的特殊字符參數(shù)處理說明$#傳遞到腳本或函數(shù)的參數(shù)個數(shù)$*以一個單字符串顯示所有向腳本傳遞的參數(shù)$$腳本運行的當前進程ID號$!后臺運行的最后一個進程的ID號$@與$*相同,但是使用時加引號,并在引號中返回每個參數(shù)。$-顯示Shell使用的當前選項,與set命令功能相同。$?顯示最后命令的退出狀態(tài)。0表示沒有錯誤,其他任何值表明有錯誤。

Shell輸入/輸出重定向大多數(shù)UNIX系統(tǒng)命令從你的終端接受輸入并將所產(chǎn)生的輸出發(fā)送回??到您的終端。一個命令通常從一個叫標準輸入的地方讀取輸入。一個命令通常將其輸出寫入到標準輸出。

重定向命令命令說明command>file將輸出重定向到file。command<file將輸入重定向到file。command>>file將輸出以追加的方式重定向到file。n>file將文件描述符為n的文件重定向到file。n>>file將文件描述符為n的文件以追加的方式重定向到file。n>&m將輸出文件m和n合并。n<&m將輸入文件m和n合并。<<tag將開始標記tag和結束標記tag之間的內容作為輸入。

輸出重定向重定向一般通過在命令間插入特定的符號來實現(xiàn)。語法如下所示:command1>file1上面這個命令執(zhí)行command1然后將輸出的內容存入file1。注意:任何file1內的已經(jīng)存在的內容將被新內容替代。如果要將新內容添加在文件末尾,請使用>>操作符。

輸入重定向和輸出重定向一樣,Unix命令也可以從文件獲取輸入,語法為:command1<file1這樣,本來需要從鍵盤獲取輸入的命令會轉移到文件讀取內容。注意:輸出重定向是大于號(>),輸入重定向是小于號(<)。

重定向深入講解一般情況下,每個Unix/Linux命令運行時都會打開三個文件:標準輸入文件(stdin):stdin的文件描述符為0,Unix程序默認從stdin讀取數(shù)據(jù)。標準輸出文件(stdout):stdout的文件描述符為1,Unix程序默認向stdout輸出數(shù)據(jù)。標準錯誤文件(stderr):stderr的文件描述符為2,Unix程序會向stderr流中寫入錯誤信息。默認情況下,command>file將stdout重定向到file,command<file將stdin重定向到file。

HereDocumentHereDocument是Shell中的一種特殊的重定向方式,用來將輸入重定向到一個交互式Shell腳本或程序。它的基本的形式如下:command<<delimiterdocumentdelimiter它的作用是將兩個delimiter之間的內容(document)作為輸入傳遞給command。注意:開始的delimiter前后的空格會被忽略掉。結尾的delimiter一定要頂格寫,前面不能有任何字符,后面也不能有任何字符,包括空格和tab縮進。

/dev/null文件如果希望執(zhí)行某個命令,但又不希望在屏幕上顯示輸出結果,那么可以將輸出重定向到/dev/null:command>/dev/null/dev/null是一個特殊的文件,寫入到它的內容都會被丟棄;如果嘗試從該文件讀取內容,那么什么也讀不到。但是/dev/null文件非常有用,將命令的輸出重定向到它,會起到"禁止輸出"的效果。

Shelltest命令Shell中的test命令用于檢查某個條件是否成立,它可以進行數(shù)值、字符和文件三個方面的測試。

數(shù)值測試參數(shù)說明-eq等于則為真-ne不等于則為真-gt大于則為真-ge大于等于則為真-lt小于則為真-le小于等于則為真

字符串測試參數(shù)說明=等于則為真!=不相等則為真-z字符串字符串的長度為零則為真-n字符串字符串的長度不為零則為真

文件測試參數(shù)說明-e文件名如果文件存在則為真-r文件名如果文件存在且可讀則為真-w文件名如果文件存在且可寫則為真-x文件名如果文件存在且可執(zhí)行則為真-s文件名如果文件存在且至少有一個字符則為真-d文件名如果文件存在且為目錄則為真-f文件名如果文件存在且為普通文件則為真-c文件名如果文件存在且為字符型特殊文件則為真-b文件名如果文件存在且為塊特殊文件則為真文件名1-nt文件名2判斷文件名1是否比文件名2新文件名1-ef文件名2判斷文件名1與文件名2是否為同一個文件,主要用于hardlink文件名1-lt文件名2判斷文件名1小于等于n2則為真-o任何一個條件成立!類似||(或)-a兩個條件同時成立!類似&&(與)-z字符串判斷字符串是否為空,若字符串為空則為真!反向狀態(tài),如test!-xfile,當file不具有-x時則為真

Shell判斷符[]判斷符[]的功能主要是用來進行數(shù)據(jù)的判斷和字符串的判別。在Shellscript中,具有判斷功能的命令不僅僅只有test命令,還有中括號[],用法與test一模一樣,只是需要注意以下幾點:(1)在中括號[]內的每個組件都需要有空格鍵來分隔。

(2)在中括號[]內的變量,最好都以雙引號括號起來。

(3)在中括號[]內的常量,最好都以單或雙引號括號起來,否則會出現(xiàn)參數(shù)太多的錯誤。原因是翻譯過來就是這樣的,[helloworld==“hello”],中括號[]判定式只能有兩個參數(shù),所以發(fā)生錯誤了。正確的寫法應該是:[“$name”==“hello”](4)test和[]中,==和!=只能用于比較字符串,而且結果為真時,返回1,結果為假時,返回0。

判斷符[]一些常用的選項命令選項說明[-z"$HOME"]判斷HOME變量是否為空["$HOME"=="$var"]判斷兩個變量是否相等["$HOME"=="string"]判斷變量的內容是否為string

Shellscript的追蹤與調試sh命令或bash命令是Shell命令語言解釋器,執(zhí)行命令從標準輸入讀取或從一個文件中讀取。通過用戶輸入命令,和內核進行溝通,可以用來追蹤和調試Shell腳本,根據(jù)sh命令的選項可以追蹤和調試程序。bash是自由軟件基金會開發(fā)的一個Shell,它是Linux系統(tǒng)中一個默認的Shell。Bash不但與BourneShell兼容,還繼承了CShell、KornShell等優(yōu)點。

常用的bash命令和sh命令選項sh[選項]文件名-n:不要執(zhí)行腳本,僅查詢語法的問題-v:在執(zhí)行腳本前,先將腳本的內容打印到屏幕上-x:將使用到腳本打印到屏幕上。-c:命令從-c后的字符串讀取-i:實現(xiàn)腳本交互

bash[選項]文件名-n為不執(zhí)行script,僅查詢語法的問題;-x為將使用到的script執(zhí)行過程內容顯示到屏幕上

Shell文件包含和其他語言一樣,Shell也可以包含外部腳本。這樣可以很方便的封裝一些公用的代碼作為一個獨立的文件。Shell文件包含的語法格式如下:.filename#注意點號(.)和文件名中間有一空格或sourcefilename

Shellscript實例交互式腳本:變量內容由用戶決定題目:請你以read命令的用途,編寫一個script,它可以讓用戶輸入firstname與lastname,最后并且在屏幕上顯示“Yourfullnameis:”的內容。

#!/bin/bashread-p"Pleaseinputyourfirstname:"firstnameread-p"Pleaseinputyourlastname:"lastnameecho"Yourfullnameis:$firstname$lastname"exit0

Shellscript實例用日期命名文件:利用日期進行文件的創(chuàng)建題目:我希望將每天的數(shù)據(jù)備份在不同的文件里,所以就需要以每天的日期作為文件名。關鍵是日期怎么來!假設我要創(chuàng)建3個空的文件,文件名最開頭由用戶決定(我們假設是filename),那今天的日期是2017/9/30,我想以前天、昨天、今天的日期來創(chuàng)建這些文件,即filename20170928,filename20170929,dilename20170930,該如何是好?

#!bin/bashecho"Iwilluse'touch'tocreatethreefiles."read-p"Pleaseinputyourfilename:"fileuser#開始判斷是否存在配置文件名,防止用戶隨意按[Enter],默認開頭為filenamefilename=${fileuser:-"filename"}date1=$(date--date='2daysago'+%Y%m%d)#兩天前的日期date2=$(date--date='1daysago'+%Y%m%d)date3=$(date+%Y%m%d)#當天的日期file1=${filename}${date1}#追加的方式配置文件名file2=${filename}${date2}file3=${filename}${date3}touch"$file1"#防止有空格touch"$file2"touch"$file3"exit0

修改SSH登錄信息希望每次SSH登錄到樹莓派時,能夠出現(xiàn)一些歡迎信息和可以顯示系統(tǒng)狀態(tài)的信息,包括CPU溫度與用量,內存和硬盤占有率信息等。一般情況下,設置樹莓派登錄歡迎信息的文件有兩處:1.位于/etc/update-motd.d/目錄下的Shell腳本2.上述腳本執(zhí)行完畢后打印/etc/motd文本

我們使用nano編輯器新建登錄后歡迎信息的腳本:sudonano/etc/updat

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論