shell指令碼中的if邏輯判斷、檔案目錄屬性判斷、if特殊用法、case判斷

來源:互聯網
上載者:User
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
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.