Linux之Shell基础

HarderHeng Lv5

一、Shell是什么

​ 我们现在的使用的操作系统都是带有图形界面的,早期的操作系统是使用命令行的。操作系统本身只是一些内核代码,图形化界面让我们可以简单的使用操作系统,命令行也是让我们能够对操作系统进行输入和输出。但是真正能够控制操作系统硬件的只有内核,不管是图形化界面还是命令行,他们都是帮助用户使用操作系统内核的工具,是用户和内核的桥梁。

​ 对用户来说,他们不能也没有必要直接接触内核,这时候就需要有一个程序来帮助用户能够操作内核,这个程序就是Shell。Shell和其他的应用程序一样,不同的是,要使用Linux系统必须使用Shell。

现在的Linux发行版都有自带的图形化界面,使用图形化界面也可以

二、Shell的工作原理

​ Shell本身使用内核提供的接口进行工作,调用这些接口来实现对硬件的控制。

​ Shell自带的命令叫做内置命令,也可以使用其他应用程序叫做外部命令

​ Shell通过调用其他的程序,并且将不同的程序通过数据的传递联系起来,也就是将一个程序的输出作为另一个程序的输入,就具备了非常强大的功能。

​ 在Shell中键入一个命令,Shell会识别这是否是一个内部命令,如果不是则作为外部命令来执行,但是能够执行的外部命令必须存在于环境变量的路径中。

三、Shell的使用

​ 在没有图形化界面的系统中,只能使用Shell来控制系统。

(1 控制台

​ 在Linux中也可以从图形界面直接进入Linux控制台(Console),使用快捷键键 Ctrl + Alt + Fn(n=2,3,4,5,6)

​ 在控制台中,用户登录后就进入了Shell。

(2 终端

​ 在Windows系统或者Linux桌面环境中,可以利用终端(Terminal)来使用Shell,其实终端本质上是一个终端模拟器,帮助用户在桌面环境下也可以使用Shell。

四、Bash介绍

​ Bash是大多数Linux系统的默认Shell,具有许多现代化的强大功能。

五、环境变量

环境变量有很多种。常见的如下。

  • PATH决定了Shell将到那些目录中寻找命令和程序。
  • HOME:当前用户主目录(默认目录)
  • USER:当前用户的用户名
  • HISTSIZE:历史记录数
  • SHELL:当前使用的Shell类型
  • HOSTNAME:主机名字
  • LANGUGE:语言相关的环境变量,多语言可以修改此环境变量

环境变量的名称一般是大写的

运行Shell时,会同时存在三种环境变量

  • 局部变量:在脚本或命令中定义,只在当前的Shell实例中有效,其他Shell启动的程序不能访问
  • 环境变量:所有的程序都可以访问的变量。
  • shell变量:是由shell程序设置的特殊变量,shell变量中有一部分是环境变量,有一部分是局部变量,保证了shell的正常运行。
shell变量移步下一部分

PATH环境变量

使用printenv打印环境变量

Shell执行命令时,也可以调用其他程序。一般来说可以使用绝对路径、相对路径或者环境变量启动应用程序。这里的环境变量就是一个可执行文件所在的路径。

  • PATH=$PATH:/[路径] 临时添加,当前进程有效
  • export PATH=$PATH:/[路径] 临时添加,当前进程和子进程有效
  • 更改

六、Shell脚本编程

创建文件和执行

vim test.sh创建shell脚本文件并进行编辑。

第一行用于指定脚本的执行shell,后面定义了一个name变量,然后打印出这个变量。

1
2
3
#!/bin/zsh 
name="Liuheng"
echo ${name}

使用chmod +x test.sh命令给脚本执行权限。

然后./test.sh执行脚本,就打印出了变量。

脚本执行方式

  • source source [文件名]这样进行脚本文件的执行时,会直接在当前的shell环境中执行,改变当前shell的内容,变量也会被临时添加进当前的shell
  • bash bash [文件名]这样进行脚本文件的执行时,会创建子shell调用bash执行,将结果打印到当前shell而不会直接改变当前shell。

如果是直接绝对路径加文件名进行执行,首先会根据指定的执行shell进行运行,如果没有指定那么就直接使用当前的shell的子shell。

shell变量

变量在shell中是这样被定义的name="tanghuan",定义变量时,变量名不加美元符号$.

变量的命名规则如下:

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线 _。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。
  • 那后面的字符串的双引号是必须的吗?答案是否定的。
  • 字符串可以用单引号,也可以用双引号,也可以不用引号。

单引号字符串的限制

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

${NAME} 中的$后面带上一个花括号可以帮助确定变量范围,是良好的编码习惯。

1
2
3
4
5
6
name="Liuheng"
x='x,'${name}''
y='y,${name}'
echo ${name}
echo ${x}
echo ${y}

执行结果如下

image-20241010094842433

双引号的优点

  • 双引号里可以有变量
  • 双引号里可以出现转义字符
1
2
3
4
5
6
7
8
name="Liuheng"
x="x,"${name}""
y="y,${name}"
z="z,\"${name}\""
echo ${name}
echo ${x}
echo ${y}
echo ${z}

执行结果如下

image-20241010100112679

其他操作和命令

  • readonly [变量名] 变成只读
  • unset [变量名] 删除变量
  • declare [变量名]声明一个变量,默认是字符串,加一个 -i 可以创建整型变量。
  • `$
  • Title: Linux之Shell基础
  • Author: HarderHeng
  • Created at : 2024-06-21 10:00:29
  • Updated at : 2024-12-04 09:26:49
  • Link: https://harderheng.life/2024/06/21/Linux之Shell基础/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments