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

ここに画像の説明を挿入
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/s15212790607/article/details/114329729