Shell脚本编程实战指南:100个经典实例

版权申诉
5星 · 超过95%的资源 23 下载量 51 浏览量 更新于2024-07-06 23 收藏 1.95MB PDF 举报
《Shell脚本编程100例》是一本集合了大量实用Shell脚本知识的宝典,适合学习者、进阶工程师以及面试准备者使用,无论是在日常工作还是个人技能提升中都极具价值。本书围绕Linux Shell编程基础展开,共涵盖100个实例,涵盖了从基础的Hello World脚本到高级功能,如系统账户管理、定期备份、服务器自动化部署以及系统资源监控等。 第1个实例演示了如何编写一个简单的Hello World脚本,使用`#!/bin/bash`指定解释器,并通过`echo`语句输出文本消息,这是入门级别的Shell编程示例,用于展示基本语法和环境设置。 第2个脚本涉及用户管理,通过位置参数`$1`和`$2`创建新用户并为其设置密码。这展示了参数传递在Shell脚本中的应用,以及使用`useradd`和`passwd`命令处理系统账户的创建与密码设置。 第3个脚本是一个自动备份脚本,使用`tar`命令每周五备份`/var/log`目录下的日志文件,并通过`crontab`实现定时任务。这个例子展示了如何利用时间表达式设置定时任务,并通过变量引用当前日期生成备份文件名,避免覆盖历史记录。 第4个实例演示了一键部署LNMP(Linux、Nginx、MySQL、PHP)环境的过程,通过`yum`包管理器安装并启动相关服务,包括Apache替换为Nginx。这体现了Shell脚本在服务器运维中的实际操作能力。 最后一个脚本是个高级功能,它实时监控系统的内存和磁盘空间,当剩余空间低于预设阈值(500MB内存和1GB根分区)时,发送警告邮件至root管理员。这表明作者对Shell脚本的性能监控和系统告警有一定深度理解。 通过这些实例,读者不仅能够掌握基础的Shell编程技巧,还能了解到如何在实际场景中灵活运用它们进行任务自动化和系统维护。无论是初学者还是经验丰富的工程师,都能从这本书中收获宝贵的知识和实践案例。
2018-09-23 上传
Shell脚本高级编程教程,希望对你有所帮助。 Example 10-23. Using continue N in an actual task: 1 # Albert Reiner gives an example of how to use "continue N": 2 # --------------------------------------------------------- 3 4 # Suppose I have a large number of jobs that need to be run, with 5 #+ any data that is to be treated in files of a given name pattern in a 6 #+ directory. There are several machines that access this directory, and 7 #+ I want to distribute the work over these different boxen. Then I 8 #+ usually nohup something like the following on every box: 9 10 while true 11 do 12 for n in .iso.* 13 do 14 [ "$n" = ".iso.opts" ] && continue 15 beta=${n#.iso.} 16 [ -r .Iso.$beta ] && continue 17 [ -r .lock.$beta ] && sleep 10 && continue 18 lockfile -r0 .lock.$beta || continue 19 echo -n "$beta: " `date` 20 run-isotherm $beta 21 date 22 ls -alF .Iso.$beta 23 [ -r .Iso.$beta ] && rm -f .lock.$beta 24 continue 2 25 done 26 break 27 done 28 29 # The details, in particular the sleep N, are particular to my 30 #+ application, but the general pattern is: 31 32 while true 33 do 34 for job in {pattern} 35 do 36 {job already done or running} && continue 37 {mark job as running, do job, mark job as done} 38 continue 2 39 done 40 break # Or something like `sleep 600' to avoid termination. 41 done 42 43 # This way the script will stop only when there are no more jobs to do 44 #+ (including jobs that were added during runtime). Through the use 45 #+ of appropriate lockfiles it can be run on several machines 46 #+ concurrently without duplication of calculations [which run a couple 47 #+ of hours in my case, so I really want to avoid this]. Also, as search 48 #+ always starts again from the beginning, one can encode priorities in 49 #+ the file names. Of course, one could also do this without `continue 2', 50 #+ but then one would have to actually check whether or not some job 51 #+ was done (so that we should immediately look for the next job) or not 52 #+ (in which case we terminate or sleep for a long time before checking 53 #+ for a new job).