LINUX期末

发布于 2025年6月15日 12:28:14 (武汉时间)

Linux操作系统

第三章:Linux常用命令

Linux命令语法:命令名 [命令选项] [命令参数]

  • ls [目录]:查看当前目录或指定目录下的所有子目录或文件

  • ls命令选项

    • -a : 查看当前目录或指定目录下的所有子目录或文件(包含隐藏文件或目录)

    • -l:以列表方式查看当前目录下的所有可见内容

    • -h:给文件大小适配一个合适的单位(默认是B,可以根据大小匹配K、M、G),不能单独使用,需要结合-l使用

    • 各个选项可以结合使用(-a -l -h或者-alh),且没有顺序

  • cd:切换目录命令

    1. 绝对路径:从根目录(/)开始

    2. 相对路径:从当前目录开始

      • ./ : 当前目录(可以省略)

      • ../ :上一级目录(可以连续使用两个../,表示回到上上级目录)

    3. ~ : 回到当前用户家目录(主目录)

    4. -:在上一次路径到当前路径之间切换

  • cd 绝对路径/相对路径

  • history [n]:查看输入过的历史命令(可以指定最近条目数)

  • clear:清屏命令,快捷键:Ctrl+L

  • 命令名 --help:查看命令的官方帮助文档

  • man [章节号] 命令名 [选项]:通过章节号的方式查看命令帮助文档

  • Tab键:命令补全快捷键

  • which:查看命令所在位置(目录)

  • pwd:查看用户当前所在工作目录的绝对路径

    第五章 文件和目录管理-1

    • ls命令进阶:模糊搜索

image-20250311102627058

image-20250311102639524

  • 输出重定向:>和>>

    • ">":如果文件不存在则会创建,存在则会覆盖原文件内容
    • ">>":如果文件不存在则会创建,存在则会追加到原文件末尾
  • cat命令:查看文件内容,也可以同时查看多个文件及合并文件内容到指定文件

    • 查看单个文件内容:cat 文件名
    • 查看多个文件内容:cat 文件名1 文件名2 ...
    • 将文件内容重定向到另一个文件:cat 文件名1 >(>>) 文件名2
  • more命令:以分页的方式查看文件内容(适用于文件内容较多的情况): more 文件名

    • 空格:下一页
    • 回车键:下一行
    • b:返回上一页
    • f : 下一页
    • q : 退出
  • touch命令:创建文件

    • 创建单个文件:touch 文件名
    • 创建多个文件:touch 文件名1 文件名2 ...
  • ln命令:创建链接文件

    • 硬链接文件:ln 源文件 链接文件,源文件删除则硬链接文件不受影响,源文件发生更改则硬链接文件也随之更改,反过来也可以。
    • 软链接文件:ln -s 源文件 链接文件,源文件删除则软件链接文件失效,源文件发生更改则软链接文件也随之更改,反过来也可以。
  • mkdir:创建目录(文件夹)

    • 创建一级目录:mkdir 目录名
    • 创建多级目录:mkdir 目录名1/目录名2/... -p
    • tree命令:以树状结构展示目录和文件信息(sudo apt install tree 安装)
  • rmdir : 删除目录(文件夹)

    • 只能删除空目录,且不能为当前目录
  • rm : 删除文件或目录

    image-20250311114023060

第六章 文件和目录管理(二)

  • grep命令:文件内容搜索命令,支持正则表达式匹配(模糊匹配)

  • grep [-选项] ‘查找文本’ 文件名

    image-20250318102722649

    • ^:表示以什么开头的含义
    • $:表示以什么结尾的含义
    • [字符列表]:可以匹配字符列表中的任意一个
    • . :通配符(匹配除换行符以外的任意一个字符)
  • gedit命令:打开文本编辑器,用于打开并编辑文本文件

    • Ctrl+S:保存
    • Ctrl+Q:退出
  • | :管道符,左边为输入数据(写入),右边为输出数据(读取),可以同时使用多个管道

    • sort:对搜索结果升序排序
    • uniq:对搜索结果去重
  • find命令:查找文件命令,find [路径] -选项 参数

    • -name:按名称查找,支持匹配符模糊查找(*、?、[]等)
    • -size [+|-]n:按文件大小查找,n表示等于n单位大小,+n表示大于n个单位的文件,-n表示小于n个单位的文件,单位:c(字符)、b(字节)、k(KB)、M(MB)、G(GB),指定区间范围时可以结合-a(逻辑与)、-o(逻辑或)、-not(逻辑非)
    • -type [f|l|d]:按文件类型查找,f表示普通文件、l表示软链接文件、d表示目录
    • mtime +|-n:按最近修改或创建时间查找文件,+n表示n天前,-n表示n天内修改或创建的文件
    • -perm 权限值:按权限查找,权限值0~7(r(读权限):4、w(写权限):2、x(执行权限):1)

cp命令:复制文件或目录

  • cp [-选项] 源文件 目标文件/路径

image-20250325102932189

mv命令:移动/剪切文件或目录

  • mv [-选项] 源文件 目标文件/路径

image-20250325105132636

tar命令:文件归档/打包

  • tar [-选项] 档案文件名 源文件

    image-20250325110938594

gzip命令:文件压缩命令,将打包/归档的档案文件压缩

  • gzip [-选项] 被压缩文件/档案文件 [压缩文件名(默认为xxx.tar.gz) ]

    image-20250325111948645

tar命令的-z选项

  • tar这个命令并没有压缩的功能,它只是一个打包的命令,但是在tar命令中增加一个选项(-z)可以调用gzip实现了一个压缩的功能,实行一个先打包后压缩的过程。

  • 压缩用法:tar zcvf 压缩包包名 文件1 文件2 ...

  • 解压用法:tar zxvf 压缩包包名

  • -z :指定压缩包的格式为:fileName.tar.gz

  • 解压到指定目录:-C (大写字母“C”)

zip、unzip:分别为文件压缩、解压命令(压缩文件名为xxx.zip)

  • 通过zip压缩文件的目标文件不需要指定扩展名,默认扩展名为zip。压缩选项-r可以省略。

  • 压缩文件:zip [-r] 压缩文件名 被压缩的源文件解压文件(解压到当前目录):unzip 压缩文件名

  • 解压文件:unzip 压缩文件名 -d 指定解压目录

第七章 用户和权限管理(一)

添加用户:[sudo] useradd [-选项] 用户名

  • -d:指定用户登录系统时的主目录,如果不使用该参数,系统自动在/home目录下建立与用户名同名目录为主目录

  • -m:自动建立目录

  • -g:指定组名称

修改用户密码:[sudo] passwd [用户名]

删除用户:[sudo] userdel [-r] [用户名]

  • -r:表示同时删除用户的主目录

切换用户:su [-] [用户名]

  • su等价于su root,表示切换到管理员账户,su 普通用户名表示切换到指定的普通用户

  • -表示切换用户的同时将工作目录也切换到目标用户的主目录

查看当前所处用户:whoami

查看登录用户:who [-选项]

  • -q或--count:查看当前登录的用户数

  • -H或--heading:显示列标题

退出当前用户:exit(如果是图形界面,则退出当前终端)

第八章 用户和权限管理(二)

查看所有用户组:

cat /etc/group

  • 组名:口令:组标识号:组内用户列表
groupmod+3次Tab键(如果使用了空格隔开则连续按2次Tab键即可)

查看指定用户所在的组:groups 用户名

添加用户组:[sudo] groupadd 组名

修改用户所在组:usermod

  • usermod -g 用户组 用户名 : 设置用户的主组(默认组)
  • usermod -G 用户组 用户名 :设置用户的附加组
  • usermod -aG 用户组 用户名 :添加用户的附加组

删除用户组:groupdel

  • 如果该用户组中已经有用户存在,则不能删除其主组,可以删除附加组;如要删除主组,需要先删除用户

新创建的用户,默认不能sudo,需要为新用户添加sudo权限:sudo usermod -aG sudo,adm 用户名

文件权限:

读权限(r) :对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。
写权限(w) :对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。
可执行权限(x) :对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。
第一组权限控制访问自己的文件权限,即所有者权限。
第二组权限控制用户组访问其中一个用户的文件的权限。
第三组权限控制其他所有用户访问一个用户的文件的权限

字母法:chmod u/g/o/a +/-/= rwx组合 文件名

  • u:user 表示该文件的所有者
  • g:group 表示与该文件的所有者属于同一组者,即用户组
  • o:other 表示其他用户
  • a:all 表示这三者皆是

数字法:“rwx” 这些权限也可以用数字来代替r:读取权限,数字代号为 "4"w:读取权限,数字代号为 "2"x:读取权限,数字代号为 "1"-:不具有任何权限,数字代号为 "0"

参数-R:递归修改目录权限

修改文件所有者:chown

  • chown 用户名 文件名

修改文件所属组:chgrp

  • chgrp 组名 文件名

第九章 系统管理

日历命令:cal [-y]

  • -y:表示显示当前整年日历

显示系统时间命令:date ['+format'],format格式化字符串说明如下:

  • %y:短格式年份(2位数)、%Y:长格式年份(4位数)
  • %m:月份 %d:日期
  • %H:时 %M:分 %S:秒

    image-20250422160252899

查看进程命令:ps [-选项]

image-20250422144624888

进程详细状态各字段含义:

image-20250422144751766

动态显示进程:top [-d 时间(秒)] : 间隔指定秒数更新一次进程信息,可以通过Ctrl+C停止查看进程

在top命令执行后,可以按下按键得到对显示的结果进行排序:

image-20250422163245759

  • 说明:k(小写):根据输入的PID来终止进程,退出也可以使用Ctrl+C快捷键。

终止进程:kill,一般需要结合ps或top命令查看进程号PID(相当于top命令结合k键)

  • kill [-signal] pid

  • signal:信号值,信号值从0到15,其中9为绝对终止,可以处理一般信号无法终止的进程

    image-20250423104518301

关机重启命令:

reboot:重新启动操作系统
shutdown –r now:重新启动操作系统
shutdown -h now:立刻关机,其中now相当于时间为0的状态
shutdown -h 20:25:系统在今天的20:25关机(shutdown -c 取消)
shutdown -h +10:系统再过十分钟后自动关机(shutdown -c 取消)
init 0:关机
init 6:重启

检测磁盘空间:df

df命令用于显示文件系统的磁盘空间使用情况,包括已使用、可用、挂载点等信息。它会展示系统中各个分区的磁盘容量、已用空间、可用空间、文件系统类型等详细信息。主要用于监控系统磁盘的整体使用情况,让用户了解各个分区的空间使用状态,以便及时进行磁盘空间的规划和管理。

  • -a:显示所有文件系统的磁盘使用情况。
  • -k :以K(1024B)为单位显示
  • -m:以M(1024K)为单位显示
  • -h:根据文件大小自动选择合适的单位
  • -T:显示文件系统类型
  • -t 文件系统名:显示各指定文件系统的磁盘空间使用情况

检测目录或文件所占磁盘空间:du

du [选项] [文件或目录名]

du命令主要用于显示指定文件或目录所占用的磁盘空间大小。它会递归地遍历目录下的所有文件和子目录,计算并显示每个子目录以及整个目录的磁盘使用情况。du常用于查找占用磁盘空间较大的文件或目录,帮助用户清理磁盘空间时定位目标。比如,当系统磁盘空间不足时,可以使用du命令逐步查找各个目录的占用情况,找到占用空间大的文件或目录,进而决定是否删除或迁移这些文件。

  • -a:递归显示指定路径下所有目录和文件的大小。
  • -b:显示目录或文件大小时,以byte为单位。
  • -k:以KB为单位输出
  • -m:以MB为单位输出
  • -h:以K,M,G为单位,提高信息的可读性。
  • -c:递归显示指定路径下目录的大小,同时也显示该目录(第一级目录)的总大小。
  • -s:仅显示该目录(第一级目录)的总大小。

查看或配置网卡信息:ifconfig

测试主机连通性:ping

测试网络连接是否正常

ping ip地址:ping 192.168.11.110
ping 域名:ping www.baidu.com
  • -c:指定测试连接次数(发送的数据包数量)
  • -i:指定发送数据包的时间间隔,单位为秒

启动/关闭指定的网络设备(网卡)

  • 关闭指定的网络设备:sudo ifconfig 网卡 down
  • 开启指定的网络设备:sudo ifconfig 网卡 up

修改IP地址:ifconfig 网卡 IP地址

比如:ifconfig ens33 192.168.11.110

第十章 vi/vim编辑器

vi是“Visual interface”的简称,是一个文本编辑程序, vi没有菜单,只有命令,且命令繁多。它可以执行输出、删除、查找、替换、块操作等众多文本操作,vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性,vi是安装ubuntu时会自动安装,vim一般需要自己安装: sudo apt install vim

vi/vim的工作模式

image-20250429203112453

如果要从命令模式转换到编辑模式,可以键入命令a或者i;如果需要从文本模式返回命令模式,则按Esc键即可。在命令模式下输入“:”即可切换到末行模式,然后输入命令。编辑模式和末行模式不能直接切换,需要先转到命令模式。

vim基础操作-编辑模式

输入以下字符可进入编辑模式,可以编辑文本

  • i: 在光标前一个字符插入
  • I: 在行首插入
  • a: 在光标后一个字符插入
  • A: 在行未插入
  • o: 向下新开一行,在行首插入
  • O: 向上新开一行,在行首插入

vim基础操作-命令模式

ESC:从插入模式或末行模式进入命令模式

移动光标操作:
  • h或左方向键: 左移
  • j或下方向键: 下移
  • k或上方向键: 上移
  • l或右方向键: 右移
  • gg:光标移动到文件的第一行行首
  • M: 光标移动到当前页的中间行
  • G: 光标移动到文件的最后一行行首
  • nG:光标移动到这个文件的第n行。(可配合 :set nu)
  • w: 向后一次移动一个字
  • b: 向前一次移动一个字(以空格或符号作为分隔符,会自动分隔中英文和数字)
  • n:光标向下移动 n 行(:n:跳到指定行)
  • {: 按段移动(空行作为分隔符),上移
  • }: 按段移动(空行作为分隔符),下移
  • Ctr-d: 向下翻半屏
  • Ctr-u: 向上翻半屏
  • Ctr-f: 向下翻一屏
  • Ctr-b: 向上翻一屏
删除命令:
  • x: 删除当前行的光标后一个字符,相当于 Del
  • X: 删除当前行的光标前一个字符,相当于 Backspace
  • dd: 删除光标所在行
  • ndd 删除光标所在的n行
  • D: 删除光标后本行所有内容
  • d0: 删除光标前本行所有内容
  • dw: 删除光标后的字符串/单词
撤销命令:
  • u: 撤销
  • Ctr-r: 反撤销(向前撤销)
重复命令:
  • . : 重复上一次操作的命令
文本行移动:
  • '>>': 文本行右缩进一个tab键距离
  • ''<<: 文本行左缩进一个tab键距离
复制粘贴:
  • yy: 复制当前行
  • n yy:复制 n 行
  • p: 在光标所在位置向下新开辟一行,粘贴
可视模式:
  • v: 按字符移动,选中文本
  • V: 按行移动,选中文本,可视模式可以配合 d(删除), y(复制),p(粘贴), >>(右移), <<(左移)
替换操作:
  • r: 替换当前(光标后)字符
查找命令:
  • /findStr: 查找指定字符串
  • n: 下一个
  • N:上一个
替换命令:
  • :s/str1/str2 替换当前行第一个str1为str2
  • :s/str1/str2/g 替换当前行所有的str1为str2
  • :%s/str1/str2 替换所有行的第一个str1为str2
  • :%s/str1/str2/g 替换所有行的所有str1为str2
  • :n1,n2s/str1/str2/g 替换n1到n2行的所有str1为str2

vim基础操作-末行模式

在命令模式下,按:号即可进入末行模式

  • :w 保存
  • :q 退出
  • :wq 保存退出
  • :q! 强制退出
  • :nu 显示当前行号
  • :set nu 显示所有行号
  • :set nonu 取消行号

第十一章 软件安装和卸载

apt方式安装(在线安装):APT全称Advanced Packaging Tool,适用于大多数日常的软件安装和管理场景。当你需要从官方软件源或第三方软件源安装最新版本的软件时,使用apt可以方便快捷地完成操作,并且它会自动处理软件的依赖关系,确保软件能够正常安装和运行。

dpkg方式安装(本地安装):通常在处理本地.deb软件包时使用。例如,当你从官网下载了一个特定版本的软件.deb包,或者需要安装一些没有包含在软件源中的软件时,可以使用dpkg来安装这个本地软件包。

APT方式安装和卸载软件

  • 更新软件包列表:sudo apt update
  • 更新/升级已安装的软件:sudo apt upgrade
  • 查看可以升级的软件列表:apt list --upgradable
  • 安装软件:sudo apt install <软件包名称>(也可以指定版本安装:sudo apt install <软件包名称>=<版本号>)
  • 查看可用版本:apt show <软件包名称> | grep Version
  • 卸载软件:sudo apt remove <软件包名称> (删除软件的配置文件:sudo apt purge <软件包名称>),也可以卸载软件的同时删除软件的配置文件:sudo apt remove <软件包名称> --purge
  • 清理无用的软件包:sudo apt autoremove
  • 清理软件包缓存:sudo apt clean
  • 查看已安装的软件:apt list --installed / apt list --installed | grep ‘正则表达式’
  • 查看软件版本:软件包名 -v
  • 修复损坏的依赖关系:sudo apt install -f
  • 重新安装:sudo apt install <软件包名称> --reinstall

DPKG方式安装和卸载软件

DPKG方式安装软件命令:如果我们手动下载了.deb 包,可以通过以下命令进行操作

  • 安装Debian包文件:sudo dpkg -i 包名.deb
  • 查看已安装的软件:dpkg -l | grep
  • 卸载一个已安装的包:sudo dpkg -r 软件名
  • 完全清除一个已安装的包:sudo dpkg -P 软件名

第十二章 shell脚本编程(1)

Shell 是一种命令行解释器,它充当了用户与 Linux 内核之间的接口。用户通过在 Shell 中输入各种命令,Shell 会将这些命令解析并传递给内核去执行相应的操作,然后把内核执行的结果返回给用户,使得用户可以便捷地控制系统完成各种任务,比如文件管理、进程管理、软件安装等。Shell 编程跟 java、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

第一个shell脚本

新建一个文件 test.sh,扩展名为 sh(sh代表shell),打开文本编辑器(可以使用gedit/vi/vim 命令来编辑文件)

示例:#!/bin/bashecho "Hello World !"

说明:#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。(默认使用bash,也可以省略)echo 命令用于向窗口输出文本。

运行 Shell 脚本

1、作为可执行程序将上面的代码保存为 test.sh,并 cd 到相应目录说明:一定要写成 ./test.sh,而不是 test.sh,告诉系统就在当前目录找,不然会找不到的

chmod u+x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本

2、作为解释器参数这种运行方式是直接运行解释器,其参数就是 shell 脚本的文件名

/bin/sh test.sh或/bin/bash test.sh

说明:这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

Shell 注释

单行注释以 # 开头的行就是单行注释,会被解释器忽略。多行注释:<<EOF 注释内容 EOF,EOF可以为其他字符,比如::<<! 注释内容 !

image-20250513170459072

image-20250513170516019

Shell 变量命名

变量命名规则命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。中间不能有空格,可以使用下划线(_)。不能使用标点符号。不能使用bash里的关键字(可用help命令查看保留关键字)。

使用变量定义变量:变量名=值,变量名与值和等号之间不能有空格使用变量时只要在变量名前面加美元符号即可

name="qinjx"
echo $name

为了帮助解释器识别变量的边界,将变量使用{}括起来,推荐给所有变量加上花括号,这是个好的编程习惯

name="qinjx"
echo ${name}

image-20250513170635196

Shell 只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

#!/bin/bash

readonly myName="zhangsan"

myName="lisi"

运行时报错:

image-20250513170739462

删除变量

使用 unset 命令可以删除变量。语法:unset variable_name变量,被删除后不能再次使用。unset 命令不能删除只读变量。

image-20250513170804484

image-20250513170818741

image-20250513170824906

Shell 字符串

字符串是shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号。单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的。(引号必须成对出现,且可以嵌套,表示拼接字符串)。双引号里可以有变量,双引号里可以出现转义字符

image-20250513170903981

获取字符串的长度:

  • ${#stringName}

image-20250513171047872

Shell 数组

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。数组元素的下标由 0 开始编号。利用下标获取数组中的元素,下标可以是整数或算术表达式,其值应大于等于 0。

定义数组:在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:数组名=(值1 值2 ... 值n)

读取数组:读取数组元素值的一般格式是:${数组名[下标]},例如:${array_name[n]}使用 @ 或 * 符号可以获取数组中的所有元素,例如:echo ${array_name[@],

获取数组的长度:获取数组长度的方法与获取字符串长度的方法相同,在数组名称前加一个#即可,例如:echo ${#array_name[@]}

image-20250513171215101

Shell 基本运算符

Shell 和其他编程语言一样,支持多种运算符,包括:算数运算符、赋值运算符、关系运算符、逻辑运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,比如expr或$(( )) ,expr是一款表达式计算工具,使用它能完成表达式的求值操作。操作数和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样;完整的表达式要被 反引号包裹。

算术运算符

a=10;b=20

加法:+ expr $a + $b 或 $((a+b))

减法:- expr $a - $b 或 $((a-b))

乘法(需要转义):* expr $a \* $b 或 $((a*b))

除法:/ expr $a / $b 或 $((a/b))

取余:% expr $a % $b或 $((a/b))

幂运算:** expr $a ** $b或 $((a**b))

image-20250513171655425

复合赋值运算符

a=10;b=20

运算符 举例

= a=b

+= a+=b

-= a-=b

*= a*=b

/= a/=b

%= a%=b

image-20250513171929959

关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。返回boolean类型的结果(在Linux系统中使用0表示false,1表示true)

​ > >= < <= == !=

image-20250513172043849

image-20250513172056403

逻辑运算符

&& 逻辑与运算 $((a < b) && b<c))

|| 逻辑或运算 $((a < b) || b<c))

! 逻辑非/取反 $((!(a < b) || b<c)))

image-20250513172159279

image-20250513172212571

第十二章 shell脚本编程(2)

Shell 流程控制

if单分支结构语法:

if [ 条件表达式 ]

then  	

语句1;	

语句2	

.....	

语句n
fi

[]、[[]] 和 (()) 是三种不同的条件表达式语法,它们的使用场景和功能有明显区别:

  1. [](test 命令)这是 shell 中最基本的条件测试语法,实际上是调用 /bin/test 命令。特点兼容性强:所有 POSIX 兼容的 shell(如 sh、bash、dash 等)都支持。语法严格:括号内的表达式需要用空格分隔,变量建议用双引号包裹(防止分词和通配符扩展)。功能限制:不支持正则表达式匹配,逻辑运算符需用 -a(与)和 -o(或)。
  2. [[]](Bash 扩展测试)这是 bash 特有的条件测试语法,是对 [] 的增强版。特点仅 bash 支持:在 sh、dash 等 shell 中无法使用。语法更灵活:括号内的表达式可以使用更自然的运算符(如 &&、||、==、!=)。支持模式匹配:使用 == 时可进行简单模式匹配(如 [[ "$var" == abc* ]])。支持正则匹配:使用 =~ 进行正则表达式匹配。
  3. (())(算术扩展)这是 bash 特有的算术表达式语法,专门用于数值计算。特点仅支持数值运算:表达式中只处理整数,不支持字符串比较。语法简洁:支持 C 风格的算术运算符(如 ++、--、+=、* 等)返回状态码:表达式结果为 0 时返回 false,非 0 时返回 true。

双分支结构语法:

if [ 条件表达式 ]
then
执行语句1     	
执行语句2	
.......	
执行语句n
else	
执行语句
fi

多分支结构语法:

if [ 条件表达式 ]
then
执行语句1     	
elif [ 条件表达式2 ]
执行语句2	
.......	
elif [ 条件表达式n ]
执行语句n
else	
执行语句
fi

case分支结构:

Shell case语句为多选择语句。可以用case语句匹配一个固定值,如果匹配成功,执行相匹配的命令。

语法

case 值 in 

常量值1) 执行语句1;;	

常量值2) 执行语句2;;	

*)	执行语句n;;	

esac

image-20250526224251491

while循环

while循环语法结构:

while (( 循环条件 ))
do  
执行语句
done

image-20250526224354523

for循环

for循环语法格式1:
for((init;condition;next))
do   
command_1;    
command_2;   
commond_n;
done;

image-20250526224516550

for循环语法格式2:
for var in {start..end}	
do
执行语句1
执行语句2.....
执行语句n	
done
注意:{}及..操作符与操作数之间不能有空格

image-20250526224629357

for循环语法格式3:
for var in in ${array_name[*]}
do
执行语句1
执行语句2.....
执行语句n
done

image-20250526224739359

无限循环:

while无限循环:

while : 或  while true	
do
command
done		

for无限循环:

for (( ; ; ))
do
command
done
跳出循环:

在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用两个命令来实现该功能:break和continue。

break命令:跳出当前整个循环。

continue命令:跳出本次循环继续进入下一次循环

image-20250526225054329

Shell 函数

函数定义:

[function] funName(){
command;
[return n]
}

调用函数时,直接使用函数名即可说明:

1.function可以省略,函数返回值也可以省略,如果省略 return则返回最后一条语句执行结果

2.n的取值返回0~255,函数返回值是指函数最后一条命令的状态码

image-20250526225209200

函数参数的使用在 shell 中,函数通过位置参数来接收传递的参数,$1 代表第一个参数,$2 代表第二个参数,依此类推。$# 可用于获取参数的数量,$@ 能获取所有参数。在函数内部,你可以像在脚本里一样使用这些参数。返回值的处理方式1:使用 return 语句返回状态码:在 shell 函数中,return 语句的作用是返回状态码(0 - 255),这和脚本执行结束后的退出状态码是一样的道理。在调用函数后使用$?获取返回值(本质上是状态码),状态码超过 255 时会自动对256取模。此方式存在局限性。

image-20250526225254316

返回值的处理方式2:使用 echo 输出返回值通过 echo 命令把结果输出,然后在调用函数时使用变量捕获这个输出,该方式不受返回值范围限制,推荐使用该方式。

image-20250526225332366

Shell 文件包含

和其他语言一样,Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。Shell 文件包含的语法格式如下:

. filename或source filename

注意点号(.)和文件名中间有一空格

image-20250526225411253

image-20250526225416628

← 返回首页