美文网首页
Shell 之初识(一)

Shell 之初识(一)

作者: 越前君 | 来源:发表于2022-08-21 02:34 被阅读0次
配图源自 Freepik

下一篇:Shell 之变量

一、简述

在计算机科学中,Shell 英文原意是「外壳」,用来区别于 Kernel,即「内核」。

它是用户与内核之间的一座桥梁,简化操作的同时,又能保证内核的安全。从这个层面看,Shell 是一个「应用程序」,一个功能强大、系统级别的超级应用。Shell 提供了很多方便、实用的工具来降低用户操作成本,例如 cptouchmkdir 等内置命令。

历史上,出现了很多种 Shell 应用,其实现、功能以及使用方式大部分相同,但又稍有区别。比如 Boush Shell(sh)、Bourne Again shell(bash)、Z Shell(zsh)等。从这个层面来看,Shell 是一个「解析器」。当用户在命令行环境输入操作指令后,由 Shell 解析器进行解析,然后再传递给操作系统,接着转换为内核可识别的指令操作,进而控制硬件,以到达用户操作计算机的目的。主流操作系统中,内置了很多种 Shell 解析器,最常见的有 bash、zsh 等。

提供了 Shell 的命令行环境的应用,被称为「终端」,即 Terminal。

不仅如此,Shell 同时又是一种「编程语言」。作为命令语言,它交互式解释和执行用户输入的命令,或者自动地解析和执行预先设定好的一连串的命令。作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支等。

所以,Shell 既是一个超级应用,也是一种用户输入的解析器,又能作为一门编程语言。本文将 Shell 视为一门编程语言去介绍。

二、简单使用

Shell 命令执行很简单,只要有一个终端工具即可,而且主流操作系统都会内置。例如 Windows 的 CMD、PowerShell,Unix-like 的 Terminal 等。简单地像 JavaScript 一样,只要有一个浏览器就能运行你所编写的代码。例如:

$ echo 'Hello Shell'
Hello Shell

$ echo $TERM_PROGRAM
Apple_Terminal

是不是很简单!没错,你已经入门了,哈哈!

注意,以上 $ 只是一个「命令行提示符」,一种行文习惯,表示其后的是一个 Shell 命令,常用美元符号 $ 表示。在命令行环境中,不需要输入它。

由于我是写前端的,这里用 JavaScript 类比一下。以上示例,echo 是 Shell 内置函数,将用户输入转换为标准输出(STDOUT),类似于 JavaScript 中的 console.log() 函数。而 TERM_PROGRAM 则是 Shell 内置的一个全局变量,类似于 JavaScript 的 windowObject 等内置变量(对象),只不过在 Shell 中引用变量,需要在变量名之前加上 $,仅此而已。

2.1 命令格式

形式如下:

$ command [ arg1 arg2 ... [ argN ] ]

其中 command 是具体的一个命令或可执行文件,arg1 arg2 ... argN 是传递给命令的参数,它们都是可选的。在 Shell 里,命令与参数、参数与参数之间用一个「空格」(或 Tab 键)区分。多余空格会被忽略,作用相当于一个空格。

$ ls -l

以上示例,ls 是命令,-l 是参数,是可选的。参数通常分为命令配置项和用户输入两种:

  • 配置项参数:一般以连字符 --- 开头,通常有长、短两种形式,比如 list 命令中的 -l--list,二者作用完全一致。短形式便于输入,长形式便于理解,仅此而已。
  • 用户输入参数:除配置项之外的参数,比如 git push origin main 中的 originmain 参数,这类参数往往是每个用户传参差异大,因此无法做成配置项。

2.2 多行命令表示

在命令行环境中,单个命令通常是一行表示,当命令输入完成后,按下「Enter」键,随即执行该命令,并输出结果。

太离谱了,Shell 竟然不给我换行输入的机会,哼!

其实不是的,Shell 是有提供这种输入的。假设命令很长,或者出于阅读性的考虑,我们是需要将命令写成多行的。可以在当前行末尾键入反斜杠 \,再按下「Enter」键即可换行输入了:

# 相当于 echo foo bar
$ echo foo \
bar

# 相当于 echo foobar
$ echo foo\
bar

请注意,反斜杠后的回车并不会占用形成一个「空格」效果,因此实际中需注意参数问题。

2.3 命令结束符与组合符

通常,一行输入多是单条命令。若要一行中执行多条命令,也是可以的。

命令结束符「分号」:

$ command1; command2

👆 以上示例,先执行 command1 命令,待其执行完成之后,才接着执行 command2 命令。而且,无论第一个命令是否执行成功,第二个命令总会执行。

命令组合符 &&||

$ command1 && command2

$ command1 || command2

👆 以上示例,其实跟其他高级语言类似,所以看到就能猜出个大概。

  • && 表示只有 command1 执行成功,才会继续执行 command2
  • || 表示如果 command1 执行失败,才会继续执行 command2

管道符 |

$ command1 | command2

# 相当于
$ command1 > tempfile
$ command2 < tempfile
$ rm tempfile

👆 以上示例,前一个命令的输出,作为第二个命令的输入。这种方式对命令的简化非常有用。

以上提到的几种命令组合方式,命令都是「继发」执行的,并不是「并行」执行的。

三、常用快捷键

在终端工具中,提供了很多快捷键,可以简化操作。常用的有:

  • Ctrl + L:清除屏幕并将当前行移到页面顶部,作用同 clear 命令。
  • Ctrl + C:中止当前正在执行的命令,有些情况下需要按下多次。
  • Ctrl + A:将光标移至行首。
  • Ctrl + E:将光标移至行尾。
  • 方向键上:向后浏览命令执行历史记录。
  • 方向键下:向前浏览命令执行历史记录。

注意,不同操作系统下,部分快捷键组合方式会有所差异。主要差异体现在 Windows 下的 Ctrl 与 macOS 下的 Ctrl 键吧。

论快捷键的话,不得不提的是 Tab 键,可自动补全命令。如果再结合类似 zsh 等强大的 Shell 解析器,那么 Tab 键能玩出各种花样,成倍地提高输入效率。

相关文章

  • shell 第一天

    shell编程初识 1.1 shell编程初识 shell的定义 Shell 是命令解释器 Shell 也是...

  • 目录

    shell 一、 初识shell二、 shell变量三、 正则表达式四、 认识脚本和shell判断表达式五、she...

  • Shell | 初识Shell 1

    一、初识Shell shell是一段应用程序,是用户与操作系统交互的桥梁 shell通常指shell脚本 shel...

  • 初识shell

    什么是shell Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种...

  • 初识Shell

    前段时间在学习git命令行,同时接触了Mac终端运行常用的Linux系统命令觉得挺有意思的,加上正需要对一些文件进...

  • Shell初识

    1.简介 Shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种...

  • 初识shell

    1、创建shell脚本文件 vim test.sh 2、shell脚本第一行 第一行需要写:#!/bin/bash...

  • 初识Shell

    shell shell:俗称壳,为使用者提供操作界面的软件(命令解析器)多数Linux发行版的默认shell都是G...

  • 初识Shell

    下载yum源(Centos 7 为例) [root@localhost ~]# wget http://mirro...

  • Shell 之初识(一)

    下一篇:Shell 之变量[https://www.jianshu.com/p/a739a4c6e4ff] 一、简...

网友评论

      本文标题:Shell 之初识(一)

      本文链接:https://www.haomeiwen.com/subject/ldmmgrtx.html