一个响指能删除计算机里的一半文件?

点击上方 蓝字 关注我们

下面开始今天的学习~

如何一个响指删除计算机里的一半文件?

  1. 好好练习打响指(最好能打得响一点),顺便准备一台能运行 bash 的计算机

  2. 写一个 shell 文件并保存好,文件内容如下:

  1. 执行这个文件,同时打响一个响指

  2. 恭喜你!

  3. 把你的电脑送去维修

注意: 千万不要对公司的电脑使用,如果你还不想跑路。也不要对朋友的电脑使用,如果你还珍惜你们之间的友谊小船

这段 shell 程序来源于 Github 仓库 hotvulcan/Thanos.sh ,它确实可以删除你电脑上的一半程序,不要问我怎么知道的,所以请谨慎使用 在日常生活中(我是指程序员的日常生活),我们经常需要写 shell,很多人忽视了 shell 的重要性。

这门语言古老强大坑多,几乎每个程序员都会用到,当然在很多岗位的笔试/面试中也会涉及。

本系列图文将介绍 Shell 和 Shell 脚本的基本语法,它可以作为你接触 shell 的第一课,也可当作你编写 shell 的参考,最后我们将讲解上面提到的「灭霸.sh」是如何实现删除计算机内一半文件的。

在这篇文章中,我们将介绍「Shell 简介」,「第一行 Shell」和「Shell 变量」三部分。

Shell 简介

在 Linux 内核系统下,我们经常会执行 cdmkdirls 之类的指令,他们都是 Shell 指令。就像在终端中输入 python 就可以进入 Python 交互编程环境编写 Python 一样,你可以把系统的终端(terminal)都当成是一个 Shell 语言的交互编程环境。对于大多数开发者来讲,我们早就在编写 Shell 了。

更确切的说,Shell 本身种类众多,大部分 Linux 系统默认的 Shell 叫做 Bourne Again Shell,也就是我们常说的 Bash。还有另一种 Shell 类型叫做 Bourne Shell,一般我们不做区分。这篇文章也只关注这两类 Shell。

当然,通过写好一个 Shell 脚本,再使用解释器执行再某些情况下更为实用。你需要先保存好一个 Shell 脚本文件,比如叫做 test.sh ,先 cd 到相应的目录下。运行 Shell 脚本的方法有以下两种:

第一种是作为可执行程序直接执行,示例如下:

第二种是作为解释器参数执行,示例如下:

以上两段代码来自于 菜鸟教程

第一行 Shell

第一行

在 Shell 脚本的第一行,我们要指定一个解释器的路径,告诉操作系统用此处的解释器解释这个脚本文件:

#! 这个操作符叫做 shebang,注意要将它和注释记号区分开。

上面这段代码的意思是告诉系统这个文件要用 /bin/sh (一般 Bourne shell 在系统中的路径)来

注释

注释

Shell 程序的注释语法如下:

Shell 变量

声明变量

注意,在 Shell 里声明变量, 等号的两边不能有空格,否则 Shell 会错把你的变量名当作某个命令 ,变量名需遵循如下规则:

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。

  • 中间不能有空格,可以使用下划线(_)。

  • 不能使用标点符号。

  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

使用变量

在变量名前面加美元符号可以使用该变量:

有的时候我们需要在美元符号和变量中间添加一个花括号来区分变量名和其他内容之间的边界:

交互式声明变量

看下面这个例子:

echo 用来输出字符串。执行上面这段程序时,会先输出 What is your name? ,之后第三行程序等待用户输入内容,把内容存储在 MY_NAME 变量当中,最后一行在字符串中

变量作用域

在一个脚本里,如果你还没有声明某个变量,就调用了它,Shell 不会给你一个报错,它会返回一个空字符串作为结果:

在终端执行上面脚本的结果如下:

在终端里试试下面的例子:

我们先在终端设置了一个变量 MYVAR,然后通过该界面执行 myvar2.sh 文件,结果该文件并没有继承这个变量。实际上当我们运行 myvar2.sh 时,会生成一个新的 shell 执行该文件,此时两个运行环境是分离的,只有 Shell 当中的环境变量才能被继承,而终端里的 MYVAR 此时只是另一个局部变量而已。

下面两个定义选自菜鸟教程:

  • 局部变量局部变量在脚本或命令中定义,仅在当前 shell 实例中有效,其他 shell 启动的程序不能访问局部变量。

  • 环境变量所有的程序,包括 shell 启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候 shell 脚本也可以定义环境变量。

将局部变量导出变成全局变量,我们可以使用 export 指令:

现在 myvar2.sh 成功继承了环境便令 MYVAR,但是在 myvar2.sh 内改变 MYVAR 并不会影响全局的 MYVAR。在终端打印 MYVAR 结果仍旧是 hello

当 myvar2.sh 执行完后,执行它的环境将会被销毁。如果想让脚本和终端在同一环境下执行程序(此时在脚本内改变变量内容就会影响到整个环境),我们可以 source 这个脚本,具体的做法是在执行脚本的指令前面加一个 . 或者 source

以上就是本文的三个板块。在配置系统环境时经常用到 exportsource ,如果你之前不明白这两个指令的含义,希望这篇文章对你有所帮助。

参考资料

https://github.com/hotvulcan/Thanos.sh/blob/master/Thanos.sh

http://www.runoob.com/linux/linux-shell.html

https://www.shellscript.sh/index.html

https://www.guru99.com/introduction-to-shell-scripting.html

https://www.ibm.com/support/knowledgecenter/en/ssw_aix_71/com.ibm.aix.osdevice/cmd_shell_var_export.htm

本文作者:宫业奇

编辑&版式:霍霍

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

推荐阅读