Linux:Shell、BASH以及Shell Script简介

Shell

什么是Shell

Shell(壳程序)是系统的用户界面,提供了用户与内核进行相互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。

在这里插入图片描述

实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果

只要能够操作应用程序的软件都能够称为壳程序,狭义的壳程序指的是命令行方面的软件,如本文接下来介绍的BASH;广义的壳程序则包括图形用户界面模式的软件,因为图形用户界面其实也能够操作各种应用程序来调用内核工作

BASH

什么是BASH

Shell根据发展有多种不同的版本,BASH就是其中一个版本,BASH(Bourne Again Shell)是Linux默认使用的版本

Shell的变量功能

变量

变量是计算机系统用于保存可变值的数据类型,我们可以直接通过变量名称来提取到对应的变量值。就是以一组文字或符号等,来替换一些设置或一串保留的数据。
在这里插入图片描述

环境变量

在 Linux 系统中,环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的家目录(HOME)、邮件存放位置(MAIL)等。为了区别于自定义变量,环境变量通常以大写字符来表示

Linux 作为一个多用户多任务的操作系统,能够为每个用户提供独立的、合适的工作运行环境,因此,一个相同的环境变量会因为用户身份的不同而具有不同的值。如下图:
在这里插入图片描述

变量的使用与设置:echo、=、unset

echo:可以利用echo命令来使用变量,变量在被使用时,前面要加上美元符号$,例如:查看PATH变量的内容:

echo $PATH

在这里插入图片描述
=:用=可以设置或是修改某个变量的内容,例如要把myname变量内容设置为WangGarrison,则:

myname=WangGarrison

在这里插入图片描述
变量在设置时,要符合某些规定,否则会设置失败,规则如下:

  1. 变量与变量内容以一个=来连接
  2. 等号两边不能直接接空格
  3. 变量名称只能是英文字母与数字,且开头不能是数字
  4. 变量内容有空格可使用单引号或双引号将变量引起来

unset:unset可以取消变量,例如取消myname的设置:

unset myname

在这里插入图片描述

环境变量的功能

环境变量可以帮我们实现很多功能,包括根目录(主文件夹)的变换、提示字符的显示、执行文件查找的路径等

可以用env与export命令来查看当前shell环境默认的环境变量,env是environment(环境)的简写

env

在这里插入图片描述
Linux重要的10个环境变量如下表:

环境变量名称 作用
HOME 用户的主目录
SHELL 用户使用的Shell解释器名称
PATH 执行文件查找的路径
EDITOR 用户默认的文本解释器
RANDOM 随机数的变量
LANG 语系数据
HISTSIZE 输出的历史命令记录条数
HISTFILESIZE 保存的历史命令记录条数
PS1 Bash解释器的提示符
MAIL 邮件保存的路径

使用set命令可以查看所有变量(含环境变量与自定义变量)

set

自定义变量转成环境变量

自定义变量与环境变量的主要差别在于环境变量会被子进程所继续引用,而自定义变量不会,父进程与子进程相关性如下图:
在这里插入图片描述
子进程仅仅会继承父进程的环境变量,子进程不会继承父进程的自定义变量。所以原本bash的自定义变量在进入了子进程之后不能在子进程使用,直到子进程exit后才能继续使用

所以要想让父进程的自定义变量可以在子进程使用,则需要把自定义变量转换成环境变量,使用export命令进行转换

export 变量名称

export命令的具体介绍

变量键盘读取、数组与声明

read:用来读取来自键盘输入的变量,可用来与用户交互

read [-pt] variable  #-p后面可以接提示字符   -t后面可以接等待的秒数

在这里插入图片描述
declare,typeset:declare或typeset是一样的功能,就是声明变量的类型

declare [-aixr] variable
-a:将后面名为variable的变量定义成为数组(array)类型
-i:将后面名为variable的变量定义成为整数(integer)类型
-x:用法与export一样,就是将后面的variable变成环境变量
-r:将变量设置成为readonly类型,该变量不可被更改内容,也不能unset

在默认情况下,变量类型默认为字符串,如下图中变量a默认是字符串2+3+4
在这里插入图片描述
数组(array)变量类型

var[index]=content  #数组名为var,下标是index,内容是content,

例如:
在这里插入图片描述

命令别名与历史命令

命令别名设置:alias、unalias

alias lm='ls -al | more'  #把ls -al |more命令简化为lm

直接敲alias可以查看当前有哪些命令别名。如下图:
在这里插入图片描述
删除命令别名

unalias lm

历史命令

history [n]  
history [-c]  
history [-raw]
选项与参数:
n:列出最近的n条命令行表
-c:将目前的shell中的所有history内容全部清除
-a:将目前新增的history命令新增入histfiles中,若没有histfiles,则默认写入~/.bash_history
-r:将histfiles的内容读到目前这个shell的history中
-w:将目前的history记录内容写到histfiles中

当我们以bash登录Linux主机之后,系统会主动地由家目录~/.bash_history读取以前曾经执行过的命令,该目录会记录的数据数目,就与bash的HISTFILESIZE这个环境变量有关

Shell Script

什么是ShellScript

Shell Script即Shell脚本,是针对shell所写的脚本。我们将一些shell规定的语法与命令,再搭配正则表达式、管道命令与数据流重定向等功能,写成一个纯文本文件以达到我们想要的处理目的,再配以“.sh”的扩展名,这便是“Shell script”

简言之,我们只有通过Shell 这个工具来解释我们的命令等请求,才能成功实现与计算机的交流,同时再搭配Shell script这个可以批量处理命令的“程序”,我们就可以与计算机更好的交流

参考书籍

《鸟哥的Linux私房菜》第四版 第10章认识与学习BASH

猜你喜欢

转载自blog.csdn.net/huifaguangdemao/article/details/108393856