bashループ、判断文まとめ


bash基本的な論理判断
for:リストのある要素を巡る
while:体が本物だと判断すればずっと循環する
until:体が偽であると判断すればループし続ける
if:条件判断文
この4つのコマンドを詳しく述べる前に、基本的な知識を見てみましょう.
bashの演算
[root@centos ~]# a=5
[root@centos ~]# b=7
[root@centos ~]# echo $a+$b
5+7

以上の例で説明するa,bは、文字が記号に基づいて自動的に演算することはない.
演算を行うには$[]で囲みますが、結果は整数です.
[root@centos ~]# echo $[$a+$b]
12
[root@centos ~]# echo $[$a*$b]
35
[root@centos ~]# echo $[$b/$a]
1

bcコマンドで小数を出力できます
[root@centos ~]# echo $b/$a | bc -l
1.40000000000000000000

数値の自加自減は、letコマンドの後に++を付けると、値が自加1を表し、--値が自減1を表す
[root@centos ~]# echo $a
5
[root@centos ~]# let a++
[root@centos ~]# echo $a
6

変数を整数として明確に定義
[root@centos ~]# declare -i a=100
[root@centos ~]# echo $a
100
[root@centos ~]# a=50
[root@centos ~]# echo $a
50
[root@centos ~]# a=test
[root@centos ~]# echo $a
0

上の例から,整数変数が付与文字列に与えられることがわかり,一律0である.
もう1つはデフォルトの付与変数です
{変数-デフォルト}:変数はnull Yes、値はデフォルト
{変数:-デフォルト}:変数がnullまたはスペースの場合、値はデフォルトです.
[root@centos ~]# a= #a 
[root@centos ~]# echo $a

[root@centos ~]# echo ${a:-test}a ,  
test
[root@centos ~]# echo ${a-test}a , null,  a , 

[root@centos ~]#

ブール演算:関係の判断に文if,while,untilとともに用いる
演算
真&&真=真
真&&偽=偽
偽&&真=偽
偽&&偽=偽
または演算
本当に
真|偽=真
うそ
フェイント
せいけいじょうけん
-gtより大きい
-geが等しい以上
-ltが小さい
-leが等しい以下
-eqは
-neは等しくない
書式[数字1-gt数字2]
数字1が数字2より大きい演算は、数字と[]の間にスペースがあることに注意してください.
文字列条件テスト
>:比較asciiコードより大きい
<:より小さい
>=:以上
<=:以下
==:等しい
!=: 等しくない
-n:真でなく偽である
-z:偽りではなく、真実である
[root@centos ~]# a=test
[root@centos ~]# if [ $a == test ]; then echo "success"; fi
success
[root@centos ~]# if [ -n $a ]; then echo "success"; fi
success

注意:必ず括弧を入れ、スペースがあります.
コンビネーション条件テスト
演算[条件1-a条件2]または条件1&&&条件2と、前者の条件1または2は中括弧を必要とせず、後者の条件1,2は中括弧を必要とする
[root@centos ~]# a=1
[root@centos ~]# b=1
[root@centos ~]# if [ $a -eq 1 ] && [ $b -eq 1 ] ; then echo "success"; fi
success
[root@centos ~]# if [ $a -eq 1 -a  $b -eq 1 ] ; then echo "success"; fi
success

または演算[条件1-o条件2]または条件1||条件2
[root@centos ~]# a=1
[root@centos ~]# b=2
[root@centos ~]# if [ $a -eq 1 -a  $b -eq 1 ] ; then echo "success"; fi
[root@centos ~]# if [ $a -eq 1 -o  $b -eq 1 ] ; then echo "success"; fi
success

非演算[-not条件]または!条件、!条件との間にスペースが必要です.中かっこまたは外
[root@centos ~]# if ! [ $a -eq 2 ] ; then echo "success"; fi
success
[root@centos ~]# if [ ! $a -eq 2 ] ; then echo "success"; fi
success

ファイル条件テスト
-a,-eファイル:存在は真実ではなく、存在は偽ではない
-fファイル:通常のファイルは真であり、そうでなければ偽である
-d:ディレクトリが真でなければ偽
-L/-h:シンボルリンクが真でなければ偽
-b:ブロックデバイスが本物
-c:文字デバイスが真
S:パッケージファイルが本物
-p:設備配管は本物
この4つのコマンドの構文といくつかの例を詳しく説明します.
for文の最初の使い方
for変数名inリスト;do
じゅんかんたい
done
変数名:リストから変数を定義することに相当し、前に$を追加する必要はありません.
リスト:スペースまたは改行で区切られた文字列.{1.1.10}または`seq 1 10'で1から10のデフォルトを1に加算することができます.
user 1からuser 5を作成するユーザー
[root@centos ~]# for i in {6..8}; do useradd user$i; done
[root@centos ~]# tail /etc/passwd
user6:x:505:505::/home/user6:/bin/bash
user7:x:506:506::/home/user7:/bin/bash
user8:x:507:507::/home/user8:/bin/bash

for文の第2の使い方
for((初期条件;テスト条件;表現));
じゅんかんたい
done
例は1から10の偶数の和を求めます

declare -i sum=0

for ((i=1; i <=10; i++)); do
        let i++
        let sum+=$i
done

echo $sum

if
1
if試験条件;then
じっこうぶん
fi
#user1 user1 exists
[root@centos ~]# if id user1 &> /dev/null; then echo "user1 exists"; fi
user1 exists

2. 
if試験条件;then
実行文1
else
実行文2
fi
2つのブランチのうちの1つを選択
#user10 
[root@centos ~]# if id user10 &> /dev/null; then echo "user10 exists"; else echo "user10 does not exist"; fi
user10 does not exist

3. 
if条件1;then
ブランチ1
eif条件2;then
ブランチ2
eif条件3 then
ブランチ3
...
else
分岐n
fi
マルチブランチ選択
[root@centos ~]# a=1
[root@centos ~]# if [ $a -eq 1 ]; then echo "a=1"; elif [ $a -eq 2 ]; then echo "a=2"; else echo " a != 1 or a !=2 "; fi
a=1
[root@centos ~]# a=2
[root@centos ~]# if [ $a -eq 1 ]; then echo "a=1"; elif [ $a -eq 2 ]; then echo "a=2"; else echo " a != 1 or a !=2 "; fi
a=2
[root@centos ~]# a=3
[root@centos ~]# if [ $a -eq 1 ]; then echo "a=1"; elif [ $a -eq 2 ]; then echo "a=2"; else echo " a != 1 or a !=2 "; fi
 a != 1 or a !=2

whileとuntilサイクル
while試験条件;do
じゅんかんたい
done
テスト条件は真で、ずっと循環して、偽のために飛び出します
[root@centos ~]# count=1
[root@centos ~]# while [ $count -le 10 ]; do echo $count; let count++; done
1
2
3
4
5
6
7
8
9
10

until試験条件;do
じゅんかんたい
done
テスト条件が偽の場合は常にループし、真の場合はジャンプします.