Shell-ifおよびcase条件ステートメント
1.状態テスト
1.ファイルテストと整数テスト
1.テストコマンド
式が確立されているかどうかをテストします。確立されている場合は0を返し、そうでない場合は他の値を返します。
形式1:条件式をテストします。
形式2:[条件式]
2.ファイルテスト
ファイルテスト
[演算子ファイルまたはディレクトリ]
一般的なテスト演算子
-d:ディレクトリかどうかをテストします(ディレクトリ)
-e:ディレクトリまたはファイルが存在するかどうかをテストします(存在します)
-f:ファイルかどうかをテストします(ファイル)
-r :test現在のユーザーに読み取り権限がある
かどうかをテストしますか(読み取り)-w:現在のユーザーに書き込み権限があるかどうかをテストします(書き込み)
-x:現在のユーザーに実行権限があるかどうかをテストします(eXcute)
一般的に使用されるテスト演算子
[ -d /medialcdrom]
echo $?
0 #0表示条件成立
[ -d lmedialcdromlServer]
echo $?
0 #1表示条件不成立
[ -d /medialcdrom ] && echo "YES" #&&逻辑与,而且的意思
YES
3.整数値の比較
[整数1演算子整数2]
一般的に使用されるテスト演算子
-eq:等しい(等しい)
-ne:等しくない(等しくない)
-gt:より大きい(より大きい)
-lt:より小さい(より小さい)
-le:より小さいまたは等しい(より小さいまたは等しい)
-ge:より大きいまたは等しい
一般的に使用されるテスト演算子
who | wc -l
1
[ $(who ] wc -l) -gt 5 ] && echo "Too many." #用户数是否>5
Too many.
[ $(who | wc -l) -ge 10 ] && echo "> = 10." #用户数是否>=10
[root@localhost ~]# FreeCC=$(free -rli | grep "Mem: " | awk "{print $4}')
[root@localhost ~]#[ $FreeCC -lt 1024] && echo ${FreeCCMB #空闲内存是否<1024MB
275MB
2.文字列テストと論理テスト
1.文字列の比較
形式1
[文字列1 =文字列2]
[文字列1!=文字列2]
形式2
[-z文字列]
一般的に使用されるテスト演算子
=:文字列の内容は同じ
です!=:文字列の内容は異なります!記号は反対の意味を意味します-
z:文字列の内容が空です
2.論理テスト
形式1
[式1]演算子[式2] ...
形式2
[コマンド1演算子コマンド2] ...
一般的に使用されるテスト演算子
-aまたは&&:論理AND、「and」は
-oまたは|:論理Or、 「または」の意味T:論理番号
[-d / etc] && [-r / etc] && echo "開くことができます"
[-d / etc] ll [-d / home] && echo "ok"
2、ifステートメント
1.単一ブランチステートメントの場合
条件付きテスト操作の場合は単一ブランチステートメント形式
、
コマンドシーケンス
fi
3种命令序列
①
if [ 3 -gt 2 ]
> then
> echo "yes"
> fi
yes
②
if [ 3 -gt 2 ]; then echo "yes"; fi
yes
③
[ 3 -gt 2 ] && echo "yes"
yes
2.二重分岐ステートメントの場合
条件付きテスト操作の場合はダブルブランチステートメント形式
、
コマンドシーケンス1、
それ以外の場合は
コマンドシーケンス2
fi
#!/bin/bash
netstat -natp | grep ":80" &> /dev/null
if [ $? -eq 0 ]
then
echo "httpd服务已在运行"
else
echo "httpd未运行,请启动服务"
echo "systemctl restart httpd"
fi
3.マルチブランチステートメントの場合
多分岐文の形式
であれば、条件付きテスト動作1
、コマンド・シーケンス1
の条件付きテスト動作2のelif
、コマンド・シーケンス2
他の
コマンドシーケンス3
Fiの
#!/bin/bash
read -p "请输入你的分数:" score
if [ $score -ge 85 -a $score -le 100 ]then
echo "你的分数为: ${score} ,优秀!"
elif [ $score -ge 70 ] &&[ $score -lt 85 ];then
echo "你的分数为: ${score} ,一般般"
elif [[ score -lt 70 && $score -ge 0 ]];then
echo "你的分数为: ${score} ,30遍!"
else
echo "输入有误,请重新输入!"
fi
3、ケースブランチステートメント
1.ケースマルチブランチ構造
case 变量值 in
模式一)
命令序列
;;
模式二)
命令序列
;;
*)
默认命令序列
esac
case语句注意事项
①case行首必须以单词“in”,每一模式必须以单个右括号")"结束
②双分号";;"表示命令序列的结束
③模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]";还可以使用竖杠|表示或,比如a|b
最后的*)表示默认模式,其中的*相当于通配符
2.例
ユーザーにテストのスコアを入力するように促します。スコアは0〜75が悪い、70〜85が平均、85〜100が優れている必要があります。他の文字を入力すると、プロンプトが表示されます。間違いがある場合は、もう一度入力してください。
方法1
#!/bin/bash
read -p "请输入你的分数(0-100):" x
[ $x -ge 85 -a $x -le 100 ] && a="1" &> /dev/null
[ $x -ge 70 ] && [ $x -lt 85 ] && a="2" &> /dev/null
[[ $x -lt 70 && $x -ge 0 ]] && a="3" &> /dev/null
case $a in
1)
echo "你的分数为$x ,优秀"
;;
2)
echo "你的分数为$x,一般般"
;;
3)
echo "你的分数为$x,30遍!"
;;
*)
echo "输入有误,请重新输入!"
esac
方法2
#!/bin/bash
read -p "请输入你的分数(0-100):" x
case $x in
8[5-9]|9[0-9]|100)
echo "你的分数为${x} ,优秀"
;;
8[0-4]|7[0-9])
echo "你的分数为${x},一般般"
;;
[0-9]|0[1-6][0-9])
echo "你的分数为${x},30遍!"
;;
*)
echo "输入有误,请重新输入!"
esac