當前位置:
首頁 > 最新 > linux-shell之流程式控制制

linux-shell之流程式控制制

## shell編程之流程式控制制 ##

```

概述:

流程式控制制在每一門編程語言裡面都有,無論是低級語言還是高級語言,這個是我們日常中最基礎的操作,在shell腳本中也不例外,今天我們談談流程式控制制。

```

### shell之if ###

```

語法結構:

if condition1

then

conmand1

command2

...

[elif] condition2

[then]

command3

...

[else]

command4

...

fi

notice:

跟其他語言的if差不多,可以把每一塊代碼,看成是一個分支,這個字每個流程就很清楚了。當condition1滿足的話,就去找他後邊的then中的代碼塊去執行,如果condition1不滿足,再去看下一個分支。都不滿足執行else

```

代碼測試:

```

我們以查找某個用戶為例進行測試:

首先查看下我們系統的用戶,全部的用戶是放在/etc/passwd這個文件的,我們將用戶名篩選出來:

cat /etc/passwd | awk -F: ""

命令解釋:

awk一個文本處理的,感興趣的可以去學一下,我這裡介紹我裡面有的

-F: 指明:作為分隔符

$1: 代表的是分隔後的第一個域

我們在找一下我們要測試的用戶test,只要將上述的命令通過管道給grep就好了:

cat /etc/passwd | awk -F: "" | grep "test"

命令解釋:

grep幫助我們篩選出含有test的行

我這裡是什麼都沒有輸出的,之後創建我們的腳本如下:

```

測試代碼:

```

#!/bin/bash

if cat /etc/passwd |grep "test"

then

echo "test user exists"

else

echo "no this user"

fi

notice:

注意默認的是沒有許可權的,先加許可權在執行

```

運行代碼:

```

結果:

no this user

```

現在我們開始創建用戶:

```

useradd test #請確保你有足夠的許可權

之後我們在通過上邊的那個用戶查看下當前用戶是否有test:

cat /etc/passwd | awk -F: "" | grep "test"

結果:

test(說明當前有這個用戶了)

```

我們在運行我們的腳本,結果如下:

```

test user exists

```

到此if語句介紹結束

---

### shell編程之for循環: ###

```

語法如下:

for item in a b c d e

do

command

done

研究一下for:

首先我們看到in後邊是空格分隔的一系列字元,我們想大概是用空格符分隔的一個list,我們可以去猜想是不是只要是空白符就會認為是一項。我們可以進行嘗試,發現就是空白符就行分割的,但是換行不行。

```

測試代碼:

```

#!/bin/bash

for a in h e l l o

do

echo $a

done

```

```

其實吧,是IFS這個環境變數在作怪,我們可以修改其然後使用其他分割。我們測試下回車分割。

```

測試代碼:

```

我們輸出/etc/passwd中的每一行。

#!/bin/bash

IFS=$"
"

i=0

for a in `cat /etc/passwd`

do

echo $i

echo $a

i=$[ $i +1 ]

done

```

坑:

```

在測試:分割的時候,我使用如下代碼測試結果比較奇怪:懂原因的可以給我回復下,小弟非常感謝。

IFS=$":"

test="a:b:c:d:"

for a in $test#當在$test的位置直接放a:b:c:d的時候輸出為a b c d很奇怪

do

echo $a

done

```

另一中c語言風格的for

```

語法格式:

for((i=0;i

do

command

done

```

### while語句 ###

```

語法格式:

while condition

do

conmmand

done

```

condition:

```

測試命令和平時我們語言所使用的不太一樣,測試成功的話,返回0,失敗返回非0

測試命令的兩種結構:

test expression

expression是一個表達式,可以進行算數和文本的比較

[ expression ]#記得前後都有一個空格

```

測試代碼:

```

#!/bin/bash

i=0

while [ $i -lt 9 ]

do

echo $i

i=$[$i+1]

done

```

### until ###

```

語法格式:

until condition

do

command

done

```

測試代碼:

```

#!/bin/bash

i=0

until [ $i -gt 8 ]

do

echo $i

i=$[$i+1]

done

```

### case ###

```

這是應該也是分之處理的,語法格式:

case value in

模式1)

command1

command2;;#注意在命令的結束是兩個;

模式2)

command1

command2;;

*)#匹配其他的

command1

command2;;

esac

```

測試代碼:

```

#!/bin/bash

a=tesddsat

case $a in

"test")

echo "testtest"

echo 1;;

"test11")

echo "testtest"

echo 2;;

*)

echo "3";;

esac

```

### 退出循環 ###

```

退出循環包括兩個命令:

continue#退出一次

break#z終止循環

```

測試代碼:

```

任務進行一個1~10的循環,每次循環獲取用戶輸入,得到m跳過一次循環,得到n終止循環

#!/bin/bash

for((i=0;i

do

read test

if [ $test == m ]#注意此處的比較==前後記得加空格,要不然和預期的不一樣

then

echo "enter $test"

continue

echo "mmmmmmmmm"

elif [ $test == n ]

then

echo "enter $test"

break

echo "nnnnnn"

fi

echo $i

done

```

**既然都看到這兒了,老鐵關注一波吧,小弟謝過了**


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 菜鳥ai 的精彩文章:

TAG:菜鳥ai |