shell 文本后几行_常见的 shell 脚本面试题

点击上方蓝字设为星标1bd765340eaf8a3ce155a3f8506187ed.png

每周一、三、五上午 8:30 准时推送

下面开始今天的学习~

41776141d3d485768ce615e0de93ba47.png

cbb16985cd76c9b897a956eee2c8b5b6.png

作为后端开发和运维岗位我们离不开一些脚本的帮助,虽然现在 Python 的兴起让越来越多的相关工具使用 Python 编写,但在面试的时候我们依然会看到一些针对 Shell 的题目,本文将列举一些常用的面试题,希望对你们有所帮助。

什么是 Shell

618fcd7424138011954402326e58f735.png

Shell 是用户和 Linux(或许说 Linux 内核)之间的接口程序。你在提示符下输入的每个命令都由 Shell 先解释然后传给 Linux 内核。

  • Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。

  • Shell 既是一种命令语言,又是一种程序设计语言。

  • Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问 Linux 内核的服务。

$? 是用来做什么的?

用来判断上一个命令是否正确完成,对于一个成功完成的指令,返回的是 0,如下:

➜ ls /var/www cgi-bin html➜ echo $?0

如果失败了呢?

➜ cat /etc/shadowcat: /etc/shadow: Permission denied➜ echo $?1

获取参数

比如我们有一个指令需要接受两个参数,用法如下:LC.sh foo bar,那么如何接受到 foo 和 bar 呢?

他们在脚本中分别是 $1 和 $2 啦,那么 $0 又是用来做什么的呢?

显示当前脚本的名字,比如以上 $0 就是 "LC.sh"。

注释

和 Python 一样,以 #  开头就好了。

文件头部为什么需要 #!/bin/bash

4851554108174f8585df5daf5cba761f.png

!/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)

023dd4ecfacd983d3e5d198728d97936.png

这个仓库包含了很多命令行下的程序和指令,可以在各个方面完善自己的 CLI,让自己在纯命令行的操作下得到更多的乐趣并且提升自己的生产力,同时不会被看上去非常枯燥的  awk,sed 和 grep 指令之类的打败,让自己的 Shell 技巧快速提升。

d01bab167b21d00b62eaeb1ee7f2e91a.png

本文作者:Nova Kwok

编辑&版式:霍霍

声明:本文归 “力扣” 版权所有,如需转载请联系。

a1d06daf2851672773ae7522e8530669.gif

80e0e16540c89c2311c2057ce580f0b9.png

0100d3f4dc35f7dc8c03515e2aebd01a.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值