天天看點

Linux之bash腳本程式設計---if補充和for循環

if 單分支、雙分支、多分支、嵌套if語句

for 清單表示

    1、給出清單

    2、{1..100}

    3、指令引用:

        1)$(ls DIR)

        2)$(1 1 100)

    4、glob

    5、$*,$@

condition   

declare -i -r -x

readonly

export ,env

set,printenv,env,export,readonly -p

bash:過程式程式設計,為了完成更複雜的任務,支援順序執行、選擇執行、循環執行

  順序執行:從左而右,依次執行指令。

  選擇執行:依據condition(條件)的執行狀态結果,選擇執行不同的代碼片段。

  循環執行:依據condition(條件)的執行狀态結果,決定是否進入循環。

condition:

   ture: 表示條件狀态結果為0

   false: 表示條件執行狀态結果非0

if

   單分支、雙分支、多分支、嵌套if語句

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

<code>1、單分支結構</code>

<code>if</code> <code>condition; </code><code>then</code>

<code>    </code><code>if</code><code>-ture</code>

<code>fi</code>

<code>2、雙分支結構</code>

<code>else</code>

<code>    </code><code>if</code><code>-</code><code>false</code>

<code>3、多分支結構</code>

<code>elif</code> <code>condition; </code><code>then</code>

<code>    </code><code>....</code>

<code>    </code><code>all-</code><code>false</code>

<code>4、嵌套</code><code>if</code><code>語句</code>

<code>    </code><code>if</code> <code>condition; </code><code>then</code>

<code>        </code><code>if</code><code>-ture</code>

<code>    </code><code>fi</code>

<code>    </code><code>fi</code>   

for

清單循環

格式

<code>1、格式一</code>

<code>for</code> <code>變量名 </code><code>in</code> <code>清單; </code><code>do</code>

<code>    </code><code>循環體</code>

<code>done</code>

<code>2、格式二</code>

<code>for</code> <code>變量名 </code><code>in</code> <code>清單</code>

<code>do</code>

<code>    </code><code>循環休</code>

<code>3、格式三,指令行中</code>

<code>for</code> <code>變量名 </code><code>in</code> <code>清單; </code><code>do</code> <code>循環體; </code><code>done</code>

清單表示方法

    2、{首位..尾數} ,例如 1到100表示為" {1..100}"

        2)$(expr [首數 [步長]] 尾數),例如 1到100表示為"$(1 1 100)"

    4、通配符, glob . 例如 /var目錄下一級子目錄中的所有檔案和目錄的絕對路徑。/var/*

    5、變量引用。 $* 向腳本傳遞的所有參數,整體。$@向腳本傳遞的所有參數,每個獨立

腳本格式

<code>#!/bin/bash</code>

<code># Version: major.minor.release</code>

<code># Author:</code>

<code># Desc:</code>

腳本文法檢測

<code># bash -n file.sh</code>

調試腳本

<code># bash -x file.sh</code>

記錄腳本退出狀态碼

<code>INTEVAL=$? (變量引用實作指派)</code>

使用者郵箱位置

<code>/var/mail</code>

定義變量的類型

<code>整型: </code><code># declare -i var</code>

定義變量

<code>1、環境變量</code>

<code># env var</code>

<code># declare -x var</code>

<code># export var</code>

<code>2、隻讀變量</code>

<code># declare -r var</code>

<code># readonly var</code>

顯示本地和環境變量

<code># set</code>

顯示環境變量

<code># export</code>

<code># env</code>

<code># printenv</code>

顯示隻讀變量

<code># readonly -p</code>

示例一:互動式給出一個檔案路徑,判斷檔案的類型

<code># Version: 0.0.1</code>

<code># Author: Lcc.org</code>

<code># Description:testing</code>

<code>read</code> <code>-t 5 -p </code><code>'Enter a file path: '</code> <code>filename</code>

<code>if</code> <code>[ -z </code><code>"$filename"</code> <code>]; </code><code>then</code>

<code>    </code><code>echo</code> <code>"Enter a file path"</code>

<code>    </code><code>exit</code> <code>1</code>

<code>if</code> <code>[ ! -e $filename ]; </code><code>then</code>

<code>    </code><code>echo</code> <code>"No such file."</code>

<code>    </code><code>exit</code> <code>2</code>

<code>if</code> <code>[ -f $filename ]; </code><code>then</code>

<code>    </code><code>echo</code> <code>"Common file."</code>

<code>elif</code> <code>[ -h $filename ]; </code><code>then</code>

<code>    </code><code>echo</code> <code>"Symbolic file."</code>

<code>elif</code> <code>[ -d $filename ]; </code><code>then</code>

<code>    </code><code>echo</code> <code>"Directory."</code>

<code>else</code> 

<code>    </code><code>echo</code> <code>"Other type."</code>

示例二:添加10個使用者,user1 ,,....user10,密碼同使用者名(隻有root能改密碼)。

**隻有root能修改密碼**

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

<code>1、清單,直接給出</code>

<code># Version: 0.0.2</code>

<code># Description: add user</code>

<code>##避免執行指令的使用者非root使用者,非root使用者是不能修改密碼的。</code>

<code>if</code> <code>[ $UID -</code><code>ne</code> <code>0 ]; </code><code>then</code>

<code>  </code><code>echo</code> <code>"Only root."</code>

<code>  </code><code>exit</code> <code>1</code>

<code>##以給出清單的方式,循環。當清單循環完畢時,循環結束</code>

<code>for</code> <code>i </code><code>in</code> <code>user1 user2 user3 user4 user5 user6 user7 user8 user9 user10; </code><code>do</code>

<code>  </code><code>## 判斷使用者是否存在。</code>

<code>  </code><code>if</code> <code>id</code> <code>$i &amp;&gt; </code><code>/dev/null</code><code>; </code><code>then</code>

<code>    </code><code>## 執行狀态結果為0時,條件為真時,說明什麼呢?</code>

<code>    </code><code>echo</code> <code>"$i exist"</code>

<code>  </code><code>else</code>

<code>        </code><code>## 使用者不存在時,即可添加使用者</code>

<code>    </code><code>if</code> <code>! </code><code>useradd</code> <code>$i 2&gt; </code><code>/dev/null</code><code>; </code><code>then</code>

<code>      </code><code>## 添加不成功時, 組合中,對指令或測試條件取反。</code>

<code>      </code><code>echo</code> <code>"$i is outside the law"</code>

<code>    </code><code>else</code>

<code>      </code><code>## 使用者名,正常,能正常添加使用者,則可以給其添加密碼</code>

<code>          </code><code>echo</code> <code>"$i"</code> <code>| </code><code>passwd</code> <code>--stdin $i &gt; </code><code>/dev/null</code> <code>2&gt;&amp;1</code>

<code>          </code><code>## 數值測試添加密碼的執行狀态結果。</code>

<code>      </code><code>if</code> <code>[ $? -</code><code>ne</code> <code>0 ]; </code><code>then</code>

<code>        </code><code>## 結果不為0,表示執行不成功</code>

<code>        </code><code>echo</code> <code>"password is not legal"</code>

<code>      </code><code>fi</code>

<code>  </code><code>fi</code>

<code>2、{1..10}</code>

<code># Version: 0.0.3</code>

<code># Description: {}表示清單</code>

<code>[ ! $UID -</code><code>eq</code> <code>0 ] &amp;&amp; </code><code>echo</code> <code>"Only root."</code>  <code>&amp;&amp; </code><code>exit</code> <code>1</code>

<code>for</code> <code>i </code><code>in</code> <code>{1..10}</code>

<code>  </code><code>id</code> <code>user$i &amp;&gt; </code><code>/dev/null</code>

<code>  </code><code>if</code> <code>[ $? -</code><code>eq</code> <code>0 ]; </code><code>then</code>

<code>    </code><code>echo</code> <code>"user$i exist"</code>

<code>    </code><code>useradd</code> <code>user$i 2&gt; </code><code>/dev/null</code>

<code>    </code><code>[ $? -</code><code>ne</code> <code>0 ] &amp;&amp; </code><code>echo</code> <code>"UserName is not legal"</code> <code>&amp;&amp; </code><code>continue</code>

<code>    </code><code>echo</code> <code>"user${i}"</code> <code>| </code><code>passwd</code> <code>--stdin user${i} &amp;&gt; </code><code>/dev/null</code>

<code>    </code><code>[ $? -</code><code>ne</code> <code>0 ] &amp;&amp; </code><code>echo</code> <code>"Password is not legal"</code>

<code>    </code><code>echo</code> <code>"Add user user$i finished"</code>

<code>3、指令引用</code>

<code># Version: 0.0.4</code>

<code># Description:  $(seq 10)表示清單</code>

<code>for</code> <code>i </code><code>in</code> <code>$(</code><code>seq</code> <code>10)</code>

<code>4、特殊變量</code>

<code># Version: 0.0.5</code>

<code># Description: $*,$@表示清單</code>

<code>for</code> <code>i </code><code>in</code> <code>$*</code>

<code>  </code><code>id</code> <code>$i &amp;&gt; </code><code>/dev/null</code>

<code>    </code><code>useradd</code> <code>$i 2&gt; </code><code>/dev/null</code>

<code>    </code><code>echo</code> <code>"${i}"</code> <code>| </code><code>passwd</code> <code>--stdin ${i} &amp;&gt; </code><code>/dev/null</code>

<code>    </code><code>echo</code> <code>"Add user $i finished"</code>

示例三:判斷/var/目錄下每個檔案的類型

<code>方法一</code>

<code># Version: 0.0.6</code>

<code># Description: file type</code>

<code>for</code> <code>i </code><code>in</code> <code>/var/</code><code>*; </code><code>do</code>

<code>  </code><code>if</code> <code>[ -f $i ]; </code><code>then</code>

<code>      </code><code>echo</code> <code>"Common file."</code>

<code>  </code><code>elif</code> <code>[ -L $i ]; </code><code>then</code>

<code>      </code><code>echo</code> <code>"Symbolic file."</code>

<code>  </code><code>elif</code> <code>[ -d $i ]; </code><code>then</code>

<code>      </code><code>echo</code> <code>"Directory."</code>

<code>    </code><code>echo</code> <code>"Other type"</code>

<code>方法二:</code>

<code># Version: 0.0.7</code>

<code># Description: Galaxy </code>

<code>cd</code> <code>/var</code>

<code>for</code> <code>i </code><code>in</code> <code>$(</code><code>ls</code> <code>/var</code><code>); </code><code>do</code>

<code>方法三:</code>

<code># Version: 0.0.8</code>

<code># Description: Add DIR</code>

<code>    </code><code>if</code> <code>[ -f </code><code>/var/</code><code>$i ]; </code><code>then</code>

<code>        </code><code>echo</code> <code>"Common file"</code>

<code>    </code><code>elif</code> <code>[ -L </code><code>/var/</code><code>$i ]; </code><code>then</code>

<code>        </code><code>echo</code> <code>"Symbolic file"</code>

<code>    </code><code>elif</code> <code>[ -d </code><code>/var/</code><code>$i ]; </code><code>then</code>

<code>        </code><code>echo</code> <code>"Directory"</code>

<code>        </code><code>echo</code> <code>"Other type"</code>

示例四:tcp協定下處于ESTABLISH狀态的有多少個,LiSTEN有多少個,有幾種狀态

<code>方法一:</code>

<code># Version: 0.0.9</code>

<code># Description: statusTCP</code>

<code>declare</code> <code>-i listen=0</code>

<code>declare</code> <code>-i established=0</code>

<code>declare</code> <code>-i other=0</code>

<code>for</code> <code>i </code><code>in</code> <code>$(</code><code>netstat</code> <code>-tan | </code><code>grep</code> <code>'^tcp\&gt;'</code> <code>| </code><code>tr</code> <code>-s </code><code>' '</code> <code>| </code><code>cut</code> <code>-d</code><code>' '</code> <code>-f6); </code><code>do</code>

<code>    </code><code>if</code> <code>[ </code><code>"$i"</code> <code>== </code><code>"LISTEN"</code> <code>]; </code><code>then</code>

<code>        </code><code>let</code> <code>listen++</code>

<code>    </code><code>elif</code> <code>[ </code><code>"$i"</code> <code>== </code><code>"ESTABLISHED"</code> <code>]; </code><code>then</code>

<code>        </code><code>let</code> <code>established++</code>

<code>        </code><code>let</code> <code>other++</code>

<code>echo</code> <code>-e </code><code>"LISTEN statu: $listen\nESTABLISHED statu: $established\nOther status: $other\nTotal type: $(netstat -tan | grep '^tcp\&gt;' | tr -s ' ' | cut -d' ' -f6 | sort -u | wc -l)"</code>

<code># netstat -tan | grep '^tcp\&gt;' | awk -v FS=' ' '{ARRAY[$NF]++}END{for(i in ARRAY){print i,ARRAY[i]}}'</code>

<code>LISTEN 12</code>

<code>CLOSE_WAIT 1</code>

<code>ESTABLISHED 3</code>

本文轉自 lccnx 51CTO部落格,原文連結:http://blog.51cto.com/sonlich/1955978,如需轉載請自行聯系原作者

繼續閱讀