Shell脚本基础实践:从简单示例到权限管理

需积分: 10 6 下载量 145 浏览量 更新于2024-09-08 1 收藏 153KB DOCX 举报
"这篇文档提供了四个基本的Shell脚本示例,主要涵盖了变量设置与显示、条件判断、命令行参数处理、目录操作以及文件权限管理等基础的Unix/Linux Shell编程概念。" 在Unix和Linux系统中,Shell脚本是一种强大的自动化工具,用于执行一系列命令、进行条件判断和文件操作等。以下是对给定文件中四个脚本的详细解释: 1. **设置和显示变量**:这个脚本用于根据系统时间显示不同的问候语。它首先获取当前小时(`hh`)并使用条件语句来决定是早上、下午还是晚上。`date '+%H'`用于获取24小时制的当前小时。`if`语句使用了比较运算符`-gt`(大于)和`-le`(小于等于)来判断时间,并通过`echo`命令输出相应的问候。 2. **命令行参数处理**:此脚本接收一个命令行参数,即用户输入的目录路径。它使用`read`命令等待用户输入,然后检查参数数量是否为1。如果不是,它会显示使用信息。接着,使用`-d`测试符检查输入是否为有效目录,如果是,则列出目录内容;如果不是,显示错误信息并退出。 3. **目录操作与文件权限**:此脚本创建一个名为`/tmp/scripts`的目录,然后切换到该目录并将`/home/scripts_home`目录复制到这里,重命名为`test`。接着,使用`chmod -R`递归地修改`test`目录中所有文件和子目录的权限,使其对其他用户没有任何权限。`chmod`命令的`-R`选项表示递归处理,`o=`后面跟随的`---`设置了其他用户的权限为无读、写、执行权限。 4. **文件与目录创建**:最后的脚本首先显示当前的日期和时间,然后创建`/tmp/lstest`目录,并在此目录下创建多个子目录和文件。之后,使用`ls`命令列出以特定字符(a、x、6)开头的文件或目录。这个脚本展示了如何动态创建目录、文件以及使用通配符进行文件筛选。 这些例子对于初学者理解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).