Shell脚本实战:从基础到企业级应用

需积分: 17 19 下载量 17 浏览量 更新于2024-07-17 1 收藏 1.31MB PDF 举报
"《SHELL脚本100例》是一本汇集了各种shell脚本实例的教程,从基础的脚本编写到适用于企业实际应用的复杂脚本,旨在帮助初学者逐步掌握shell编程技能。这本书由Jacob撰写,他鼓励读者潜心研究,必定有所收获。书中包括了创建Linux用户、系统备份、自动化部署、性能监控等多种应用场景的脚本示例。" 在《SHELL脚本100例》中,我们可以看到以下几个关键知识点: 1. **编写基础脚本**: - `#!/bin/bash`:这是bash shell脚本的解释器声明,用于指定脚本使用的shell类型。 - `echo`:用于输出文本到终端,例如简单的"Hello, World"脚本。 2. **使用位置参数**: - `$1`、`$2`等是位置参数,它们代表执行脚本时传递的参数。在示例中,`$1`用于新用户的用户名,`$2`用于密码,脚本会创建新用户并设置密码。 3. **自动化任务**: - `cron`:Linux的任务调度工具,用于定期执行命令或脚本。示例中展示了如何设置每周五凌晨3点执行备份脚本。 - `tar`:文件打包和压缩工具,`-czf`选项分别表示创建、压缩和输出到文件。`date +%Y%m%d`用于获取当前日期,添加到备份文件名中,避免覆盖旧的备份。 4. **一键部署**: - `yum`:RPM包管理器,用于安装、更新和管理软件。这里展示了一键部署LNMP(Linux + Nginx + MySQL + PHP)环境的过程,需要注意的是,需确保yum源已配置正确。 5. **系统监控**: - `free`:用于查看内存使用情况。 - `df`:用于查看磁盘空间使用情况。 - `awk`:文本处理工具,用于从命令输出中提取特定信息。 - 脚本中设置了一个循环,持续监控内存和根分区空间,当达到预设阈值时,发送报警邮件给root管理员。 这些示例涵盖了shell脚本的基础语法、流程控制、系统管理、自动化任务等多个方面,适合初学者逐步学习和实践。通过深入理解和练习这些例子,不仅可以提升shell脚本编写能力,还能更好地理解和应用Linux系统管理技巧。
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).