Shell 流程控制

2021-08-14 20:12:26 字數 3895 閱讀 2854

格式1

語法:

if 條件 ;then commond;fi

eg:

#!/bin/bash

a=5if [ $a

-gt3 ]

then

echo

"大於3"

fi

格式2

語法:

if 條件1;then commond1;else commond2;fi

eg:

#!/bin/bash

a=5if [ $a

-gt3 ]

then

echo

"大於3"

else

echo

"不大於3"

fi

格式3

語法:

if 條件1;then commond1;elif 條件2;then commond2;else commond3;fi

eg:

#!/bin/bash

a=5if [ $a

-lt3 ]

then

echo

"a<3"

elif [ $a

-gt6 ]

then

echo

"a>6"

else

echo

"out of the zone"

fi

eg:

#!/bin/bash

n=`wc -l /tmp/test.txt`

if [ $n

-gt20 ]

then

echo

1else

echo

0fi

在該指令碼中無語法錯誤,只是我們預設/tmp/test.txt是存在的,如果該檔案不存在,該指令碼執行的時候就會報錯:

[root@dl-001 sbin]# sh  if.sh 

wc: /tmp/test.txt: 沒有那個檔案或目錄

if.sh: 第 3 行:[: -gt: 期待一元表示式

所以,為了避免這種錯誤的發生,需要將指令碼寫的更加嚴謹,需要在執行「if [ $n -gt 20 ]」之前先確認檔案「/tmp/test.txt」是否存在:

#!/bin/bash

n=`wc -l /tmp/test.txt`

if [ -z $n ]

then

echo

"error"

exit

elif [ $n

-lt20 ]

then

echo

1else

echo

0fi

即,如果變數n為空則顯示error並退出該指令碼。

[root@dl-001 sbin]# sh  if.sh 

wc: /tmp/test.txt: 沒有那個檔案或目錄

error

即,當該檔案不存在的時候就會退出執行,不會提示存在語法錯誤。

eg:

#判斷某引數存在:

[root@dl-001 sbin]# vim if1.sh

#!/bin/bash

if grep -wq 'user1' /etc/passwd

then

echo

"user1 exist."

fi[root@dl-001 sbin]# sh if1.sh

#判斷某引數不存在:

[root@dl-001 sbin]# vim if2.sh

#!/bin/bash

if ! grep -wq 'user1' /etc/passwd

then

echo

"no user1"

fi[root@localhost sbin]# sh if2.sh

no user1

說明: grep中-w選項=word,表示過濾乙個單詞;-q,表示不列印過濾的結果。判斷某引數不存在時使用!表示取反。

格式:

case 變數名 in

value1)

commond1

;;value2)

commod2

;;value3)

commod3

;;esac

在case中,可以在條件中使用「|」,表示或的意思,如:

2|3)        //表示2或者3

commond

;;

小練習(需求:輸入考試成績,判斷考試成績的等級)
[root@dl-001 sbin]# vim case1.sh

#!/bin/bash

read -p "please input a number: " n

if [ -z "$n" ]

then

echo

"please input a number."

exit

1#「exit 1」表示執行該部分命令後的返回值

#即,命令執行完後使用echo $?的值

fin1=`echo

$n|sed 's/[0-9]//g'`

#判斷使用者輸入的字元是否為純數字

#如果是數字,則將其替換為空,賦值給$n1

if [ -n "$n1" ]

then

echo

"please input a number."

exit

1#判斷$n1不為空時(即$n不是純數字)再次提示使用者輸入數字並退出

fi#如果使用者輸入的是純數字則執行以下命令:

if [ $n

-lt60 ] && [ $n -ge 0 ]

then

tag=1

elif [ $n -ge 60 ] && [ $n

-lt80 ]

then

tag=2

elif [ $n -ge 80 ] && [ $n

-lt90 ]

then

tag=3

elif [ $n -ge 90 ] && [ $n -le 100 ]

then

tag=4

else

tag=0

fi#tag的作用是為判斷條件設定標籤,方便後面引用

case

$tag

in1)

echo

"not ok"

;;2)

echo

"ok"

;;3)

echo

"ook"

;;4)

echo

"oook"

;;*)

echo

"the number range is 0-100."

;;esac

執行結果:

[root@dl-001 sbin]# sh case1.sh 

please input a number:

90oook

[root@dl-001 sbin]# sh case1.sh

please input a number:

80ook

[root@dl-001 sbin]# sh case1.sh

please input a number:

60ok

[root@dl-001 sbin]# sh case1.sh

please input a number:

55not ok

Shell流程控制

case迴圈 if condition condition then statements if true 1 elif condition condition then statements if true 2 else statements if all else fails fi注 方括號中的...

Shell 流程控制

shell的流程控制不可為空,如果else分支沒有語句執行,就不要寫這個else。if 語句語法格式 if condition then command1 command2 commandn fi寫成一行 適用於終端命令提示符 if ps ef grep c ssh gt 1 then echo t...

Shell流程控制

shell 流程控制 if else if語法格式 if condition then command1 command2 fi 末尾的fi就是if倒過來拼寫 if else語法 if condition then command1 command2 else command1 fi if else...