1 流程控制:2 循环语句:for,while,until3
4 while循环:5
6 whileCONDITION; do7 循环体8 done9
10 进入条件:当CONDITION为“真”;11 退出条件:当CONDITION为“假”;12
13 whileCONDITION; do14 循环体15 控制变量的修正表达式16 done17
18 示例:求100以内所有正整数之和;19 #!/bin/bash
20 #21 declare -i sum=022 declare -i i=1
23
24 while [ $i -le 100]; do25 let sum+=$i26 let i++
27 done28
29 echo "Sum: $sum."
30
31 练习:分别求100以内所有奇数之和,及所有偶数之和;32
33 示例:打印九九乘法表;34 #!/bin/bash
35 #36 declare -i i=1
37 declare -i j=1
38
39 while [ $j -le 9]; do40 while [ $i -le $j ]; do41 echo -e -n "${i}X${j}=$[$i*$j]"
42 let i++
43 done44 echo45 let i=1
46 let j++
47 done48
49 until循环:50 until CONDITION; do51 循环体52 循环控制变量的修正表达式53 done54
55 进入条件:当CONDITION为“假”时56 退出条件:当CONDITION为“真”时57
58 示例:求100以内正整数之和;59 #!/bin/bash
60 #61 declare -i sum=062 declare -i i=1
63
64 until [ $i -gt 100]; do65 let sum+=$i66 let i++
67 done68
69 echo "Sum:$sum."
70 练习1:分别求100以内所有偶数之和,以及所有奇数之和;71 练习2:实现九九乘法表;72 练习3:分别使用while和until循环实现添加10个用户:user-user10;73
74 循环控制:75 continue:提前结束本轮循环,而直接进入下一轮;76 break[n]:提前结束循环;77
78 whileCONDTION;do79 .......80 ifCONDITION; then81 break[n]82 fi83 done84
85 whileCONDTION;do86 .......87 ifCONDTION2; then88 continue[n]89 fi90 .......91
92 示例:求100以内所有偶数之和;93 #!/bin/bash
94 #95 declare -i sum=096 declare -i i=097
98 while [ $i -le 100]; do99 let i++
100 if [ $[$i%2] -eq 1]; then101 echo "$i is a odd."
102 continue
103 fi104 let sum+=$i105 done106
107 echo "Sum:$sum."
108
109 死循环:110 whiletrue; do111 循环体112 ifCONDITION; then113 break
114 fi115 done116
117 until false; do118 循环体119 ifCONDITION; then120 break
121 fi122 done123
124 示例;每隔3秒钟查看当前系统是否有名为'gentoo'的用户登录;125 如果其次查看gentoo登录了,则显示gentoo已经登录;126 如果未登录,就显示仍然未开始,并显示这是已经是第多少次查看了;127
128 #!/bin/bash
129 #130 username=$1
131 declare -i count=0132
133 whiletrue; do134 if who | grep "^$username" &> /dev/null; then135 echo "$username is logged."
136 break
137 else
138 let count++
139 echo "$count $username is not login."
140 fi141 sleep 3
142 done143
144 示例:2
145
146 #!/bin/bash
147 #148 declare -i count=0149 username=$1
150
151 if [ $#-lt 1 ]; then
152 echo "At lease one argument."
153 exit 1
154 fi155
156 if ! id $username &> /dev/null; then157 echo "No such user."
158 exit 2
159 fi160
161 until who | grep "^$username" &> /dev/null; do162 let count++
163 echo "$count $username is not login."
164 sleep 3
165 done166 echo "$username is logged on."
167
168
169 while循环的特殊用法:170 遍历文件的每一行:171 whileread VARIABLE; do172 循环体173 done < /PATH/FROM/SOME_FILE174
175 示例:找出UID为偶数的所有用户显示其用户名和ID号;176 #!/bin/bash
177 #178 whileread line; do179 userid=$(echo $line | cut -d: -f3)180 if [ $[$userid%2] -eq 0 ]; then181 echo $line | cut -d: -f1,3
182 fi183 done < /etc/passwd184
185
186 for循环的特殊用法:187 for((expr1;expr2;expr3)); do188 循环体189 done190
191 expr1:定义控制变量,并初始赋值;192 expr2:循环控制条件;193 进入条件:控制条件为“真”194 退出条件:控制条件为“假”195
196 expr3:修正控制变量197
198 示例:求100以内所有正整数之和;199
200 练习1:打印九九乘法表:201 练习2:传递一个文本文件为参数给脚本,取出此文件的所有的偶数行给予显示,行前要显示行号;202
203 函数:204 function:功能205 把一段具有独立功能代码封装在一起,并给予命名;后续用到时,可直接通过给定函数名来调用整体代码;206
207 函数作用:208 代码重用:209 模块化编程:210
211 函数的使用方法:212 先定义:编写函数代码213 后调用:给出函数名,还可以按需传递参数;214
215 定义方法:216 (1)function f_name {217 函数体218 }219 (2)f_name() {220 函数体221 }222
223 调用函数:224 f_name [argu1,argu2,...]225
226 自定义函数状态返回值:227 return [#]
228 0:成功229 1-255:失败230 注意:函数代码执行时,一旦遇到return,函数代码终止运行,函数返回;231 示例:此前的服务脚本232
233 #!/bin/bash
234 #235 prog=$(basename $0)236 lockfile="/var/lock/subsys/$prog"
237 #echo $lockfile
238
239 if [ $#-lt 1 ]; then
240 echo "Usage: $prog start|stop|restart|status"
241 exit 1
242 fi243
244 start() {245 if [ -f $lockfile ]; then246 echo "$prog is started yes."
247 else
248 touch $lockfile && echo "Starting $prog ok..." || echo "Starting $prog failed.."
249 fi250 }251 stop() {252 if [ -f $lockfile ]; then253 rm -f $lockfile && echo "Stop $prog ok..." || echo "Stop $prog failed.."
254 else
255 echo "$prog is stopped yet."
256 fi257 }258 restart() {259 if [ -f $lockfile ]; then260 rm -f $lockfile && touch $lockfile && echo "Restart $prog ok..."
261 else
262 touch $lockfile && echo "$prog is stopped, Starting $prog ok..."
263 fi264 }265 status() {266 if [ -f $lockfile ]; then267 echo "Running..."
268 else
269 echo "Stopped..."
270 fi271 }272
273 case $1 in
274 start)275 start276 ;;277 stop)278 stop279 ;;280 restart)281 restart282 ;;283 status)284 status285 ;;286
287 *)288 echo "Usage: $prog start|stop|restart|status"
289 exit 1
290 esac291 示例:判断用户ID号的奇偶性292
293 #!/bin/bash
294 #295 evenid() {296 if [ $#-lt 1 ]; then
297 return 1
298 fi299
300 if ! id $1 &> /dev/null; then301 return 2
302 fi303
304 userid=$(id -u $1)305 if [ $[$userid%2] -eq 0 ]; then306 echo "$1,Even user ID."
307 else
308 echo "$1,Odd user ID."
309 fi310 }311
312 evenid root313
314 evenid315 echo $?316
317 evenid rooooooot318 echo $?319
320 模块化编程321 示例:322 架设/root/bin/srv目录有两个文件:323 (1)函数文件324 (2)脚本文件325
326 为脚本使用配置文件327 一个文件中只定义变量328 脚本文件source此变量定义的文件329
330 变量的作用域:331 局部变量:332 local VARIABLE=value333
334 存活时间:335 函数执行开始,至函数返回结束;