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,如需轉載請自行聯系原作者