Shell这单词的原意是“外壳”,跟kernel(内核)相对应,比喻内核外面的一层,即用户跟内核交互的对话界面。
Shell这个词有多种含义。
首先,Shell是一个用C语言编写的程序,提供一个与用户对话的环境,它是用户使用Linux的桥梁。这个环境只有一个命令提示符,让用户通过键盘输入命令,所以又称为命令行环境(command line interface,简写为CLI)。Shell接受用户输入的命令,将命令送入操作系统执行,并将结果返回给用户。
其次,Shell程序又是一个命令解释器,解释用户输入的命令。它支持变量,条件判断,循环操作等语法,所以用户可以用shell命令编写各种小程序,称为脚本(script)。所以shell也是一种解释型程序设计语言。
Shell脚本(shell script),是一种为shell编写的脚本程序
业界所说的shell通常都是指的是shell脚本,但是要知道,shell和shell script是两个不同的概念。
由于习惯的原因,简洁起见,本文出现的“shell编程”都是指shell脚本编程,不是指开发shell自身。
Shell编程跟python编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux的Shell种类众多,常见的有:
我们主要学习的是Bash,也就是 Bourne Again Shell,由于易用和免费,Bash在日常工作中被广泛使用,同时,Bash也是大多数Linux系统默认的Shell。
在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash
#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程序
下面的命令可以查看当前设备的默认shell。
$ echo $SHELL
当前正在使用的Shell不一定是默认Shell,一般来说,ps命令结果的倒数第二行是当前Shell。

下面的命令可以查看当前的Linux系统安装的所有Shell
$ cat /etc/shells

- $ echo hello world
- hello world

上面的例子中, echo 的参数是 hello world, 可以原样输出。
如果想要输出的是多行文本,即包括换行符。这时就需要把多行文本放在引号里面。
我们举个栗子~
第一步,先输入 echo "hello 然后回车,这个时候就给你换行了。
![]()

第二步,输入world" 然后回车


默认情况下,echo 输出的文本末尾会有一个回车符。 -n 参数可以取消末尾的回车符,使得下一个提示符紧跟在输出内容的后面。

那这个是干嘛用的呢?

-e 参数会解释引号(双引号和单引号)里面的转义字符(比如换行符\n)。如果不使用 -e 参数,即默认情况下,引号会让特殊字符变成普通字符,echo不解释他们,原样输出。
Bash单个命令一般都是一行,用户按下回车键,就开始执行。有些命令比较长,写成多行会有利于阅读和编辑,这时可以在每一行的结尾加上反斜杠,Bash将会将下一行跟当前行放在一起解释。

Bash使用空格(或 Tab键)区分不同的参数。

上述命令中,foo 和 bar 之间有一个空格,所以Bash认为它们是两个参数。
如果参数之间有多个空格,Bash会自动忽略多余的空格。

分号(;)是命令的结束符,使得一行可以放置多个命令,上一个命令执行结束后,再执行第二个命令。

除了分号,Bash还提供两个命令组合符 && 和 ||,允许更好地控制多个命令之间的继发关系
- # 如果command1命令运行成功,则继续运行command2命令。
- command1 && command2
-
- # 如果command1命令运行失败,则继续运行command2命令。
- command1 || command2

Bash本身内置了很多命令,同时也可以执行外部程序。怎么知道一个命令是内置命令,还是外部程序呢?
type 命令用来判断命令的来源

待更新(二)shell~