Linux脚本能100以内逢三过,Linux shell脚本编程(三)

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 函数执行开始,至函数返回结束;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值