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 &> </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> </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 > </code><code>/dev/null</code> <code>2>&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 ] && </code><code>echo</code> <code>"Only root."</code> <code>&& </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 &> </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> </code><code>/dev/null</code>
<code> </code><code>[ $? -</code><code>ne</code> <code>0 ] && </code><code>echo</code> <code>"UserName is not legal"</code> <code>&& </code><code>continue</code>
<code> </code><code>echo</code> <code>"user${i}"</code> <code>| </code><code>passwd</code> <code>--stdin user${i} &> </code><code>/dev/null</code>
<code> </code><code>[ $? -</code><code>ne</code> <code>0 ] && </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 &> </code><code>/dev/null</code>
<code> </code><code>useradd</code> <code>$i 2> </code><code>/dev/null</code>
<code> </code><code>echo</code> <code>"${i}"</code> <code>| </code><code>passwd</code> <code>--stdin ${i} &> </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\>'</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\>' | tr -s ' ' | cut -d' ' -f6 | sort -u | wc -l)"</code>
<code># netstat -tan | grep '^tcp\>' | 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,如需转载请自行联系原作者