Shell入门01 -- Shell定义,种类,作用,调试,特性
2021-09-27 本文已影响0人
YanZi_33
前言
- 计算机只能识别机器语言0和1,但是 ,我门程序员不可能直接写机器语言的代码,所以要想讲程序员开发的代码在计算机上运行,就必须找
工具
来翻译成机器语言,这个工具
就是我们常说的编译器
和解释器
;
编程器语言的分类
编译型语言
- 程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言文件,运行时不需要重新翻译,直接使用编译的结果就行了,程序执行效率高,依赖编译器,跨平台性差,例如C,C++,Object_C,Java等等;
解释型语言
- 程序不需要编译,程序在运行时由解释器翻译成机器语言,每执行一次都要翻译一次,因此效率比较低,例如Python,Shell,Ruby,JavaScript等等都是解释型语言;
Shell定义
- 首先,Shell 是一个程序,提供一个与用户对话的环境。这个环境只有一个命令提示符,让用户从键盘输入命令,所以又称为命令行环境(command line interface,简写为 CLI)。Shell 接收到用户输入的命令,将命令送入操作系统执行,并将结果返回给用户。本书中,除非特别指明,Shell 指的就是命令行环境。
- 其次,Shell 是一个命令解释器,解释用户输入的命令。它支持变量、条件判断、循环操作等语法,所以用户可以用 Shell 命令写出各种小程序,又称为脚本(script)。这些脚本都通过 Shell 的解释执行,而不通过编译。
- 最后,Shell 是一个工具箱,提供了各种小工具,供用户方便地使用操作系统的功能;
- 总之,Shell是介于系统内核与用户之间,负责命令解释的;
Shell的种类
- Shell 有很多种,只要能给用户提供命令行环境的程序,都可以看作是 Shell;
- 历史上,主要的 Shell 有下面这些:
- Bourne Shell(sh)
- Bourne Again shell(bash)
- C Shell(csh)
- TENEX C Shell(tcsh)
- Korn shell(ksh)
- Z Shell(zsh)
- Friendly Interactive Shell(fish)
- Bash 是目前最常用的 Shell,除非特别指明,下文的 Shell 和 Bash 当作同义词使用,可以互换;
- 终端执行
cat /etc/shells
可查看本机的shell种类,如下所示:
image.png - 终端执行
bash --version
可查看bash的版本信息; - 终端与shell之间的关系:打开一个终端,就是打开了一个shell程序;
Shell脚本
- 简单来说shell脚本是
将需要执行的命令保存到文本中,按照顺序执行
,它是解释型语言,不需要进行编译; 若干命令 + shell格式 + shell语法 + 逻辑 = shell脚本
- 其作用:简化操作步骤,提高效率,减少人为干预,减少系统故障;
- 下面先上一个常规操作,熟悉一下创建脚本文件的命令行;
-
mkdir -p soft/scripts
:创建文件路径/soft/scripts
,其中加上-p
是为了防止执行错误; -
mkdir day01
:创建文件夹day01
;
创建Shell脚本
-
vim test
:创建Shell脚本文件test,并进入文件编辑区域,然后按i
,可向文件中添加内容,编辑完成后按Esc
退出,再按组合键shift + :
,然后输入wq
保存退出;
image.png -
cat test
:查看test文件中的内容; -
./test
:执行脚本文件,注意⚠️test文件是没有后缀的
也就是说没有指明文件的类型,而脚本文件类型通常有Shell脚本
与Python脚本
,./test
命令默认执行Shell脚本
,发现报错-bash: ./test: Permission denied
,是因为没有赋予执行权限,输入chmod +x test
即可赋予执行权限,然后再执行./test
,可执行成功! -
bash test
:也可执行Shell脚本
其与sh test
等价,其执行脚本有权限的,可以直接执行,这是与./test
命令的区别;
创建Python脚本
-
image.pngvim tes
:再创建一个tes文件,内容如下所示:
-
然后执行
./tes
或者bash tes
或者sh tes
均出现报错./tes: line 3: print: command not found
,这是因为tes文件是Python脚本文件
,./tes
默认执行的Shell脚本,所以会出现报错,可通过python tes
执行成功! -
对
image.pngtes
文件做如下修改,顶部第一行加入#!/usr/bin/python
,如下所示:
-
Snip20210928_78.png#!/usr/bin/python
:告诉系统使用python解释器解释脚本,所以这行代码是必须添加的,同理Shell脚本文件首行也要加上解释器#!/bin/bash
,如下:
-
发现两个路径
/bin
与/usr/bin
: -
在
/bin
路径下没有python
可执行文件,而在/usr/bin
路径下存在; -
bash
与sh
这个两个可执行文件在/bin
与/usr/bin
路径下均存在;
总结
- 当脚本文件没有指明解释器时,
./脚本文件名
默认执行shell脚本,若为python脚本,就会出现报错,且./脚本文件名
需要添加执行权限; - 当Shell脚本指明解释器
#!/bin/bash
,Python脚本指明解释器#!/usr/bin/python
,均可通过./脚本文件名
执行脚本,也可分别通过sh 脚本文件名
与python 脚本文件名
执行脚本; - 如果直接将
解释器
的路径写死在脚本中,可能在某些系统就会存在找不到解释器的兼容性问题,可使用#!/bin/env bash
Shell脚本的调试
-
sh -vx 脚本文件名
:查看脚本文件的执行过程; -
sh -n 脚本文件名
:检测脚本文件是否存在语法错误; -
vim 脚本文件名 +报错的line
:可直接定位到脚本文件报错的指定函数位置; -
Command + T
:创建一个新的终端窗口;
Bash的特性
命令与文件的自动补全
-
tab
键能补全命令和文件;
常用快捷键
-
control + c
:终止前台运行的程序; -
control + l
:清屏; -
control + r
:搜索历史命令; -
control + z
:将前台运行的程序挂起到后台; -
control + d
:退出 等价于exit
常用通配符
-
*
:匹配0个或多个任意字符; -
?
:匹配任意单个字符;
引号
- 双引号:对引起来的内容,会解析变量;
- 单引号:对引起来的内容,不会解析变量,输入等于输出;
- 反引号:是用来解析shell命令的 其与
$()
等价;