1. 程式人生 > >3、文件測試和bash中的變量類型+shift用法

3、文件測試和bash中的變量類型+shift用法

文件測試 變量類型 shell

文件測試和bash中的變量類型
exit(可以提前結束腳本的命令)
exit:退出腳本進程
那我們說,任何一個命令執行完了,都會有一個執行結果和執行狀態結果.
exit除了可以退出腳本不執行後面的語句之後,還可以用來定義執行狀態結果是什麽的?(正確或者錯誤)我們完全可以自定義
自定義:
0表示正確
1-255表示錯誤
只要你的腳本遇到exit命令,就直接退出腳本,不會再執行後面的命令了,如果exit沒有定義,也就是後面為空,就返回的執行狀態結果為最後執行那一條命令的狀態返回結果。
技術分享圖片

第一種是:
1.整數測試:(一般是雙目操作)
-gt大於
-le小於等於
-ne不等於
-eq等於
-ge大於等於

-lt小於等於
使用了上面的話,就必須要加中括號了
只有在使用上面的整數測試的比較值的時候,才會加中括號
bash中常用的條件測試有三種:
測試方法:
[ experssion ] 命令測試法:bash的命令
[[ experssion ]] 關鍵字測試法:bash的關鍵字
test expression
實例如下截圖
技術分享圖片

if默認後面的就是一個判斷是真或者是假,如果是0就是真,非0就是假,所以要學會用,如果你後面給的是一個執行結果的話,那樣是不正確的方式

2.文件測試(這個也需要加中括號的)
測試文件是否存在
-e FILE:測試文件是否存在
-f File:測試文件是否為普通文件
-d FILE:測試路徑是否為目錄

-r FILE:測試當前用戶對指定文件是否有讀取權限:
-w FILE:測試當前用戶對測試文件是否用執行權限;
-x FILE:測試當前用戶對測試文件是否用執行權限;
技術分享圖片

用法:

技術分享圖片

如果文件存在,就是為真.
而!就是為假,整個條件就是假,就不執行條件內的了
技術分享圖片

圓整:意思為丟棄小數點後的內容
技術分享圖片

技術分享圖片

之前說了if兩種條件語句
當然會有雙分支不能滿足的,所以就會有多分支的if語句
技術分享圖片

bash有一個專門測試腳本是否有語法錯誤
bash -n filetest.sh 這樣來測試
測試結果不能作為一個依據,只是一個模糊;因為測試通過了只是說語法沒有錯誤,但是內容或者邏輯可能有錯誤
bash -x filetest.sh 可以明確清楚的看到腳本的信息每一行是否出現錯誤(後期我們這裏經常會用到,-x是會執行腳本的)

是執行的命令才會顯示出來(+代表的是執行的語句;如下所示),不是整個腳本文件的,比如我exit之後,用-x就看不到exit後面的,因為她都執行不了後面的命令
技術分享圖片
練習
技術分享圖片

技術分享圖片
技術分享圖片

馬哥寫的是下面這個
技術分享圖片

技術分享圖片

意思是exit沒有指定狀態碼,像沒有指定0,1-255 ,他就會根據腳本最後一條命令確定退出的狀態碼的
bash變量的類型
作用域
本地變量(比本地變量還要小的:局部變量):本shell
環境變量:本shell和子shell
位置變量:$1,$2...
特殊變量:$?

如果在腳本中引用作用對象,其實,位置變量就是幹這個事情的
位置變量
技術分享圖片

技術分享圖片

這裏的$1,可以用命令來傳遞給他

特殊變量:
$?:上一條命令的退出狀態碼
$#:參數的個數(如果必須讓腳本後面加參數,就可以用這個$#來判斷)
[ $# -gt 0 ] && echo "the shell is not need parameter" && exit 1

$ :參數列表(腳本文件後面的參數列出來)
$@ :列出參數的列表(和$
還是有區別的)

技術分享圖片

我們還有一個和位置變量一起來使用的,叫shift
shift(輪換,輪替的)
每一次shift就可以T剔出去一個$(默認是剔除一個的)
+n就可以T出n個$ ------------這就是輪替
避免一個shell腳本中多個位置變量,可以T出去,重復利用$但是又實現不是同一個參數

技術分享圖片技術分享圖片

練習2
技術分享圖片技術分享圖片

3、文件測試和bash中的變量類型+shift用法