1 练习:求100以内所有偶数之和;
2 使用至少三种方法实现;
3
4 示例1:
5
6 #!/bin/bash
7 #
8 declare -i sum=0
#声明一个变量求和,初始值为0
9
10 for i
in $(seq 0 2 100);
do
11 sum=$((
$sum+
$i))
12 done
13
14 echo
"Even sum: $sum."
15
16 示例2:
17
18 #!/bin/bash
19 #
20 declare -i sum=0
21
22 for i
in {1..100};
do
23 if [ $[
$i%2]
-eq 0
]; then
24 sum=$[
$sum+
$i]
25 fi
26 done
27
28 echo
"Even sum: $sum."
29
30 增强型赋值:
31 +=
32 sum=$[
$sum+
$i]
33 let sum+=
$i
34 -=,*=,/=,%=
,
35
36 let count=$[
$conunt+1] -->let count+=1-->let count++
37 let count=$[
$conunt-1] -->let count-=1-->let count--
38
39
40 示例:显示/
etc目录下所有的每个普通文件,而后统计一共有多少个这样的文件;
41
42 #!/bin/bash
43 #
44 declare -i count=0
45
46 for file
in /etc/*;
do
47 if [
-f $file ]; then
48 let count++
49 echo
"$count $file"
50 fi
51 done
52
53 echo
"Total: $count files."
54
55
56 测试表达式:
57 整数测试;
-gt,
-lt,
-ge,
-le,
-eq,
-ne
58 字符串测试:==,>,<,!=,-z,-n,=
~
59
60 注意:
61 (1)字符串等会比较测试[
"$hostname" ==
'localhost' ]
62 (2)模式匹配测试:[[
"STRING" -
~ PATTERN ]]
63
64 示例:写一个脚本实现如下功能;
65 获取当前主机的主机名:
66 如果当前主机的主机名为空,或者为localhost,则将其修改为www.mageedu.com
67
68 组合测试条件:
69 条件间逻辑运算:
70 与:多个条件要同时满足;
71 或:多个条件满足其一即可;
72 非:对指定的条件取反;
73
74 表达式组合:
75 与:[[ CONDITION -
a CONDITION2 ]]
76 或:[[ CONDITION -
o CONDITION2 ]]
77 非:[ !
CONDITION ]
78
79 命令组合:
80 与:COMMAND1 && COMMAND2 <-- [ EXPR1 ] &&
[ EXPR2 ]
81 或:COMMAND1 ||
COMMAND2
82 非:!COMMAND
83
84 false &&
true =
false
85 false &&
false =
false
86
87 true &&
false =
true
88 true &&
true =
true
89
90 if COMMAND; then
91 COMMAND2
92 fi
93 短路操作符:
94 true ||
true =
true
95 true ||
false =
true
96
97 false ||
true =
true
98 false ||
false =
false
99
100 if !
COMMAND1; then
101 COMMAND2
102 fi
103
104 COMMAND1 && COMMAND2 ||
COMMAND3
105 if COMMAND1;then
106 COMMAND2
107 else
108 COMMAND3
109 fi
110
111 获取当前主机的主机名:
112 如果当前主机的主机名为空,或者为localhost,则将其修改为www.mageedu.com
113
114 #!/bin/bash
115 #
116 hostname=$
(hostname)
117
118 if [ -z
"$hostname" -o
"$hostname"==
"localhost" ]; then
119 hostname www.magedu.com
120 fi
121
122 练习:写一个脚本
123 (1
)传递两个文本文件路径给脚本;
124 (2
)显示两个文件中空白行数较多的文件及其空白行的个数;
125 (3
)显示两个文件中总行数较多的文件及其总行数;
126 练习:写一个脚本
127 (1
)提示用户输入一个字符串;
128 (2
)判断:
129 如果输入的是quit,则退出脚本;
130 否则,则显示其输入的字符串内容;
131
132 练习:写一个脚本,打印九九乘法表:
133 循环嵌套
134
135 #!/bin/bash
136 #
137 for j
in {1..9};
do
138 for i
in $(seq 1
$j);
do
139 echo -n -e
"${i}X${j}=$[$i*$j]\t"
140 done
141 echo
142 done
143
144 多分支的if语句:
145 单分支:
146 if CONDITION; then
147 if-
true-
分支
148 fi
149 双分支:
150 if CONDITION; then
151 if-
true-
分支
152 else
153 if-
false-
分支
154 fi
155
156 多分支:
157 if CONDITION1; then
158 if -CONDITION-
true-
分支
159 elif CONDITION2; then
160 if-CONDITION2-
true-
分支
161 ...
162 else
163 if-ALL-
false-
分支
164 fi
165
166 示例:通过脚本参数传递一个文件路径给脚本,判断其类型:
167
168 #!/bin/bash
169 #
170 if [ $
# -lt 1 ]; then
171 echo
"Usage: $0 <path>"
172 exit 1
173 fi
174
175 if [
-f $1 ]; then
176 echo
"Rgulat file."
177 elif [ -d
$1 ]; then
178 echo
"Directory."
179 elif [ -h
$1 ]; then
180 echo
"Symbolic link."
181 elif [ -b
$1 ]; then
182 echo
"Block special."
183 elif [ -c
$1 ]; then
184 echo
"Charactoer special."
185 elif [ -S
$1 ]; then
186 echo
"Socket file."
187 else
188 echo
"file not exist or unknow type."
189 fi
190
191 示例:脚本可接受四个参数
192 start:创建文件/var/lock/subsys/
SCRIPT_NAME
193 stop:删除此文件
194 restatr:删除此文件并重新创建
195 status:如果文件存在,显示为“running”;否则,显示为“stopped”
196
197 basename命令:
198 取得路径的基名:
199 示例:
200
201 #!/bin/bash
202 #
203 prog=$(basename
$0)
204 lockfile=
"/var/lock/subsys/$prog"
205 #echo $lockfile
206
207 if [ $
# -lt 1 ]; then
208 echo
"Usage: $prog start|stop|restart|status"
209 exit 1
210 fi
211
212 if [
"$1" ==
"start" ]; then
213 if [
-f $lockfile ]; then
214 echo
"$prog is started yes."
215 else
216 touch
$lockfile && echo
"Starting $prog ok..." || echo
"Starting $prog failed.."
217 fi
218 elif [
"$1" ==
"stop" ]; then
219 if [
-f $lockfile ]; then
220 rm
-f $lockfile && echo
"Stop $prog ok..." || echo
"Stop $prog failed.."
221 else
222 echo
"$prog is stopped yet."
223 fi
224 elif [
"$1" ==
"restart" ]; then
225 if [
-f $lockfile ]; then
226 rm
-f $lockfile && touch
$lockfile && echo
"Restart $prog ok..."
227 else
228 touch
$lockfile && echo
"$prog is stopped, Starting $prog ok..."
229 fi
230 elif [
"$1" ==
"status" ]; then
231 if [
-f $lockfile ]; then
232 echo
"Running..."
233 else
234 echo
"Stopped..."
235 fi
236 else
237 echo
"Usage: $prog start|stop|restart|status"
238 exit 1
239 fi
240
241 case语句:
242 简洁版多分支if语句:
243 使用场景:判断某变量的值是否为多种情形中的一种时使用;
244
245 语法:
246 case
$VARIABLE in
247 PATTERN1)
248 分支1
249 ;;
250 PATTERN2)
251 分支2
252 ;;
253 PATTERN3
254 分支3
255 ;;
256 ...
257 *
)
258 分支n
259 ;;
260 esac
261
262 PATTERN可使用glob模式的通配符:
263 *
:任意长度的任意字符;
264 ?
:任意单个字符;
265 []:指定范围内的任意单个字符;
266 a|
b:多选1;
267
268 示例:提示键入任意一个字符,判断类型:
269 脚本如下:
270 #!/bin/bash
271 #
272 read -p
"Plz enter a character: " char
273
274 case
$char in
275 [a-
z])
276 echo
"A character."
277 ;;
278 [0-9
])
279 echo
"A digit."
280 ;;
281 *
)
282 echo
"A special character."
283 ;;
284 esac
285
286 示例:脚本可接受四个参数
287 start:创建文件/var/lock/subsys/
SCRIPT_NAME
288 stop:删除此文件
289 restatr:删除此文件并重新创建
290 status:如果文件存在,显示为“running”;否则,显示为“stopped”
291
292 脚本如下:
293
294 #!/bin/bash
295 #
296 prog=$(basename
$0)
297 lockfile=
"/var/lock/subsys/$prog"
298 #echo $lockfile
299
300 if [ $
# -lt 1 ]; then
301 echo
"Usage: $prog start|stop|restart|status"
302 exit 1
303 fi
304 case
$1 in
305 start)
306 if [
-f $lockfile ]; then
307 echo
"$prog is started yes."
308 else
309 touch
$lockfile && echo
"Starting $prog ok..." || echo
"Starting $prog failed.."
310 fi
311 ;;
312 stop)
313 if [
-f $lockfile ]; then
314 rm
-f $lockfile && echo
"Stop $prog ok..." || echo
"Stop $prog failed.."
315 else
316 echo
"$prog is stopped yet."
317 fi
318 ;;
319 restart)
320 if [
-f $lockfile ]; then
321 rm
-f $lockfile && touch
$lockfile && echo
"Restart $prog ok..."
322 else
323 touch
$lockfile && echo
"$prog is stopped, Starting $prog ok..."
324 fi
325 ;;
326 status)
327 if [
-f $lockfile ]; then
328 echo
"Running..."
329 else
330 echo
"Stopped..."
331 fi
332 ;;
333 *
)
334 echo
"Usage: $prog start|stop|restart|status"
335 exit 1
336 esac
View Code
转载于:https://www.cnblogs.com/chaoyazhisi/p/5231329.html