shell指令碼中的if邏輯判斷
邏輯判斷運算式:
-gt (>); 大於 great than-lt(<); 小於 less than-ge(>=); 大於或等於 -le(<=); 小於或等於-eq(==); 等於 equal-ne(!=) 不等於 not equa- - -例如if [ $a -gt $b ]; if [ $a -lt 5 ]; if [ $b -eq 10 ]等
if邏輯判斷格式:
格式1:if 條件 ; then 語句; fi格式2:if 條件; then 語句; else 語句; fi格式3:if …; then … ;elif …; then …; else …; fi- - -可以使用 && || 結合多個條件條件A&&條件B:A並且B條件A||條件B:A或者Bif [ $a -gt 5 ] && [ $a -lt 10 ]; thenif [ $b -gt 5 ] || [ $b -lt 3 ]; then
格式1:if 條件 ; then 語句; fi
#!/bin/basha=5if [ $a -gt 3 ]#注意[]裡面有大量空格then echo "ok"fi
格式2:if 條件; then 語句; else 語句; fi
#!/bin/basha=5if [ $a -gt 3 ]then echo "ok"else echo "nook"fi
格式3:if …; then … ;elif …; then …; else …; fi
#!/bin/basha=3if [ $a -gt 4 ]then echo ">1"elif [ $a -gt 6 ]#注意elif可以嵌套多次的then echo "<6 && >1"else echo "nook"fi
檔案目錄屬性判斷
在shell中通常要和檔案或者目錄打交道,那麼對於他們的屬性判斷十分重要
檔案目錄屬性判斷
[ -f file ]判斷是否是普通檔案,且存在 [ -f /usr/bin/grep ][ -d file ] 判斷是否是目錄,且存在 [ -d /tmp/mydir ][ -e file ] 判斷檔案或目錄是否存在 [ -e /var/log/syslog ][ -r file ] 判斷檔案是否可讀 [ -r /var/log/syslog ][ -w file ] 判斷檔案是否可寫 [ -w /var/mytmp.txt ][ -x file ] 判斷檔案是否可執行 [ -x /usr/bin/grep ]
舉例:
#!/bin/bashf="/tmp/zhouquniclinux"if [ -e $f ]then echo $f existelse touch $ffi
if特殊用法
if [ -z "$a" ] 這個表示當變數a的值為空白時會怎麼樣if [ -n "$a" ] 表示當變數a的值不為空白if grep -q '123' 1.txt; then 表示如果1.txt中含有'123'的行時會怎麼樣if [ ! -e file ]; then 表示檔案不存在時會怎麼樣if (($a<1)); then …等同於 if [ $a -lt 1 ]; then… [ ] 中不能使用<,>,==,!=,>=,<=這樣的符號
例子
if [ -z “$a” ] 這個表示當變數a的值為空白時會怎麼樣#!/bin/bashn='wc -l /tmp/lalala'if [ $n -lt 100 ]then echo "line num less than 100"fi# 如果/tmp/lalala檔案為空白,或者被刪除的話,指令碼就會運行出錯,出現bug應該加上一個判斷條件#!/bin/bashn='wc -l /tmp/lalala'if [ $n -z "$n" ]# [ $n -z "$n" ] = [ ! $n -n "$n" ],-z 和 -n 是一對相反的條件then echo "error" exitelif [ $n -lt 100 ]then echo "line num less than 100"fi或者#!/bin/bashif [ ! -f /tmp/lalala ]then echo "/tmp/lalala is not exist" exitfin='wc -l /tmp/lalala'if [ $n -lt 100 ]then echo "line num less than 100"fi
case判斷
case判斷格式
case 變數名 in value1) commond1 ;; value2) commod2 ;; value3) commod3 ;;esac
在網卡系統服務指令碼中,如,/etc/init.d/iptables中就用到了case
在case中,可以在條件中使用“|”,表示或的意思
輸入一個同學的分數,判斷成績是否及格,優秀。#!/bin/bashread -p "Please input a number: " n# read -p 是讀取使用者的輸入資料,定義到變數裡面if [ -z "$n" ]then echo "Please input a number." exit 1#“exit 1”表示非正常運行導致退出程式#退出之後,echo $?會返回1值,表示程式退出是因為出錯了,和查看上一條命令執行有無錯誤的時候是一樣的。fin1=`echo $n|sed 's/[0-9]//g'`#判斷使用者輸入的字元是否為純數字#如果是數字,則將其替換為空白,賦值給$n1if [ -n "$n1" ]thenecho "Please input a number."exit 1#判斷$n1不為空白時(即$n不是純數字)再次提示使用者輸入數字並退出fi#如果使用者輸入的是純數字則執行以下命令:if [ $n -lt 60 ] && [ $n -ge 0 ]then tag=1elif [ $n -ge 60 ] && [ $n -lt 80 ]then tag=2elif [ $n -ge 80 ] && [ $n -lt 90 ]then tag=3elif [ $n -ge 90 ] && [ $n -le 100 ]then tag=4else tag=0fi#tag的作用是為判斷條件設定標籤,方便後面引用case $tag in 1) echo "not ok" ;; 2) echo "ok" ;; 3) echo "ook" ;; 4) echo "oook" ;; *) echo "The number range is 0-100." ;;esac