1-23-条件テスト文とifプロセス制御文の使用

4842 ワード

:2018-06-16

一、変数テスト文


testテストコマンド


testコマンドを使用して、変数のテストを行います.結果が正しければ、結果を真とも呼び、$?=0は、逆に偽を表し、$?=1が表示されます.
パラメータ
説明

-eファイル名
ファイルが存在するかどうか、存在するかどうかtest -e my_test.txt
-rファイル名
ファイルが読めるかどうか、真に読めるかどうかtest -r my_test.txt
-wファイル名
ファイルが書けるかどうか、本物と書くことができますtest -w my_test.txt
-xファイル名
ファイルが実行可能かどうか、実行可能かどうかtest -x my_test.txt
-sファイル名
ファイルに文字があるかどうか、真があるかどうかtest -s my_test.txt
-dファイル名
ファイルがディレクトリかどうか、真かどうかtest -d my_test.txt
-fファイル名
ファイルが通常のファイルかどうかは、真です.test -f my_test.txt
-cファイル名
ファイルが文字型特殊ファイルであるかどうかは、真であるtest -c my_test.txt
-bファイル名
ファイルがブロック特殊ファイルかどうかは、真です.test -b my_test.txt
注意:ファイルは存在しなければなりません.存在しないのは偽です.$?=1. 例:
#  
test -e my_test.txt
#  
echo $?

数値サイズ比較


パラメータ
説明
-eq
に等しい
-ne
等しくない
-gt
より大きい
-ge
以上
-lt
より小さい
-le
以下
例:
#  5 4 
test  5 -eq 4
#  
echo $?

文字列の比較


パラメータ
説明
=
真に等しい
!=
等しくなければ真である
-z文字列
文字列の長さがゼロの場合は真
-n文字列
文字列の長さがゼロでない場合は真
例:
str1=abc
str2=abcd

test $str1 = $str2
echo $?

test $str1 == $str2
echo $?

test $str1 != $str2
echo $?

test -z $str1
echo $?

testテスト文のもう一つの一般的な使用方法

[ ]のカッコを使用してtestというコマンドを表します.例えば、[ -d /etc ]は/etcがディレクトリであるかどうかを判断し、test -d /etcというコマンドに相当します.[ ]のカッコを使用して、数値比較では通常の数学記号を使用して数値サイズを比較したり、-eq、-ne、-gtなどの文字を使用したりすることができます.
文字表示
シンボル代替表示
-eq
==等しい
-ne
!= 等しくない
-gt
>より大きい
-lt
未満[ ]の代替testコマンドを使用するには、いくつかの点に注意してください.
  • のカッコの開始と終了にはスペースが必要です.たとえば、[ -d /etc ]は正しいですが、[-d /etc]は正しくありません.
  • 比較子の両側にスペースを追加します.たとえば、[ 9 == 4 ]は正しいですが、[ 9==4 ]は正しくありません.
  • が番号より大きく、番号より小さい場合は、エスケープ文字()を付けます.たとえば、[ 9 \< 4 ]が正しく、[ 9 < 4 ]が正しくありません.エスケープ文字を使用しない場合は、[[ 9 < 4 ]]を使用できます.

  • 次の特性を理解する必要があります.
  • [ ]式において、一般的な>、
  • [[ ]]演算子は[ ]演算子の拡張にすぎず、エスケープ子を必要とせずに<、>シンボル演算をサポートすることができる.論理演算子|,&&は-a,-oを使用しません.
  • [[ ]]は正則を用いることができるが、[ ]はだめである.例えば、
    #  false,*.html , *
    [ "a.html" == *.html ] && echo true || echo false
    
    #  ture,* 
    [[ "a.html" == *.html ]] && echo true || echo false  
    
    #  ,* , 
    [[ "a.html" == "*.html" ]] && echo true || echo false
    
  • である.

    論理と(&)と論理または(|)


    論理と(&):論理と、-aで表すことができます([[ ]]の中に括弧がある場合、-aで表すことはできません&&).例えば:[ -f /etc/passwd ] && [ -w /etc/passwd ].
    論理または(|):-oで表すことができます([[ ]]の中に二重中括弧がある場合、-oで表すことはできません|).例えば:[ -f /etc/passwd ] || [ -w /etc/passwd ].
    条件判断では、論理和を用いて、以下の3つの書き方を用いることができる.
    if [   ] && [   ]; then
         
    fi
    
    if [[   &&   ]]; then
         
    fi
    
    if [   -a   ]; then
         
    fi
    

    論理と論理または、次のような用途があります.
    [ 1 -lt 2 -a 5 > 3 ] && echo true || echo false
    

    上記の文は、[ 1 -lt 2 -a 5 > 3 ]が真の場合、echo trueを実行し、偽の場合、echo falseを実行します.

    二、プロセス制御--if文


    単一ブランチif文


    構文の形式:
    if   1  ; then
         1
    fi
    

    例:
    #!/bin/bash
    
    if [ $USER != root ]
    then
            echo "error: not root user, permission demain."
            exit 127            #  
    fi
    

    thenとifを同じ行に置くこともできます.
    #!/bin/bash
    
    if [ $USER != root ]; then
            echo "error: not root user, permission demain."
            exit 127            #  
    fi
    

    ダブルブランチif文


    構文の形式:
    if   1  ; then
         1
    else
         2
    fi
    

    例えば、pingテストIPのスクリプトを書いて、pingが通じるかどうかを見てみましょう.
    #!/bin/bash
    
    #  Unix ,/dev/null, ,
    #  , 
    #  ( ), 
    #  EOF。
    
    ping -c 3 -i 0.2 $1 > /dev/null
    
    if [ $? -eq 0 ]; then
            echo "HOST $1 is up"
    else
            echo "HOST $1 is down"
    fi
    

    マルチブランチif文


    構文の形式:
    if   1  ; then
         1
    elif   2  ; then
         2:
    elif   3  ; then
         3
    else
         n
    fi
    

    例:
    #!/bin/bash
    
    m=man
    w=woman
    
    read -p " :" sex
    
    if [ $sex == $m ]; then
            echo " 。"
    elif [ $sex == $w ]; then
            echo " 。"
    else
            echo " 。"
    fi