ITEEDU

8.4. 练习

这些练习时本章讨论的结构的实际应用。在编写脚本的时候,你可以用一个包含少量数据的测试目录来进行测试。编写每一步,然后测试那部分代码,而不要把所有的东西一下写出来。

  1. 写一个询问用户年龄的脚本。如果等于或者大于16,打印一条消息显示用户可以喝酒。如果用户的年龄在16以下,打印一条信息告诉用户还需要等待多少年他或者她才能合法地饮用酒精饮料。

    额外地,计算一个18岁以上的用户饮用了多少啤酒(100升/年)并为该用户打印该信息。

  2. 编写一个把一个文件作为参数的脚本。使用一个 here 文档来介绍给出用户压缩文件的一系列选项。可能的选项可能是 gzip, bzip2, compresszip

  3. 编写一个叫做 homebackup 的脚本来自动执行 tar,这样他执行脚本的时候总能使用需要的选项 (cvp) 和备份他或她的主目录的目标目录 (/var/backups)。 实现以下功能:

    • 测试参数的个数。脚本应该无参数运行。如果提供了任何参数,在退出后打印一条使用方法消息。

    • 测试 backups 目录是否有足够的空间存放备份。

    • 询问用户想要执行完全备份还是增量备份。如果用户还没有完全备份文件,打印一条消息通知用户将进行完全备份。如果是增量备份,只在完全备份是近一个星期时候才执行。

    • 使用压缩工具对备份进行压缩。通知用户脚本正在执行此任务,因为这将耗费一些时间而用户会因为没有在屏幕上看到输出而担心。

    • 打印一条消息通知用户有关压缩备份的大小。

    参见 info tar 或者 Introduction to Linux,第九章:“Preparing your data” for background information.

  4. 编写一个叫做 simple-useradd.sh 脚本来把一个本地用户加入到系统。这个脚本应该:

    • 只使用一个参数,其他情况在退出后打印一条使用信息。

    • 检查 /etc/passwd 来对第一个自由的用户ID做出决定。打印一条包含这个ID的消息。

    • 为这个用户建立一个私有组,检查 /etc/group 文件。打印一条包含组ID的讯息。

    • 从操作用户那里采集信息:描述用户的注释,shell列表的选择(测试可接受性,否则退出打印消息),这个账户的过期日期,这个新用户所在的额外的组。

    • 使用得到的信息,在 /etc/passwd/etc/group/etc/shadow 加入一行;创建这个用户的主目录(使用正确的权限!);把用户加入到希望的第二个组。

    • 把这个用户的密码设置成一个默认的已知字符串。

  5. 重写 第 7.2.1.4 节 “测试一个存在的文件” 的脚本来从用户这里读取输入而不是从第一个参数。