点击上方蓝字设为星标
每周一、三、五上午 8:30 准时推送
下面开始今天的学习~
作为后端开发和运维岗位我们离不开一些脚本的帮助,虽然现在 Python 的兴起让越来越多的相关工具使用 Python 编写,但在面试的时候我们依然会看到一些针对 Shell 的题目,本文将列举一些常用的面试题,希望对你们有所帮助。
什么是 Shell
Shell 是用户和 Linux(或许说 Linux 内核)之间的接口程序。你在提示符下输入的每个命令都由 Shell 先解释然后传给 Linux 内核。
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。
Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问 Linux 内核的服务。
$? 是用来做什么的?
用来判断上一个命令是否正确完成,对于一个成功完成的指令,返回的是 0,如下:
➜ ls /var/www
cgi-bin html
➜ echo $?
0
如果失败了呢?
➜ cat /etc/shadow
cat: /etc/shadow: Permission denied
➜ echo $?
1
获取参数
比如我们有一个指令需要接受两个参数,用法如下:LC.sh foo bar,那么如何接受到 foo 和 bar 呢?
他们在脚本中分别是 $1 和 $2 啦,那么 $0 又是用来做什么的呢?
显示当前脚本的名字,比如以上 $0 就是 "LC.sh"。
注释
和 Python 一样,以 # 开头就好了。
文件头部为什么需要 #!/bin/bash
!/bin/bash 是 shell 脚本的第一行,称为 shebang 行。这里#符号叫做 hash,而 ! 叫做 bang。它的意思是命令通过 /bin/bash 来执行。
查看文件的前 n 行或者后 n 行
对于一些日志文件,往往非常的大,所以我们总会有需要看看最前面或者最后面几行,对应的指令如下:
➜ head -n # 前 n 行,将 n 替换为需要看的行数
➜ tail -n # 后 n 行,将 n 替换为需要看的行数
举一反三,如何获取到文件的第 n 行呢?
➜ head -n file | tail -1
查找文件
在运维工作中,有很多时候需要查询一个日志文件,比如在 /var/log 目录下且文件名需要包含 "LeetCode",我们该如何操作呢?
最简单的方法可以直接:
➜ tree /var/www | grep LeetCode
├── LeetCode
当然,还有很多 "组合技",比如:
find . -name "*LeetCode*"
不过这些方法没有那么好记,个人还是倾向于 tree 的方法。
记录差异行
这个需求也非常的常见,假设我们有两个文件,A 和 B,现在的需求是找出 B 中有但是 A 中没有的行,然后把对应的行保存到 C 中,这个我们该如何操作呢?
➜ grep -vxFf A B | tee
其中 -v 表示不选择匹配的行,-F 表示匹配的模式按行分割,-f A 表示匹配模式来自文件 A,最后表示目标文件 B。即 grep 命令从 b 中选取 a 中不存在的行,tee c 命令创建文件 C。
除了上述一些比较基础的操作以外,这里推荐一个 GitHub 仓库,没错,也是 Awesome 系列的——alebcay/awesome-shell(https://github.com/alebcay/awesome-shell)
这个仓库包含了很多命令行下的程序和指令,可以在各个方面完善自己的 CLI,让自己在纯命令行的操作下得到更多的乐趣并且提升自己的生产力,同时不会被看上去非常枯燥的 awk,sed 和 grep 指令之类的打败,让自己的 Shell 技巧快速提升。
本文作者:Nova Kwok
编辑&版式:霍霍
声明:本文归 “力扣” 版权所有,如需转载请联系。