本科前三年,我在学习程序设计语言,算法与数据结构,组成原理等等的课程的时候,往往学到了课程的主要内容,但是实践的时候会发现自己缺少一些实用的工具来帮助自己完成一些繁琐的工作。以我日常的经验为例,在windows下配置Visual Studio的opencv环境时需要将某个目录下的lib文件的文件名输入项目属性表,这个时候如果手动一个个输入会很麻烦,一般做法时用一个bat脚本将文件名提取出来放到一个文本中,这样就提高了我们的工作效率,再比如再linux下写代码时使用vim编辑器的快捷键将会提升我们的编码速度。MIT 6.NULL这门实验课主要针对shell和脚本、编辑器、数据整理、命令行环境、Git、调试及性能分析、元编程、安全和密码学等主题为我们介绍一些计算机常用的生产力工具,写这篇博客主要记录在完成MIT 6.NULL实验中的收获。
本课程需要使用类Unix shell,例如 Bash 或 ZSH。如果您在 Linux 或者 MacOS 上面完成本课程的练习,则不需要做任何特殊的操作。如果您使用的是 Windows,则您不应该使用 cmd 或是 Powershell;您可以使用Windows Subsystem for Linux或者是 Linux 虚拟机。使用echo $SHELL命令可以查看您的 shell 是否满足要求。如果打印结果为/bin/bash或/usr/bin/zsh则是可以的。

输出结果表明shell使用的是zsh

在根目录/ 下使用mkdir 命令创建一个名为 missing的文件夹
使用ls命令查看tmp目录下是否由missing文件夹

输入man touch即可查看touch命令的含义,根据解释可以看出touch命令的意义是更新access time和modification time,如果没有文件就会首先创建文件,并且根据输入参数的不同决定touch修改的时哪个time。
用 touch 在 missing 文件夹中新建一个叫 semester 的文件。

将以下内容一行一行地写入 semester 文件:
#!/bin/sh
curl --head --silent https://missing.csail.mit.edu

在这一段shell脚本中,#代表的是注释,但是注释中包含了逻辑运算符!,在其他一些语言中对于关键字的输出一般要使用转义字符等操作,为了将这一段话作为一个整体,需要把这行代码加上单引号’',并且使用echo输出到semester文件中。
Tips1: shell输出字符串时既可以双引号也可以单引号也可以不加引号,双引号与单引号的区别在于双引号内可以使用转义字符,而单引号会全部当作字符串处理。
Tips2:shell定义变量时,=前后不能有空格,切记!
第一次尝试时会发现两个命令用>输出重定向到semester时后者将前者覆盖,查阅资料后知道>>是追加,所以第二条命令应该使用>>。

查看 chmod 的手册

尝试执行这个文件。即,将该脚本的路径(./semester)输入到您的shell中并回车。如果程序无法执行,请使用 ls 命令来获取信息并理解其不能执行的原因。

当执行semester脚本时发现没有执行权限,于是使用ls -l 或者是 ll命令查看文件的属性以及文件所属的用户和组
第一个字符-表示这是一个文件,剩下三个连续的字符分别代表属主、属组和其他用户的权限,可以看到三种情况都没有执行的权限(x)。

使用chmod命令赋予属主、属组、其他用户读写执行的权限。.
When a text file with a shebang is used as if it is an executable in aUnix-likeoperating system, theprogram loadermechanism parses the rest of the file’s initial line as aninterpreter directive. ——wikipedia_shebang
为了使Linux系统知道该文件是Shell脚本,该文件必须以shebang构造开头。

这个题目提示我们使用|(管道)和>(重定向),管道的作用是是一系列将标准输入输出链接起来的进程,其中每一个进程的输出被直接作为下一个进程的输入,重定向则是把结果输出到指定的文件中。
所以首先执行脚本命令
#!/bin/sh
curl --head --silent https://missing.csail.mit.edu
将访问https://missing.csail.mit.edu的文档信息打印,然后将得到的输出使用管道|作为下一个grep命令的输入。
grep命令用于查找内容包含指定的范本样式的文件,本文要求的是最后更改日期信息(last-modified),所以grep last-modified选择包含最后更改日期的字符串。
最后使用>将结果重定向到主目录下的last-modified.txt。

输入命令
cat /sys/class/power_supply/BAT0/capacity #我的是BAT0,解析中是BAT1
总结
本次实验使用了一些简单的shell脚本,我之前用过这些命令,但是对于具体的细节记不清楚,所以还得多用才能熟练掌握shell的用法。