linux 自测
- 本课程需要使用类 Unix shell,例如 Bash 或 ZSH。如果您在 Linux 或者 MacOS 上面完成本课程的练习,则不需要做任何特殊的操作。如果您使用的是 Windows,则您不应该使用 cmd 或是 Powershell;您可以使用Windows Subsystem for Linux或者是 Linux 虚拟机。使用
echo $SHELL
命令可以查看您的 shell 是否满足要求。如果打印结果为/bin/bash
或/usr/bin/zsh
则是可以的。 - 在
/tmp
下新建一个名为missing
的文件夹。 - 用
man
查看程序touch
的使用手册。 - 用
touch
在missing
文件夹中新建一个叫semester
的文件。 - 将以下内容一行一行地写入
semester
文件:
bash
#!/bin/sh
curl --head --silent https://missing.csail.mit.edu
1
2
2
第一行可能有点棘手, #
在 Bash 中表示注释,而 !
即使被双引号( "
)包裹也具有特殊的含义。单引号( '
)则不一样,此处利用这一点解决输入问题。更多信息请参考 Bash quoting 手册
- 尝试执行这个文件。例如,将该脚本的路径(
./semester
)输入到您的 shell 中并回车。如果程序无法执行,请使用ls
命令来获取信息并理解其不能执行的原因。 - 查看
chmod
的手册 (例如,使用man chmod
命令) - 使用
chmod
命令改变权限,使./semester
能够成功执行,不要使用sh semester
来执行该程序。您的 shell 是如何知晓这个文件需要使用sh
来解析呢?更多信息请参考:shebang - 使用
|
和>
,将semester
文件输出的最后更改日期信息,写入主目录下的last-modified.txt
的文件中 - 写一段命令来从
/sys
中获取笔记本的电量信息,或者台式机 CPU 的温度 - 使用 shell 编程写一个类似脚本的图书管理系统,包含增删改查四个功能
当然,可能会有点困难我在这里附上一段参考代码
shell
#! /usr/bin/env bash
initialization()
{
echo -n "| " ;echo "1:添加图书"
echo -n "| " ;echo "2:删除图书"
echo -n "| " ;echo "3:显示馆藏图书"
echo -n "| " ;echo "4:查找图书"
echo -n "| " ;echo "5:退出系统"
mainmenu
}
mainmenu()
{
read operation
case $operation in
1)
addbook ;;
2)
delbook ;;
3)
listbooks ;;
4)
search ;;
5)
exit ;;
*)
"无效操作,请重试。"
initialization ;;
esac
}
#直接在文件夹内添加书(所以没有 书单.txt),若没有就find遍历系统匹配并加入
#不考虑系统中多个匹配结果的情况
addbook()
{
echo "添加图书"
echo "-------------------------"
read -p "输入添加的书名" bookname
if [[ -f ~/Desktop/bookregister/$bookname ]] ;
then
echo "已经存在这本书。"
return
else
find ~ -name $bookname -exec mv {} ~/Desktop/bookregister \;
if [[ -f ~/Desktop/bookregister/$bookname ]] ;
then
echo "匹配成功,已加入书单。"
else
read -p "未找到这本书,手动输入链接从网上下载?[y/n]" download
if [[ $download = 'y' ]] ;
then
read -p "请输入链接。" url
curl ${url} -o $bookname
find ~ -name $bookname -exec mv {} ~/Desktop/bookregister \;
fi
fi
fi
}
delbook()
{
echo "删除图书"
echo "-------------------------"
read -p "输入删除的书名" bookname
if [[ ! -f ~/Desktop/bookregister/$bookname ]] ;
then
echo "查无此书。"
return
else
read -p "输入 delete 以确认。" delete
if [[ $delete = delete ]];
then
rm ~/Desktop/bookregister/$bookname
echo "删除完毕。"
fi
fi
}
#因为脚本图书放在一起,所以脚本自身也会显示(不要在意这些细节)
listbooks()
{
ls ~/Desktop/bookregister
}
#若找到直接用less打开
search()
{
echo "查找图书"
echo "-------------------------"
read -p "输入查找的书名" bookname
if [[ -f ~/Desktop/bookregister/$bookname ]] ;
then
less ~/Desktop/bookregister/$bookname
else
echo "查无此书。"
fi
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99