您好,登錄后才能下訂單哦!
編程語言包括問題空間和解空間 ,問題空間就是使用人類的自然語言描述的任務,解空間就是使用編程語言描述任務的實施步驟和顯示的最終結果。
編程思想,就是能夠把編程語言所提供的語法格式,隨時隨地的轉換成解決問題的思路。我們學習編程語言的目的就是將目的空間和解空間對應起來,最直接的辦法就是使用解空間的語言習慣來進行思考。
對于編程語言的學習的步驟:1、學習編程語言的語法格式;2、學習工具的使用(庫、命令);3、算法;4、數據結構
shell腳本編程:
shell腳本的內容和格式:首行、絕對行首、shebang(解釋器程序的絕對路徑)、注釋信息(以#占據絕對行首的行)。為了能夠在程序中突出程序的功能,應適當的添加空白行,以分隔不同的源代碼類;應該有適當的縮進
利用bash腳本編程實現算術運算:+ - * / % **或^ ;增強型的算術表達式為:+= -= *= /= %= ++ --
%為模運算,取余數。
算術運算方法:
1、let VAR=算術表達式
let將算術表達式先進行算術運算,并將運算得到的結果保存到變量VAR中。
2、VAR=$[算術表達式]
${}引用變量,算術表達式中如果有變量引用,可以使用$引用,也可以省略$,例如:SUM=$[C+B]或SUM=$[$C+$B]
3、VAR=$((算術表達式))
算術表達式中如果有變量引用,可以使用$引用,也可以省略$
4、expr ARGU1 ARGU2 ARGU3
ARGU1和ARGU3必須是數值,ARGU2必須是運算符號
5、echo "算術表達式"|bc
注意:*號在某些情況下需要轉義, shell 通常要在子 shell 中運行括號中的表達式,所以需要用 \( 和 \) 轉義括號,或者把這些操作符括在單引號或雙引號內。
bash中的弱變量,是弱類型的變量,默認是字符型的,數值型中不包括浮點型
例如:# let x=2 y=2**3 z=y*3;echo $? $x $y $z 運行結果為:0 2 8 24
# [[ ( -d "$HOME" ) && ( -w "$HOME" ) ]] && > echo "home is a writable directory" 運行結果為:home is a writable directory
# echo $['grep -c "^r" /etc/passwd'+'grep -c "^r" /etc/issue'+'grep -c "^r" /etc/fstab']
# cat /etc/passwd /etc/issue /etc/fstab | grep -c "^r"
# grep -c "^r" /etc/passwd /etc/issue /etc/fstab
條件測試命令:
test EXPRESSION:shell內建命令
[ EXPRESSION ]:外部命令[:(注意兩邊的空格)
` EXPRESSSION `:bash的內部關鍵字
注意:這類命令一般沒有執行結果,只有執行狀態返回值;test命令有三類測試表達式,分別為數值測試、字符串測試、文件狀態測試,解釋如下:
1、數值測試:雙目操作符
-eq:測試是否被測試的兩個數值是否相等,相等為真,不等為假
-ne:被測試的兩個數值是否相等,不等為真,相等為假
-gt:被測試的兩個數值,左邊的是否大于右邊的,大于為真,不大于為假
-lt:被測試的兩個數值,左邊的是否小于右邊的,小于為真,不小于為假
-ge:被測試的兩個數值,左邊的是否大于等于右邊的,大于等于為真,小于為假
-le:被測試的兩個數值,左邊的是否小于等于右邊的,小于等于為真,大于為假
例如:顯示~/aaa的大小是否小于1000字節
# [ $(ls -l aaa | awk '{print $5}') -lt 1000 ]&& echo ok ||echo "no ok"
# test [ 3 -gt 4 ] && echo True || echo false :判斷左邊的是否大于右邊的,大于為真,不大于為假
# [ "abc" != "def" ];echo $? :用 [ ] 的形式比較兩個字符串不相等
# test -d "$HOME" ;echo $? :測試 HOME 變量的值,用單目操作符 -d 檢查它是不是目錄
字母數值比較:
# test "abc" = "def" ;echo $?
1
# [ "abc" != "def" ];echo $?
0
# [ "abc" \< "def" ];echo $?
0
# [ "abc" \> "def" ];echo $?
1
# [ "abc" \<"abc" ];echo $?
1
# [ "abc" \> "abc" ];echo $?
1
2、字符串測試
雙目操作符:==|=:被測試的兩個字符串是否相同,相同為真,不同為假
!=:被測試的兩個字符串是否不相同,不同為真,相同為假
>:被測試的兩個字符串在ASCII碼表中,對應的二進制數值,左邊是否大于右邊,大于為真,小于為假
<:被測試的兩個字符串在ASCII碼表中,對應的二進制數值,左邊是否小于右邊,小于為真,小于為假
注意:>和<必須用在` EXPRESSSION `測試語句中
=~:被測試的兩個字符串,左側字符串是否能被右側的PATTERN匹配,能匹配為真,不能匹配為假
單目操作符:-z 'STRING':判斷指定的字符串是否為空串,空為真,不空為假
-n 'STRING':判斷指定的字符串是否為非空串,非空為真,空為假
注意:1、通常情況下,字符串要加引號,單引號或雙引號都行,根據實際情況選擇即可
2、[[]]和[]在某些情況下,可能意義不同,要區分使用
3、表達式的兩端或操作符的兩端都要有空格
3、文件狀態測試:文件存在性測試,如果被測的文件存在為真,不存在為假
-a|-e 例如:[ -e /backup ]
文件類型測試的單目運算符如下(先測試存在性):
-b FILE:被測試的文件是否存在,并且是否為塊設備,存在且是塊設備為真,否則為假
-c FILE:被測試的文件是否存在,并且是否為字符設備
-d FILE:被測試的文件是否存在,并且是否為目錄文件
-f FILE:被測試的文件是否存在,并且是否為普通文件
-h|-L FILE:被測試的文件是否存在,并且是否為符號鏈接文件
-p FILE:被測試的文件是否存在,并且是否為管道文件
-S FILE:被測試的文件是否存在,并且是否為套接字文件
文件的訪問權限測試:
-r FILE: 被測試的文件是否存在,并且當前有效用戶是否可讀,文件存在并且當前有效用戶可讀為真,否則為假
-w FILE:被測試的文件是否存在,并且當前有效用戶是否可寫
-x FILE:被測試的文件是否存在,并且當前有效用戶是否可執行
文件的特殊文件標識測試:
-u FILE:被測試的文件是否存在,并且是否設置了SUID權限,文件存在并且設置了SUID權限為真,否則為假
-o FILE:被測試的文件是否存在,并且是否設置了SGID權限
-g FILE:被測試的文件是否存在,并且是否設置了STICKY權限
文件的所有權測試:
-O FILE:被測試的文件是否存在,并且其屬主是否為當前有效用戶
-G FILE:被測試的文件是否存在,并且其屬組是否為當前有效用戶的組
文件內容是否為空:
-s FILE:被測試的文件是否存在,且內容不為空,存在且內容不為空為真,否則為假
時間戳測試:
-N FILE:被測試的文件自從上一次被修改后,是否被修改過
文件類型測試的雙目測試:
FILE1 -ef FILE2:測試兩個文件是否指向同一個文件系統的相同inode的硬鏈接
FILE1 -nt FILE2:被測試的兩個文件,FILE1是否比FILE2更新
FILE1 -ot FILE2:被測試的兩個文件,FILE1是否比FILE2更舊
測試語句中可以添加邏輯運算,兩種表達方式如下:
第一種表達方式:[ -O /tmp/test ]&&[ -s /tmp/test ]
[ -O /tmp/test ]||[ -s /tmp/test ]
第二種表達方式:[ -O /tmp/test -a -s /tmp/test ]
[ -O /tmp/test -o -s /tmp/test ]
[ ! -O /tmp/test ]
exit [#]:退出當前shell的登錄。當shell腳本運行時,一旦遇到exit命令,將立即結束當前shell進程,同時腳本的運行也將被停止,即exit的所有命令都不再被解釋執行。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。