Linux shell脚本编程(二)
Linux shell脚本编程(二)
--------------------------------------------------------------------
注:如果你对python感兴趣,我这有个学习Python基地,里面有很多学习资料,感兴趣的+Q群:895817687
--------------------------------------------------------------------
1 练习:求100以内所有偶数之和;2 使用至少三种方法实现;3 4 示例1:5 6 #!/bin/bash7 #8 declare -i sum=0 #声明一个变量求和,初始值为09 10 for i in $(seq 0 2 100); do11 sum=$(($sum+$i))12 done13 14 echo "Even sum: $sum."15 16 示例2:17 18 #!/bin/bash19 #20 declare -i sum=021 22 for i in {1..100}; do23 if [ $[$i%2] -eq 0 ]; then24 sum=$[$sum+$i]25 fi26 done27 28 echo "Even sum: $sum."29 30 增强型赋值:31 +=32 sum=$[$sum+$i]33 let sum+=$i34 -=,*=,/=,%=,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/bash43 #44 declare -i count=045 46 for file in /etc/*; do47 if [ -f $file ]; then48 let count++49 echo "$count $file"50 fi51 done52 53 echo "Total: $count files."54 55 56 测试表达式:57 整数测试;-gt,-lt,-ge,-le,-eq,-ne58 字符串测试:==,>,<,!=,-z,-n,=~59 60 注意:61 (1)字符串等会比较测试[ "$hostname" == 'localhost' ]62 (2)模式匹配测试:[[ "STRING" -~ PATTERN ]]63 64 示例:写一个脚本实现如下功能;65 获取当前主机的主机名:66 如果当前主机的主机名为空,或者为localhost,则将其修改为www.mageedu.com67 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 || COMMAND282 非:!COMMAND83 84 false && true = false85 false && false = false86 87 true && false = true88 true && true = true89 90 if COMMAND; then91 COMMAND292 fi93 短路操作符:94 true || true = true95 true || false = true96 97 false || true = true98 false || false = false99
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
Linux shell脚本编程(二)相关推荐
- Linux shell 脚本编程-实战篇(二)
继: Linux shell 脚本编程-实战篇(一) 2. 创建与数据库.Web及电子邮件相关的脚本 2.1 MySQL 数据库 2.1.1 MySQL 数据库安装 到 http://repo.mys ...
- Linux shell 脚本编程-实战篇(三)
继: Linux shell 脚本编程-实战篇(二) 3. 一些小有意思的脚本 3.1 发送消息 3.1.1 功能分析 对于这种简单的脚本,需要的功能不多.涉及的一些命令很常见,下面了解脚本所需的几个 ...
- Linux shell脚本编程(三)
Linux shell脚本编程 -------------------------------------------------------------------- 注:如果你对python感兴趣 ...
- Linux shell脚本编程(一)
-------------------------------------------------------------------- 注:如果你对python感兴趣,我这有个学习Python基地, ...
- Linux Shell脚本编程基础
2 Linux Shell脚本编程基础 发表于: Linux, Shell, UNIX, 资源分享 | 作者: 谋万世全局者 标签: Linux,Shell,编程基础,脚本 本文作者:Leal 授权许 ...
- linux shell 脚本编程基本语法
linux shell脚本编程基本语法 Shell script是利用shell的功能所写的一个"程序",这个程序是使用纯文本文件,将一些Linux Shell的语法与命令(含外部 ...
- LINUX——shell脚本编程
一.什么是shell脚本编程 shell脚本并不是真正的编程语言,实际上就是命令的集合,类似于windows的批处理文件 二.编写shell脚本(文件格式为.sh) 1.编写一个helowrold+日 ...
- linux SHELL脚本编程
shell脚本编程 shell定义:简单来讲就是命令解析器,将用户输入的指令转换为相应的机器能够运行的程序. shell种类:bourne shell (sh):korn shell(ksh) bou ...
- Linux Shell脚本编程学习笔记和实战
http://www.1987.name/141.html shell基础 终端打印.算术运算.经常使用变量 Linux下搜索指定文件夹下特定字符串并高亮显示匹配关键词 从键盘或文件里获取标准输入 [ ...
最新文章
- 中国人工智能源头创新的突破点在哪里?创投圈这么看
- 商务网站开发这些优势值得青睐
- VIM自动补全插件:deoplete
- pat天梯赛L1-054. 福到了
- 如何构建一个分布式爬虫:基础篇
- Day11多态部分-3
- 使用post访问不到接口_Postman工具使用说明
- OpenJudge计算概论-找出第k大的数
- VisualSVN服务器的本地搭建和使用
- 剑指offer之旋转数组的最小数字
- stepmania谱面下载、安装、转谱,音游相关 osu etterna
- Xpose框架的入门学习
- Symbian手记【一】 —— Symbian命名法
- sparc处理器开发工具_SPARC高性能处理器集成开发环境及其编译器设计与实现
- 如何查找某个物种的基因组大小
- css tabindex
- jQuery日期插件
- 常用服务器软件的简单介绍
- 伍德里奇计量经济学导论之计算机操作题的R语言实现(一些重要专题)
- 善用快捷键,玩转windows10便签程序
热门文章
- visual studio code python插件下载_visual studio code 的必装推荐插件plugin, vscode, vsc
- java oci_java oracle oci方式连接
- java实现接收字符串对象并在后台代码中转成list对象
- ajax中return不生效
- 《移动项目实践》实验报告——Android Studio环境搭建
- Applese 走方格
- jointable 能加多个字段吗_Excel函数Countif、Countifs超级实用技巧,你真的都掌握吗?...
- Android中CardView的简单使用
- 多线程编程1 - NSThread
- 地图按照自己规定路线进行移动