Shell脚本入门:文件检查与系统操作示例

2 下载量 33 浏览量 更新于2024-08-31 收藏 595KB PDF 举报
"简易脚本实例带你了解Shell脚本" 本文将通过几个具体的Shell脚本实例,帮助读者理解和掌握基本的Shell脚本编写技巧。在Linux或Unix系统中,Shell脚本是一种强大的工具,用于自动化任务执行和系统管理。下面我们将详细解析每个脚本实例及其涉及的Shell语法和功能。 一、文件检查脚本(file_check.sh) 这个脚本的主要目的是检查用户是否指定了一个文件,并检查该文件是否存在以及其类型。以下是脚本的解析: 1. `#!/bin/bash`: 这是Shebang行,指定脚本使用的解释器为Bash shell。 2. `[ -z "$1" ]`: 这是条件测试,检查第一个命令行参数($1)是否为空。如果为空,则表示未指定文件。 3. `echo Error: Test file not specified, please specify.`: 当未指定文件时,输出错误信息并退出脚本。 4. `[ -e "$1" ]`: 检查指定的文件是否存在。 5. `echo Error: $1 not exist`: 如果文件不存在,输出错误信息。 6. `-L "$1"`: 测试文件是否为符号链接,如果是,则输出相关信息。 7. 其他条件测试如`-b`, `-c`, `-d`, `-S`, `-f`分别用于检查文件是否为块设备文件、字符设备文件、目录、套接字文件和普通文件。 二、文件属性和排序脚本 这个脚本通过`ls -l`命令展示目录中所有文件的属性,并按大小排序,显示最大的两个文件名。 1. `ls -l`: 列出文件的详细信息。 2. `-S`: 以文件大小进行排序。 3. `head -n 2`: 取前两行,即最大的两个文件。 三、网络接口IP地址显示脚本 这个脚本用于显示指定网络接口的IP地址。 1. `ifconfig $1`: 显示指定接口的信息。 2. `head -n2 | tail -n1`: 取输出的第二行(通常包含IP地址)并保留最后一行。 3. `cut -d "" -f10`: 使用空格作为分隔符,取出第10字段,即IP地址。 四、Apache端口修改脚本(Apache_port.sh) 这个脚本用于更改Apache服务器的HTTP端口。 1. 检查用户是否输入了端口号 (`[ -z "$1" ]`),如果没有则报错并退出。 2. 使用`netstat -antlupe`检查输入的端口是否已被占用 (`[ -z "`netstat -antlupe|grep $1`" ]`),如果被占用则报错并退出。 3. 脚本可能还包含了修改Apache配置文件(如`/etc/httpd/conf/httpd.conf`)的代码,这部分未提供完整,实际操作时应确保正确修改并重启Apache服务以应用新的端口设置。 通过这些实例,我们可以看到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).