【译】Shell 入门

2019-02-17  本文已影响9人  zhangPeng丶

本文为译文,原文链接shell

shell是一个高效的、文本化的计算机接口。

shell提示符:当你打开终端时看到的一切。可以让用户执行的程序和命令,常见的有:

但是shell允许您做更多的事情;您可以调用计算机上的任何程序,并且命令行工具的存在就是为了完成您可能想做的任何事情。他们往往比他们的图形对手更有效率。我们这门课会讲到很多。

shell提供交互式编程语言 ("脚本")。有很多种shell

在这个课堂上,我们将关注无处不在的shbash,但是使用其他的shell感觉更好。我喜欢fish

在您的工具箱中,shell程序是一个非常有用的工具。可以直接在提示符下编写程序,也可以将程序写入文件。

通过#!/bin/sh+chmod +x将shell程序变成可以执行的

使用shell工作

将一个命令运行多次:

for i in $(seq 1 5); do echo hello; done

有很多东西可以展开来讲:

我们可以举个例子:

for f in $(ls); do echo $f; done

将打印当前目录中的每个文件名。可以使用=设置变量的值(=两边不需要空格)

foo=bar
echo $foo

这里也有一些特殊的变量:

只打印目录

for f in $(ls); do if test -d $f; then echo dir $f; fi; done

这里展开来讲:

可是等等!结果是错误的!如果有个文件叫做“我的文档怎么办”?

参数分割

Bash是通过空格分割参数;但这并不总是您想要的!

答案是通配符!

空格的问题不止于此:

可组合性

Shell之所以强大,部分原因在于它的可组合性。可以将多个程序链接在一起,而不是让一个程序做每一件事情。

关键字是|

a|b表示同时运行ab,将a的所有输出,当作b的输入,打印b的输出。

您启动的所有程序(“进程”)都有三个“流”:

为什么这个这么有用?您亲自试试下面程序的输出!

Bash还提供了许多其他编写程序的方法。

您可以组合形成一个命令(a; b) | tac:先运行a,然后运行b,然后把他们的所有输出当作tac命令的输入,tac是一个将输入反序的命令。

一个不太为人所知但超级有用的方法是过程替换。b <(a)将运行a,为输出流生成一个临时文件名,并将该文件名传递给b。举个例子:

diff <(journalctl -b -1 | head -n20) <(journalctl -b -2 | head -n20)

将向您展示前一个引导日志的前20行与更前一个引导日志的前20行之间的区别。

任务和进程控制

如果您在后台执行周期更长的任务呢?

在你的电脑上运行的其他东西呢?

标志符

大多数命令行程序都使用标志符接受参数。标志符通常有短形式(-h)和长形式(--help)。通常运行CMD -hman CMD会给你展示该CMD可用的标识符的列表。短标志通常可以组合使用,运行rm -r -f相当于运行rm -rf或者rm -fr。一些常见的标识符是有约定俗成的标准的,您会发现它们在很多命令中:

此外,双破折号--用于内置命令和许多其他命令中,表示命令选项的结束,之后只接受位置参数。因此,如果您有一个可以使用-v参数的文件(文件类型支持使用),并且想要grep它,grep pattern -- -v可以,但是grep pattern -v不行。事实上,创建这种文件的方法是touch -- -v

附录

  1. shell
  2. Shell笔记
  3. shell 中各种括号的作用
  4. Shell test 命令

title: 【译】Shell 入门教程

author: zhangpeng

date: 2019.02.17

GitHub: https://github.com/fullstack-zhangpeng

上一篇下一篇

猜你喜欢

热点阅读