はじめに:
条件文はまた、日常生活の論理をフロー制御文
試験条件
- ファイルのテスト
- 整数テスト
- ロジックテスト文字列
if文
- 単一の分岐if文
- 2分岐if文
- 多分岐if文
A:テスト
1.1.1テストコマンド
- 試験の特定の発現は、条件が満たされたときに確立され、試験文戻り0、そうでなければ他の値
'格式1:test 条件表达式
'格式2:[ 条件表达式 ]
フォーマット2では、少なくとも一つのスペースの前と後
1.1.2ファイルのパーミッションとファイルタイプのテストテスト
-
[ 操作符 文件或目录 ]
1.1.3共通のテスト演算子
- -e:testディレクトリやファイルが存在する(存在)
- -d:テストディレクトリかどうか(ディレクトリ)
- -f:テストファイル(ファイル)かどうか
- -r:現在のユーザーが読み取り権限を持っているかどうかをテストする(読みます)
- -w:テスト現在のユーザーが書き込み権限を持っているかどうか(書き込み)
- -x:現在のユーザーが実行する権限を持っているかどうかをテストする(eXcute)
[root@localhost opt]# touch test.txt
[root@localhost opt]# mkdir abc
[root@localhost opt]# ls
abc rh test.txt wwwroot
[root@localhost opt]# test -d /opt/abc/
[root@localhost opt]# echo $?
0
[root@localhost opt]# [ -d /opt/abc ]
[root@localhost opt]# echo $?
0
[root@localhost opt]# test -f /opt/abc
[root@localhost opt]# echo $?
1
[root@localhost opt]# test -f /opt/test.txt
[root@localhost opt]# echo $?
0
[root@localhost opt]# test -f /opt/te.txt
[root@localhost opt]# echo $?
1
[root@localhost opt]# [ -x /opt/abc]
bash: [: 缺少 `]'
[root@localhost opt]# [ -x /opt/abc ]
[root@localhost opt]# ls -al
总用量 16
drwxr-xr-x. 5 root root 156 11月 26 13:51 .
dr-xr-xr-x. 17 root root 224 10月 23 13:41 ..
'drwxr-xr-x. 2 root root 6 11月 26 13:51 abc
drwxr-xr-x. 2 root root 6 3月 26 2015 rh
-rw-r--r--. 1 root root 0 11月 26 13:51 test.txt
[gsy@localhost opt]$ [ -w /opt/abc ]
[gsy@localhost opt]$ echo $?
1
[gsy@localhost opt]$ [ -w /opt/abc ]&&echo "yes"
[gsy@localhost opt]$ echo $?
1
[gsy@localhost opt]$ [ -r /opt/abc ]&&echo "yes"
yes
[gsy@localhost opt]$ echo $?
0
[gsy@localhost opt]$
ステップは、設立または0しているかどうか、ゼロ以外の値が設定されていなかった上、エコー$?クエリ
[GSY @ localhostのオプトイン] $ [-wは/ opt / ABC] &&エコー "はい"
&&意味で、両側に該当する場合、正しく実行されることを言った;エコー「はい」は[-wは/ opt / ABC]設定した場合、あること、明らかに正しいこと、それは出力はい意志確立されていない場合は、そうではありませんはい出力、この操作は、操作が確立されたかどうかを確認するために変装することができます
||や意味、長いセットアップしても、全体のために、そこにある限り、最初に、それが動作して下に見て行くことはありません
[root@localhost opt]# [ -d /opt/abc ]|| echo "year"
[root@localhost opt]# echo $?
0
[root@localhost opt]# [ -d /opt/ab ]|| echo "year"
year
[root@localhost opt]# echo $?
0
[root@localhost opt]# [ -d /opt/abc ]|| echo "year"
[root@localhost opt]# echo $?
0
1.2.1比較整数
[ 整数1 操作符 整数2 ]
1.2.2共通のテスト演算子
- -eq:等しい(等しいです)
- -ne:等しくない(等しくありません)
- -gt:より大きい(より大きい)
- -lt:未満(レッサーより)
- -le:以下(小か等しい)に等しいです
- -ge:以上(以上)に等しいです
[root@localhost opt]# [ 5 -gt 3 ]&& echo "yes"
yes
[root@localhost opt]# [ 5 > 3 ]&& echo "yes"
yes
[root@localhost opt]# [ 5 < 3 ]&& echo "yes"
yes
[root@localhost opt]# [ 5 \< 3 ]&& echo "yes"
[root@localhost opt]# echo $?
1
[root@localhost opt]# [ 5 \= 3 ]&& echo "yes"
[root@localhost opt]# [ 5 \> 3 ]&& echo "yes"
yes
[root@localhost opt]# [ 3 \= 3 ]&& echo "yes"
yes
[root@localhost opt]# [ 3 == 3 ]&& echo "yes"
yes
[root@localhost opt]# [ 3 != 3 ]&& echo "yes"
[root@localhost opt]# echo $?
1
[root@localhost opt]# [ 3 != 4 ]&& echo "yes"
yes
[root@localhost opt]# [ 3 >= 3 ]&& echo "yes"
bash: [: 3: 期待一元表达式
[root@localhost opt]# [ 3 => 3 ]&& echo "yes"
bash: [: 3: 期待一元表达式
[root@localhost opt]# [ 3 \>= 3 ]&& echo "yes"
bash: [: >=: 期待二元表达式
[root@localhost opt]#
[root@localhost opt]# who
root :0 2019-11-26 08:16 (:0)
root pts/0 2019-11-26 08:16 (:0)
[root@localhost opt]#
[root@localhost opt]# who |wc -l
2
[root@localhost opt]# [ $(who |wc -l) -lt 5 ]&& echo "too less"
too less
[root@localhost opt]# [ $(who |wc -l) -ge 2 ]&& echo ">=2"
>=2
その後、プライム記号として機能します$()コマンド・トランス
[root@localhost opt]# free -m
total used free shared buff/cache available
Mem: 1984 686 81 9 1216 1060
Swap: 2047 0 2047
[root@localhost opt]# free -m | grep Mem
Mem: 1984 686 81 9 1216 1060
[root@localhost opt]# free -m | grep Mem | awk '{print $1,$3,$4}'
Mem: 686 81
[root@localhost opt]# free -m | grep Mem | awk '{print $4}'
79
[root@localhost opt]# abc=$(free -m | grep Mem |awk '{ print $4 }')
[root@localhost opt]# echo abc
abc
[root@localhost opt]# echo $abc
77
[root@localhost opt]# [ $abc -gt 1024 ]&& echo "yes"
[root@localhost opt]# [ $abc -gt 50 ]&& echo "yes"
yes
1.3.1文字列比較
-
フォーマット1:
[ 字符串1 = 字符串2 ] [ 字符串1 != 字符串2 ]
-
フォーマット2:
[ -z 字符串 ]
1.3.2共通のテスト演算子
- =:同じ文字列の内容
- !=:異なる文字列の内容!彼は反対の意味を表します
- -z:文字列が空であります
- 文字列は二重引用符で出マーク
1.3.3デモ
[root@localhost opt]# echo $LANG
zh_CN.UTF-8
[root@localhost opt]# [ $LANG = "zh_CN.UTF-8" ]&& echo "yes"
yes
[root@localhost opt]# [ $LANG != "zh_CN.UTF-8" ]&& echo "yes"
[root@localhost opt]# echo $?
1
[root@localhost opt]# [ "男" != "男" ]&& echo "yes"
[root@localhost opt]# [ "男" = "男" ]&& echo "yes"
yes
[root@localhost opt]# [ "男" = "女" ]&& echo "yes"
[root@localhost opt]# [ "男" != "女" ]&& echo "yes"
yes
括弧内のステートメントをテストするために比較することができます
かどうかは、/ opt / shareディレクトリを作成します(はい/いいえ)正常に作成します
すでに存在しています
[root@localhost opt]# ls -al
总用量 16
drwxr-xr-x. 5 root root 156 11月 26 13:51 .
dr-xr-xr-x. 17 root root 224 10月 23 13:41 ..
'drwxr-xr-x. 2 root root 6 11月 26 13:51 abc
drwxr-xr-x. 2 root root 6 3月 26 2015 rh
-rw-r--r--. 1 root root 0 11月 26 13:51 test.txt
[root@localhost opt]# mv test.txt test.sh
[root@localhost opt]# vim test.sh
#!/bin/bash
read -p "是否创建/opt/share目录:(yes/no)" ack
[ $ack = "yes" ]&& mkdir /opt/share
echo "创建成功"
[root@localhost opt]# sh test.sh
是否创建/opt/share目录:(yes/no)yes
创建成功
[root@localhost opt]# ls
abc share test.sh
rh
[root@localhost opt]# vim test.sh
#!/bin/bash
read -p "是否创建/opt/demo目录:(yes/no)" ack
[ -d /opt/demo ]&&echo "/opt/demo已经存在" || mkdir /opt/demo && echo "/opt/demo创建成功"
[root@localhost opt]# sh test.sh
是否创建/opt/demo目录:(yes/no)yes
/opt/demo创建成功
[root@localhost opt]# sh test.sh
是否创建/opt/demo目录:(yes/no)yes
/opt/demo已经存在
/opt/demo创建成功
単項演算子:
I = 1;
私は++に相当する= Iは、第1の割当の代表$ I + 1、ジャーク、すなわち、無再割り当てを=
私は再び別の割り当て、割り当ての結果を追加する前に++のI =、今回はガガの意味があるだろう
[root@localhost opt]# i=1
[root@localhost opt]# echo $i
1
[root@localhost opt]# i++
bash: i++: 未找到命令...
[root@localhost opt]# i++;
bash: i++: 未找到命令...
[root@localhost opt]# expr i++
i++
[root@localhost opt]# let i++
[root@localhost opt]# echo $i
2
[root@localhost opt]# let i=i++
[root@localhost opt]# echo $i
2
[root@localhost opt]# let i++
[root@localhost opt]# echo $i
3
[root@localhost opt]# let ++i
[root@localhost opt]# echo $i
4
[root@localhost opt]# let i=++i
[root@localhost opt]# echo $i
5
[root@localhost opt]# let i=i++
[root@localhost opt]# echo $i
5
[root@localhost opt]# let i=++i
[root@localhost opt]# echo $i
6
[root@localhost opt]# let i=i+
bash: let: i=i+: 语法错误: 期待操作数 (错误符号是 "+")
[root@localhost opt]# let i=i++
[root@localhost opt]# echo $i
6
[root@localhost opt]# let i+=2
[root@localhost opt]# echo $i
8
[root@localhost opt]#
[root@localhost opt]# i\*=2
bash: i*=2: 未找到命令...
[root@localhost opt]# let i\*=2
[root@localhost opt]# echo $i
16
[root@localhost opt]# let i/=2
[root@localhost opt]# echo $i
8
[root@localhost opt]# let i%=2
[root@localhost opt]# echo $i
0
[root@localhost opt]# echo $i
0
[root@localhost opt]#
二項演算子
A + B = C
三項演算子
結果結果&&条件。1 2 ||
結果1つの実行条件が満たされ、実行結果を保持していない2
1.4.1ロジックテスト
フォーマット1:
[ 表达式1 ] 操作符 [ 表达式2 ] ···
フォーマット2:
命令1 操作符 命令2 ·······
1.4.2共通のテスト演算子
- または-a &&:論理AND、 "と" 手段
- または-o ||:論理OR、 "または"
- !:逆の意味に代わってませんロジック、
[root@localhost opt]# [ -d /etc ]&& [ -r /etc ]&&echo "you can open /etc this diretory"
you can open /etc this diretory
[root@localhost opt]# [ -d /etc ]|| [ -d /home ]&& echo "ok"
ok
[root@localhost opt]# [ -r /etc ]|| [ -d /home ]&& echo "ok"
ok
[root@localhost opt]# [ -r /etc ]|| [ -r /home ]&& echo "ok"
ok
[root@localhost opt]# [ -f /etc ]|| [ -f /home ]&& echo "ok"
[root@localhost opt]# echo $?
1
[root@localhost opt]# [ ! -f /etc ]|| [ -f /home ]&& echo "ok"
ok
II:if文の構造
2.1シングル分岐構造
エンド解析Fiの終了0正常な終了、終了1つの異常終了
分岐構造の2.2ペア
以上の2.3分岐構造
3:文の応用例の場合
3.1つの分岐if文
- そこが自動的に作成された場合の判断は、ポイント・ディレクトリをマウント
[root@localhost opt]# vim test02.sh #!/bin/bash dir="/opt/demo02" if [ ! -d $dir ] then mkdir -p $dir echo "$dir创建成功" fi [root@localhost opt]# sh test02.sh /opt/demo02创建成功 [root@localhost opt]# ls [root@localhost opt]# ls abc share test.sh rh demo02 [root@localhost opt]# vim test02.sh #!/bin/bash dir="/opt/demo02" if [ ! -d $dir ] then mkdir -p $dir echo "$dir创建成功" else echo "$dir已存在" fi [root@localhost opt]# sh test02.sh /opt/demo02已存在
## 3.2 双分支if语句
- 判断目标主机是否存活,显示检测结果
- ping -c 发送包个数 -i 间隔时间,单位s,-W 等待3s
$1 位置变量ip地址,把结果混合输出到null中
上一条结果若是等于0,成立,则输出up,else就会down
![](https://s1.51cto.com/images/blog/201911/26/a02e04631aec4534762c49c2f54bbe34.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
请输入IP地址:
```shell
[root@localhost opt]# vim test02.sh
#!/bin/bash
read -p "请输入IP地址:" addr
ping -c 3 -i 0.2 -W 3 $addr &> /dev/null
if [ $? -eq 0 ]
then
echo "$addr is up"
else
echo "$addr is down"
fi
[root@localhost opt]# sh test02.sh
请输入IP地址:192.168.139.132
192.168.139.132 is up
[root@localhost opt]# sh test02.sh
请输入IP地址:139.168.139.133
139.168.139.133 is down
[root@localhost opt]#
以上の3.3ブランチ声明
そうでない場合、ELIF
1番出口異常終了
[root@localhost opt]# vim fenshu.sh
#!/bin/bash
read -p "请输入您的分数" score
if [ $score -lt 0 ]
then
echo "你已经没救了"
elif [ $score -gt 100 ]
then
echo "别做梦"
elif [ $score -ge 85 ]
then
echo "成绩优秀"
elif [ $score -lt 70 ]
then
echo "不及格,还要好好努力啊少年"
else
echo "成绩合格,不要就此止步,继续努力!"
fi
~
[root@localhost opt]# sh fenshu.sh
请输入您的分数-9
你已经没救了
[root@localhost opt]# sh fenshu.sh
请输入您的分数101
别做梦
[root@localhost opt]# sh fenshu.sh
请输入您的分数90
成绩优秀
[root@localhost opt]# sh fenshu.sh
请输入您的分数60
不及格,还要好好努力啊少年
要約:
- 構文条件の試験運転
- テストファイル、整数値を比較し、文字列比較ロジックテスト
- 条件文の場合構文図
- シングルブランチ、ダブルブランチ、マルチブランチ
シンプルな電卓
#!/bin/bash
read -p "请输入一个整数:" numb1
read -p "请选择你需要的运算;选项:加(+)减(-)乘(x)除(/)取余 (%)" yunsuan
read -p "请输入第二个整数:" numb2
if [ "$yunsuan" = "+" ]
then
expr=`expr $numb1 + $numb2`
echo "$numb1 + $numb2 = $expr"
elif [ "$yunsuan" = "-" ]
then
expr=`expr $numb1 - $numb2`
echo "$numb1 - $numb2 = $expr"
elif [ "$yunsuan" = "x" ]
then
expr=`expr $numb1 \* $numb2`
echo "$numb1 x $numb2 = $expr"
elif [ "$yunsuan" = "/" ]
then
expr=`expr $numb1 / $numb2`
echo "$numb1 / $numb2 = $expr"
else
expr=`expr $numb1 % $numb2`
echo "$numb1 % $numb2 = $expr"
fi
~
~
[root@localhost opt]# sh jisuanqi.sh
请输入一个整数:10
请选择你需要的运算;选项:加(+)减(-)乘(x)除(/)取余 (%)+
请输入第二个整数:8
10 + 8 = 18
[root@localhost opt]# vim jisuanqi.sh
[root@localhost opt]# sh jisuanqi.sh
请输入一个整数:10
请选择你需要的运算;选项:加(+)减(-)乘(x)除(/)取余 (%)-
请输入第二个整数:5
10 - 5 = 5
[root@localhost opt]# sh jisuanqi.sh
请输入一个整数:10
请选择你需要的运算;选项:加(+)减(-)乘(x)除(/)取余 (%)x
请输入第二个整数:2
[root@localhost opt]# sh jisuanqi.sh
请输入一个整数:17
请选择你需要的运算;选项:加(+)减(-)乘(x)除(/)取余 (%)%
请输入第二个整数:4
17 % 4 = 1
[root@localhost opt]# sh jisuanqi.sh
请输入一个整数:10
请选择你需要的运算;选项:加(+)减(-)乘(x)除(/)取余 (%)/
请输入第二个整数:5
10 / 5 = 2
仕事:リスト名性別スコアのうちトラックとフィールドのファイナリスト
[root@localhost opt]# vim tianjingsai.sh
1 #!/bin/bash
2 fnan=/opt/nanzizujuesaimingdan
3 fnv=/opt/nvzizujuesaimingdan
4 ftao=/opt/taotaimingdan
5 if [ ! -f $fnan ]&& [ ! -f $fnv ]&& [ ! -f $ftao ]
6 then
7 touch $fnan $fnv $tao
8 fi
9 read -p "请输入(格式:姓名 性别 成绩):" xingming xingbie chengji
10 if [ $chengji -lt 0 ]
11 then
12 echo "???你在输什么??"
13 exit 1
14 elif [ $chengji -gt 0 ] && [ $chengji -lt 10 ]
15 then
16 echo "你的成绩优秀,可以进入10秒内决赛"
17 if [ $xingbie = "nan" ]
18 then
19 echo "$xingming $xingbie $chengji" >> /opt/nanzizujuesaimingdan
20 else
21 echo "$xingming $xingbie $chengji" >> /opt/nvzizujuesaimingdan
22 fi
23 else
24 echo "$xingming $xingbie $chengji" >> /opt/taotaimingdan
25 echo "再加把劲,下次就是你了"
26
27 fi
~
[root@localhost opt]# sh tianjingsai.sh
请输入(格式:姓名 性别 成绩):gsy nan 1
你的成绩优秀,可以进入10秒内决赛
[root@localhost opt]# sh tianjingsai.sh
请输入(格式:姓名 性别 成绩):zzz nv 6
你的成绩优秀,可以进入10秒内决赛
[root@localhost opt]# sh tianjingsai.sh
请输入(格式:姓名 性别 成绩):aaa nan -6
???你在输什么??
[root@localhost opt]# sh tianjingsai.sh
请输入(格式:姓名 性别 成绩):aaa nan 14
再加把劲,下次就是你了
[root@localhost opt]# ls
fenshu.sh nvzizujuesaimingdan taotaimingdan test.sh wwwroot
nanzizujuesaimingdan rh test02.sh tianjingsai.sh
[root@localhost opt]# cat nvzizujuesaimingdan
zzz nv 6
[root@localhost opt]# cat nanzizujuesaimingdan
gsy nan 1
[root@localhost opt]# cat taotaimingdan
gsy nan 0.5
aaa nan 14