Shell里的测试条件
来源:互联网 发布:软件在线升级原理 编辑:程序博客网 时间:2024/05/17 08:07
測試條件
在Bourne shell的內部命令裡面有測試條件的語法test給if while用
test condition
或者
[ condition ]
為了與autoconf不要混淆,programmer比較喜歡用test 不用中括號condition的方法。括號的用法請注意空格(这里容易出错哦)。 例如
檔案測試條件
test -f /etc/file 檔案是個一般檔案不是其他特殊檔案嗎
[ -e file ] 檔案存在嗎
[ -d /etc/ ] 目錄存在嗎
[ -s file ] 檔案大小大於0嗎
[ -r file ] 檔案可讀嗎
[ -b file ] 区块文件
[ -c file ] 字符文件
[ -f file ] 一般文件
[ -w file ] 文件可写吗
[ -x file ] 文件可执行吗
[ -k file ] 设定了限定位
[ -g file ] 设定了组位
[ -u file ] 设定了user id
[ -p file ] 管线
字串測試條件
[ "$string" ] string有東西就返回true
[ -n "$string" ] string有東西(non-zero)返回true
[ -z "$string" ] string沒東西(zero)返回true
[ "$s1" = "$s2" ] s1 等於 s2時返回true
[ "$s1" != "$s2" ] s1 不等於 s2時返回true
數值條件 小心有多個-喔
[ $num1 -eq $num2 ] num1相等 num2 為true
[ $num1 -ne $num2 ] 不等 num2 為true
[ $num1 -lt $num2 ] 小於 num2 為true
[ $num1 -ge $num2 ] 大於等於 num2 為true
[ $num1 -le $num2 ] 小于等于 num2 为true
[ $num1 -gt $num2 ] 小于 num2 为 true
多重條件
[ ! -f "testfile" -o ! -r "testfile" ]
[ test condition -o test condition ]
! 表示not
-a 表示and
-o 表示or
通常比較常用的又有portable的就是上面一些用法。 美觀上來說用中括號condition比較好看,很多人為了autoconf的語法portable起見, 盡量用test的寫法。測試的結果當然放在$?中,0表示成功, 其他值表示失敗。
在shell script中也有可能看到有人用
if [ "x$VAR" = "xvalue" ]; then .....
來作$VAR是否是空的測試,尤其你如果先測試是否為空字串, 再測試是那個值要做什麼,這樣就會作兩次測試划不來,用這樣作比較經濟。
另外這跟perl字串與數值測試容易混淆,他跟perl剛好相反,而且perl沒有多-
perl語法
if ($str1 eq $str2)
if ($num1 == $num2)
最後有個大比較,會一起列出shell perl c的差異來。(人老了記不住,我是這樣記 ,以perl為基準eq是字,所以前後是string,==是符號所以前後是number, bourne shell是怪胎,剛好顛倒,eq還要加個-符號。==要少一個=)
C語法
if (!strcmp(string1, string2))
if (num1 == num2)
在Bourne shell的內部命令裡面有測試條件的語法test給if while用
test condition
或者
[ condition ]
為了與autoconf不要混淆,programmer比較喜歡用test 不用中括號condition的方法。括號的用法請注意空格(这里容易出错哦)。 例如
檔案測試條件
test -f /etc/file 檔案是個一般檔案不是其他特殊檔案嗎
[ -e file ] 檔案存在嗎
[ -d /etc/ ] 目錄存在嗎
[ -s file ] 檔案大小大於0嗎
[ -r file ] 檔案可讀嗎
[ -b file ] 区块文件
[ -c file ] 字符文件
[ -f file ] 一般文件
[ -w file ] 文件可写吗
[ -x file ] 文件可执行吗
[ -k file ] 设定了限定位
[ -g file ] 设定了组位
[ -u file ] 设定了user id
[ -p file ] 管线
字串測試條件
[ "$string" ] string有東西就返回true
[ -n "$string" ] string有東西(non-zero)返回true
[ -z "$string" ] string沒東西(zero)返回true
[ "$s1" = "$s2" ] s1 等於 s2時返回true
[ "$s1" != "$s2" ] s1 不等於 s2時返回true
數值條件 小心有多個-喔
[ $num1 -eq $num2 ] num1相等 num2 為true
[ $num1 -ne $num2 ] 不等 num2 為true
[ $num1 -lt $num2 ] 小於 num2 為true
[ $num1 -ge $num2 ] 大於等於 num2 為true
[ $num1 -le $num2 ] 小于等于 num2 为true
[ $num1 -gt $num2 ] 小于 num2 为 true
多重條件
[ ! -f "testfile" -o ! -r "testfile" ]
[ test condition -o test condition ]
! 表示not
-a 表示and
-o 表示or
通常比較常用的又有portable的就是上面一些用法。 美觀上來說用中括號condition比較好看,很多人為了autoconf的語法portable起見, 盡量用test的寫法。測試的結果當然放在$?中,0表示成功, 其他值表示失敗。
在shell script中也有可能看到有人用
if [ "x$VAR" = "xvalue" ]; then .....
來作$VAR是否是空的測試,尤其你如果先測試是否為空字串, 再測試是那個值要做什麼,這樣就會作兩次測試划不來,用這樣作比較經濟。
另外這跟perl字串與數值測試容易混淆,他跟perl剛好相反,而且perl沒有多-
perl語法
if ($str1 eq $str2)
if ($num1 == $num2)
最後有個大比較,會一起列出shell perl c的差異來。(人老了記不住,我是這樣記 ,以perl為基準eq是字,所以前後是string,==是符號所以前後是number, bourne shell是怪胎,剛好顛倒,eq還要加個-符號。==要少一個=)
C語法
if (!strcmp(string1, string2))
if (num1 == num2)
- Shell里的测试条件
- shell的条件测试
- Shell脚本的条件测试
- shell里的条件判断方式
- shell中的条件测试
- shell条件测试
- shell之条件测试
- shell条件测试
- shell条件测试
- SHELL中的测试条件
- shell条件测试
- linux shell 测试条件
- shell条件测试
- Shell条件测试
- Shell 条件测试
- SHELL 编程 -- 条件测试
- shell中的条件测试
- shell条件测试
- if()语句中逗号写错位置的教训!
- 分类树方法
- 修改Linux中的主机名、如何查看Linux IP
- android流量监测的实现原理
- oracle数据库之数据的增删改以及简单的单表查询
- Shell里的测试条件
- L10N Test Defect Category
- FC SAN FAQ
- Advanced Bash-Scripting Guide:
- Linux如何自动获取IP地址及配置静态IP地址上网
- AppCPA:Talking Data发布无需SDK的iOS多渠道追踪平台
- simple-spring-memcached简介
- 71道经典android面试题和答案。android基本和重要知识都涉及到了
- C语言 将小写字母写入文件