Note For Linux By Jes(7)-学习 shell scripts
簡單的shellscript 練習:
script 的運行方式差異(source, sh script, ./script)
利用直接運行的方式來運行script
利用source 來運行腳本:在父程序中運行
善用判斷式:
利用test 命令的測試功能
| 測試的標志 | 代表意義 |
| 1. 關於某個檔名的『文件類型』判斷,如test -e filename 表示存在否 | |
| -e | 該『檔名』是否存在?(常用) |
| -f | 該『檔名』是否存在且為文件(file)?(常用) |
| -d | 該『檔名』是否存在且為目錄(directory)?(常用) |
| -b | 該『檔名』是否存在且為一個block device 裝置? |
| -c | 該『檔名』是否存在且為一個character device 裝置? |
| -S | 該『檔名』是否存在且為一個Socket 文件? |
| -p | 該『檔名』是否存在且為一個FIFO (pipe) 文件? |
| -L | 該『檔名』是否存在且為一個連結檔? |
| 2. 關於文件的權限偵測,如test -r filename 表示可讀否(但root 權限常有例外) | |
| -r | 偵測該檔名是否存在且具有『可讀』的權限? |
| -w | 偵測該檔名是否存在且具有『可寫』的權限? |
| -x | 偵測該檔名是否存在且具有『可運行』的權限? |
| -u | 偵測該檔名是否存在且具有『SUID』的屬性? |
| -g | 偵測該檔名是否存在且具有『SGID』的屬性? |
| -k | 偵測該檔名是否存在且具有『Stickybit』的屬性? |
| -s | 偵測該檔名是否存在且為『非空白文件』? |
| 3. 兩個文件之間的比較,如:test file1 -nt file2 | |
| -nt | (newer than)判斷file1 是否比file2 新 |
| -ot | (older than)判斷file1 是否比file2 舊 |
| -ef | 判斷file1 與file2 是否為同一文件,可用在判斷hard link 的判定上。主要意義在判定,兩個文件是否均指向同一個 inode哩! |
| 4. 關於兩個整數之間的判定,例如test n1 -eq n2 | |
| -eq | 兩數值相等(equal) |
| -ne | 兩數值不等(not equal) |
| -gt | n1 大於n2 (greater than) |
| -lt | n1 小於n2 (less than) |
| -ge | n1 大於等於n2 (greater than or equal) |
| -le | n1 小於等於n2 (less than or equal) |
| 5. 判定字串的數據 | |
| test -z string | 判定字串是否為0 ?若string 為空字串,則為true |
| test -n string | 判定字串是否非為0 ?若string 為空字串,則為false。 |
| test str1 = str2 | 判定str1 是否等於str2 ,若相等,則回傳true |
| test str1 != str2 | 判定str1 是否不等於str2 ,若相等,則回傳false |
| 6. 多重條件判定,例如:test -r filename -a -x filename | |
| -a | (and)兩狀況同時成立!例如test -r file -a -x file,則file 同時具有r 與x 權限時,才回傳true。 |
| -o | (or)兩狀況任何一個成立!例如test -r file -o -x file,則file 具有r 或x 權限時,就可回傳true。 |
| ! | 反相狀態,如test ! -x file ,當file 不具有x 時,回傳true |
利用判斷符號[ ]
Shell script 的默認變量($0,$1…)
/path/to/scriptname opt1 opt2 opt3 opt4 $0 $1 $2 $3 $4$# :代表后接的參數『個數』,以上表為例這里顯示為『4 』;
-
$@ :代表『"$1""$2" "$3" "$4" 』之意,每個變量是獨立的(用雙引號括起來);
-
$* :代表『"$1c$2c$3c$4"』,其中c為分隔字節,默認為空白鍵,所以本例中代表『 "$1$2 $3 $4" 』之意。
shift:造成參數變量號碼偏移
條件判斷式:
利用if .... then
利用 case ..... esac 判斷 利用 function 功能:function 也是擁有內建變量的~他的內建變量與 shell script 很類似, 函數名稱代表示 $0 ,而后續接的變量也是以 $1, $2... 來取代的回圈 (loop): while do done, until do done (不定回圈)for...do...done (固定回圈)
for...do...done 的數值處理:
for (( 初始值; 限制值; 運行步階 )) do程序段 done
shellscript 的追蹤與debug:
sh -x
總結
以上是生活随笔為你收集整理的Note For Linux By Jes(7)-学习 shell scripts的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机机房必须用七氟丙烷灭火器吗,释放七
- 下一篇: linux 其他常用命令