Shellスクリプト---条件判断


プロシージャシーケンス向け選択実行:if;caseサイクル実行:for;while;untilループには、条件選択実行(条件テスト)条件テスト方式(テスト条件)bashコマンドテストbashコマンドコマンドコマンド実行状態戻り値$:前の実行に使用したコマンドステータスの戻り値0:1-255の正常な実行:失敗exitコマンドを使用して、スクリプトでスクリプトステータスの戻り値をカスタマイズできます.定義しない場合、スクリプトのステータスの戻り値は、スクリプト実行が終了する前の最後の文のステータス例に依存します.
   if [ $1 -lt $2 ]
                         then
                              echo "aa"
                              get=0
                         else
                              echo "bb"
                              get=9
                    fi
                         exit $get
                        
                    [root@localhost test]# ./1.sh 3 5
                    aa
                    [root@localhost test]# echo $?
                    0
                    [root@localhost test]# ./1.sh 3 5
                    aa
                    [root@localhost test]# echo $?
                    0

---------------------------------------------------------------------------------------スクリプトで条件判断を完了するには、どの文を実行するかによって、if判定if判定単一分岐if判定if条件then(条件満たす)文fi多分岐if判定if条件then(条件満たす)を用いる文else(条件が満たされていない)文fi練習:user 1,user 2が存在するか否かを判断し、idとshellが出力され、idが作成され出力されない
#!/bin/bash
file=/etc/passwd
for i in user1 user2
do
        id $i &> /dev/null
        if [ $? = 0 ]
           then
                grep "^$i" $file | awk -F: '{print $3,$7}'
           else
                useradd $i
                grep "^$i" $file | awk -F: '{print $3}'
        fi
done

ネスト:if判断でネストできる他の判断:forサイクルif判断;forループはif判定for i inリストdo if[]をネストすることもできるthen文else文fi done if[$?-eq 0]then for i inリストdo文done else for i inリストdo文done fi---------------------------------------------------------------------------------------------------------------------------------------------------文字テスト;ファイルテスト整数テストexpression:数値1比較子数値2$A比較子$Bが-gt:$A-gt$Bより大きいか、等しい:-ge等しい:-eqが:-ltより小さい小さいか等しい:-leは等しくありません:-ne例:任意の2つの整数、比較サイズ、出力の大きい数値
#!/bin/bash
          a=$RANDOM
          b=$RANDOM
               if [ $a -ge $b ]
                    then
                         echo -e "Max Number is A
Number:$a"                     else                          echo -e "Max Number is B
Number:$b"                fi

例:あるIDがシステムユーザか一般ユーザかを判断する
 #!/bin/bash
               UserName=user1
               if [ $(id -u $UserName) -gt 499 ]
                    then
                         echo "Common User:$UserName"
                    else
                         echo "Admin User or System User:$UserName"
               fi
              
        : user1;user2 UID GID 
               #!/bin/bash
         
          for i in user1 user2
               do
                    if [ $(id -u $i) -eq $(id -g $i) ]
                         then
                              echo "$i good guy"
                         else
                              echo "$i bad guy"
                    fi
               done

文字テスト(ASCIIテーブルでの2つの文字列の順序を比較し、左から右へ文字単位で比較する)文字列には「」>:より大きい<:より小さい=:等しい=~:左の文字列が右のモードで一致するかどうかを判断する;一般的に[[]]のshell=/bin/bash[[$shell=~sh$]]echo$?=0一般的に行の最初の行の最後のアンカーをして、モードは引用符の例をプラスすることができません:CPUがどんなブランドであることを見て、最後にブランドを出力します
#!/bin/bash
          cpu=$(cat /proc/cpuinfo | grep "vendor" | cut -d: -f2)
          if [[ $cpu =~ Intel$ ]];then
                    echo "cpu is Inter"
          else
                    echo "cpu is AMD"

fi例:スクリプトにパラメータを渡し、文字がmemoryまたはMemoryで、メモリ情報を表示し、そうでなければ/proc/uptimeコンテンツを表示する
 #!/bin/bash
if [[ $1 =~ [Mm]emory$ ]];then
     free -m
else
     cat /proc/uptime
fi

----------------------------------------------------------単目比較-z$変数:文字列が空であれば真、空でなければ偽-n$変数:空であれば偽、空でなければ真の例:ユーザーのShellがbashであるかどうかを判断し、Shellが空であれば直接終了する'
  #!/bin/bash
                              Shell=$(grep "^$1:" /etc/passwd | awk -F: '{print $7}')
                              if [ -z $Shell ]
                                   then
                                        echo "The user does not exist"
                                        exit 10
                              fi
                              if [ "$Shell" == "/bin/bash" ]
                                   then
                                        echo "$1 Shell is BashShell"
                                        Set=0
                                   else
                                        echo "$1 Shell Not BashShell"
                                        Set=9
                              fi
                              exit $Set

ファイルテストテスタ:ファイルパス-f:通常のファイルであるかどうかをテストします.すなわち、lsファイルタイプが-のファイル-d:ディレクトリファイルであるかどうかをテストします.-e:テストファイルが存在するかどうかをテストします.存在は真であり、そうでなければ偽-r:使用者がファイルを読めるかどうかをテストする-w:使用者がファイルを書くことができるかどうかをテストする-x:使用者がファイルを実行できるかどうかをテストする-s:ファイルサイズが空でないかどうかをテストする:空でなければ真で、空であれば偽の例:例えば/tmp/testディレクトリが存在しない場合if[!-d/tmp/test]を作成する;then mkdir/tmp/test fi短絡動作(優先度が高いか)の前半で最終結果を決定することができ、後半は演算真&&真=真&&偽=偽&&&{真、偽}=偽または演算偽を許さない[-e/tmp/test]|mkdir/tmp/test前面が真であれば、前面が偽であれば作成しません!id test&>/dev/null&&useradd test||echo「ユーザーは存在する」第1セグメントユーザーが存在しないことを真とし、ユーザーの第1セグメントユーザーの存在を偽とし、後の和は実行されず、前の結果が偽となり、実行または演算-------------------------------------------------------------------bash位置変数:スクリプトの後ろの最初の値を第1のパラメータとして$1を与え、これに従って$1,$2,$3,.....例:ユーザが存在するか否かを判断する
 #!/bin/bash
                    UserName=$1
                    if id $UserName &> /dev/null
                         then
                              echo "$UserName Exists"
                         else
                              echo "$userName Not Exists"
                    fi
                   
                    [root@localhost test]# ./ifuser.sh user1
                    user1 Exists

$*,$@:すべての位置パラメータ$#:位置パラメータの個数shift:位置パラメータの交代練習を実現する:パラメータを通じてスクリプトの一連のユーザー名に渡され、存在するスキップ;存在しない追加追加完了統計合計ユーザー数
#!/bin/bash
               sum=0
               for username in $@
                    do
                         if id $username &> /dev/null
                              then
                                   echo "User $username Exists"
                              else
                                   useradd $username &> /dev/null
                                   echo "$username" | passwd --stdin $username &> /dev/null
                                   echo -e "User $uesrname Add ok
Passwd:$username
"                                    sum=$[$sum+1]                          fi                     done                echo "Add $sum new users"

-------------------------------------------------------------------------------------------------------------------単一オペレータではなく、条件の前にa=3[!$a-eq 0]を置く例:あるユーザのUIDが1より大きく、499以下であるか否かを判断し、同時に2つの条件を満たす必要がある!/bin/bashuid=$(grep "^bb.*bash$"/etc/passwd | cut -d: -f3)if [ $uid -gt 500 -a $uid -le 600 ];then echo「user is system users」fiコマンド組合せテストは、コマンドテストにのみ使用されます&:|:または!:非例:指定されたユーザが存在しない場合、スクリプトifを終了します.id $1 &>/dev/null;then exit 6 fi-------------------------------------------bash条件判断の多分岐if文構文フォーマットif条件1;then文elif条件2;then文fi列サブ:fedora、centosなどのスクリプト文字にパラメータを渡すと、suseのようなRedHatが表示され、opensuseのようにSuSeが表示され、ubuntu、mint、debianのようにDebianが表示されます.そうしないと、他の
    #!/bin/bash
if [ $1 = fedora -o $1 = centos ];then
     echo "RedHat"
elif [ $1 = suse -o $1 = opensuse ];then
     echo "SuSe"
elif [ $1 = ubuntu -o $1 = mint -o $1 = debian ];then
     echo "Debian"
else
     echo "Unknown"
fi