天天看点

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,如需转载请自行联系原作者

继续阅读