Ubuntu基础学习笔记

自用

系统网络配置

手动设置网络地址

image-20250121224944116

image-20250121225105441

image-20250121225257806

Xshell远程连接

安装ssh

Ubantu默认没有ssh服务,需要手动下载

分别在终端输入sudo apt updatesudo apt install -y ssh下载完成后即可连接Xshell

系统管理操作

关闭防火墙

systemctl

基本语法:systemctl start | stop | restart | status 服务名

其中,服务名不用一个个记,查看/usr/lib/systemd/system 目录下的文件列表,该目录下每个文件都

对应一个服务

image-20250121231538463

systemctl案例实操

  • 查看网络服务的状态

在终端输入sudo systemctl status NetworkManager后可查看网络管理服务

image-20250121232047740

此时按q可退出此状态,继续输入指令

其他操作类似

  • 停止网络服务

sudo systemctl stop NetworkManager

  • 启动网络服务

sudo systemctl start NetworkManager

  • 重启网络服务

sudo systemctl restart NetworkManager

systemctl 设置后台服务的自启配置

查看服务开机启动状态 :systemctl list-unit-files

关掉指定服务的自动启动:systemctl disable 服务名

开启指定服务的自动启动:systemctl enable 服务名

关闭防火墙

临时关闭防火墙

查看防火墙状态:sudo systemctl status ufw

image-20250121233325312

临时关闭防火墙:sudo systemctl stop ufw

image-20250121233435053

长期关闭防火墙

设置开机时启动防火墙:sudo systemctl enable ufw

设置开机时关闭防火墙:sudo systemctl disable ufw

image-20250121233526692

查看服务是否开机自启:sudo systemctl is-enabled ufw

关机重启命令

  • 关闭系统,当前版本 Ubuntu 不会断电:halt

  • 关闭系统并断电,等同于 shutdown -h nowpoweroff

  • 重启,等同于 shutdown -r nowreboot

  • shutdown [选项] 时间

① shutdown 参数说明

选项 功能
-h -h=halt 关机,不完全等同于 halt 命令
-r -r=reboot 重启

② now 参数说明

选项 功能
now 立刻关机
时间 等待多久后关机(时间单位是分钟)

修改主机名

在终端执行:sudo hostnamectl --static set-hostname 新名字

执行完上述命令,重启后生效

image-20250122212801697

通过主机名连接Xshell

找到电脑位于C:\Windows\System32\drivers\etc目录下的hosts文件,在最下方输入地址和主机名

image-20250122214858368

修改完hosts文件后就可以在Xshell的连接中将主机中原本填写的地址改为自己的主机名

image-20250122215049729

APT软件包

在终端输入apt即可查看apt常用命令

image-20250122215858014

例如,当前需要根据名称列出软件包,就可以在终端输入sudo apt list

其中sudo表示以管理员身份执行命令

常用基本命令

帮助命令

Manual Packages

查看手册页说明文档:在终端输入man man

image-20250122220927820

man 获得帮助信息

  • 查看ls命令的帮助信息:man ls
image-20250122222950334

help 获取shell内建命令的帮助信息

shell 内建命令:shell 内建命令是 shell 的一部分,他们没有单独的可执行文件或手册页,这类命令的文档通过 help 命令访问。

基本语法:help 命令 (功能描述:获得 shell 内建命令的帮助信息)

例如:查看cd命令的帮助信息help cd

image-20250122223245762

常用快捷键

常用快捷键 功能
ctrl + c 停止进程
ctrl + l (这是L) 清屏;彻底清屏是:reset
ctrl + q 退出
tab 键 提示 (更重要的是可以防止敲错)
上下键 查找执行过的命令
ctrl + u 清除当前敲的命令

文件目录类

pwd 显示当前工作目录的绝对路径

pwd即print working directory 打印工作目录

显示当前工作目录的绝对路径:pwd

image-20250122225309652

ls 列出目录内容

ls即list 列出目录内容

在终端输入ls列出目录的内容(LS)

选项 功能
-a 全部的文件,连同隐藏档 (开头为。的文件) 一起列出来 (常用)
-l 长数据串列出,包含文件的属性与权限等等数据;(常用)

显示说明:

每行列出的信息依次是:文件类型与权限 链接数 文件属主 文件属组 文件大小(用byte来表示) 建立或最近修改的时间 名字

image-20250122230435107

其中ls -l可以简写为ll

cd 切换目录

cd即Change Directory 切换路径

参数 功能
cd 绝对路径 切换路径
cd 相对路径 切换路径
cd ~ 或者 cd 回到自己的家目录
cd - 回到上一次所在目录
cd .. 回到当前目录的上一级目录
cd -P 跳转到实际物理路径,而非快捷方式路径

例如:

image-20250122230744431

mkdir 创建一个新目录

mkdir即Make directory 建立目录

选项 功能
-p 创建多层目录

image-20250122231323509

touch 创建一个文件

image-20250122231506459

cp 复制文件或目录

基本语法:cp 源文件 目标文件 功能描述:复制源文件文件到目标文件

选项 功能
-r 递归复制整个文件夹

强制覆盖不提示的方法:\cp

image-20250122233113308

rm 删除文件或目录

选项 功能
-r 递归删除目录中所有内容
-f 强制执行删除操作,而不提示用于进行确认
-v 显示指令的详细执行过程

image-20250122233644256

mv 移动文件与目录或重命名

基本语法:

mv oldNameFile newNameFile (功能描述:重命名)

mv /temp/movefile /targetFolder (功能描述:移动文件)

image-20250122234207091

注:不能用mv将文件移动到回收站,这和用rm删除没区别,文件会直接丢失,除非自己手动创建一个文件夹作为回收站

4种方式查看文件内容

cat 查看文件内容

作用:查看文件内容,从第一行开始显示

一般用于查看比较小的文件,一屏幕能显示全的

选项 功能描述
-n 显示所有行的行号,包括空行

示例:

查看文件内容并显示行号:cat -n houge.txt

more 文件内容分屏查看器

more 指令是一个基于 VI 编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容

more 指令中内置了若干快捷键,详见操作说明

操作 功能说明
空格键 (space) 代表向下翻一页
Enter 代表向下翻「一行」
q 代表立刻离开 more ,不再显示该文件内容
Ctrl+F 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
less 分屏显示文件内容

less 指令用来分屏查看文件内容,它的功能与 more 指令类似,但是比 more 指令更加强大,支持各种显示终端。less 指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率

操作 功能说明
空白键 向下翻动一页
[pagedown] 向下翻动一行
[pageup] 向上翻动一行
/ 字串 向下搜寻「字串」的功能;n:向下查找;N:向上查找
? 字串 向上搜寻「字串」的功能;n:向上查找;N:向下查找
q 离开less程序
tail 输出文件尾部内容

tail 用于输出文件中尾部的内容,默认情况下 tail 指令显示文件的后 10 行内容

基本语法:

image-20250123195214454

选项 功能
-n <行数> 输出文件尾部 n 行内容
-f 显示文件最新追加的内容,监视文件变化

echo 输出内容到控制台

选项 功能
-e 支持反斜线控制的字符转换(转义字符)
转义字符 意义 ASCLL码值(十进制)
\a 响铃(BEL) 007
\b 退格(BS) ,将当前位置移到前一列 008
\f 换页(FF),将当前位置移到下页开头 012
\n 换行(LF) ,将当前位置移到下一行开头 010
\r 回车(CR) ,将当前位置移到本行开头 013
\t 水平制表(HT) (跳到下一个TAB位置) 009
\v 垂直制表(VT) 011
\' 代表一个单引号 039
\" 代表一个双引号字符 034
\0 空字符(NUL) 000
\ddd 1到3位八进制数所代表的任意字符 三位八进制
\xhh 十六进制所代表的任意字符 十六进制

示例:(记得加双引号)

image-20250123201150157

> 输出重定向和 » 追加

基本语法:

image-20250123201421217

示例:

覆写演示

ln 软链接(快捷方式)和硬链接

软链接也成为符号链接,类似于 windows 里的快捷方式,有自己的数据块,主要存放了链接其他文件的路径

基本语法:

ln -s 原文件或目录 软链接名 (功能描述:给原文件创建一个软链接)

ln 原文件 目标文件 (功能描述:给原文件创建一个硬链接)

删除软链接: rm -rf 软链接名,而不是 rm -rf 软链接名/

查询:通过 ll 就可以查看,列表属性第 1 位是 l,尾部会有位置指向。

示例:

image-20250123214916006

history 查看已执行的历史命令

示例:

image-20250123215204087

VI/VIM 编辑器

VI 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器。

VIM 编辑器是从 VI 发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜色辨别语法的正确性,方便程序设计。VIM 与 VI 编辑器完全兼容。

在终端中执行以下命令安装 vim:sudo apt install vim

一般模式

以 vim 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容, 也可以使用『复制、贴上』来处理你的文件数据。

语法 功能描述
yy 复制光标当前一行
y 数字 y 复制一段(从光标当前行到后 n 行)
p 箭头移动到目的行粘贴
u 撤销上一步
dd 删除光标当前行
d 数字 d 删除光标(含)后多少行
x 剪切一个字母 (当前光标),相当于 del
X 剪切一个字母 (当前光标的前一个),相当于 Backspace
yw 复制一个词
dw 删除一个词
shift+6(^) 移动到行头
shift+4($) 移动到行尾
1+shift+g 移动到页头,数字
shift+g 移动到页尾
数字 N+shift+g 移动到目标行

编辑模式

​ 在一般模式中可以进行删除、复制、粘贴等的动作,但是却无法编辑文件内容的!要等到你按下『i, I, o, O, a, A』等任何一个字母之后才会进入编辑模式。

​ 通常在 Linux 中,按下这些按键时,在画面的左下方会出现『INSERT 或 REPLACE』的字样,此时才可以进行编辑。而如果要回到一般模式时, 则必须要按下『Esc』这个按键即可退出编辑模式。

按键 功能
i 当前光标前
a 当前光标后
o 当前光标行的下一行
I 光标所在行最前
A 光标所在行最后
O 当前光标行的上一行

指令模式

在一般模式当中,输入『 : / ?』3 个中的任何一个按钮,就可以将光标移动到最底下那一行

在这个模式当中, 可以提供你『搜寻资料』的动作,而读取、存盘、大量取代字符、离开 vi 、显示行号等动作是在此模式中达成的

命令 功能
:w 保存
:q 退出
:! 强制执行
/ 要查找的词 n 查找下一个,N 往上查找
:noh 取消高亮显示
:set nu 显示行号
:set nonu 关闭行号
:%s/old/new/g 替换内容

模式间的转换图

image-20250123224026649

时间日期类

基本语法:date 选项 参数

选项 功能
-d <时间字符串> 显示指定的 “时间字符串” 表示的时间,而非当前时间
-s <日期时间> 设置系统日期时间
参数 功能
+%Y 当前年份
+%y 当前年份的后两位
+%m 当前月份
+%d 当前哪一日
+%H 当前时
+%M 当前分
+%S 当前秒
+%F 当前年月日,中间以 : 隔开
+%T 当前时分秒,中间以 - 隔开

date 显示当前时间

基本语法:

image-20250123224530961

示例1:

image-20250123224756658

示例2:

image-20250123225613008

date 显示非当前时间

基本语法:(很多写法,仅展示其一)

image-20250123225848484

示例:

image-20250123225946821

date 设置系统时间

基本语法:date -s 字符串时间

示例:date -s "2025-01-23 23:03:20"

用户管理命令

adduser 添加新用户

基本语法:adduser 用户名

应用场景 1:企业开发,多人协同(也会有多人使用相同的一个低权限用户)。

应用场景 2:框架协同 gitlab mysql redis

示例:

image-20250123231840565

passwd 设置或更改用户密码

基本语法:passwd 用户名

id 查看用户是否存在

基本语法:id 用户名

cat /etc/passwd 查看创建了哪些用户

基本语法:cat /etc/passwd

su 切换用户

su即swith user 切换用户

基本语法:

su 用户名称 (功能描述:切换用户,只能获得用户的执行权限,不能获得环境变量)

su - 用户名称 (功能描述:切换到用户并获得该用户的环境变量及执行权限)

示例:

image-20250123232638635

userdel 删除用户

基本语法:

image-20250123232915179

选项 功能
-r 删除用户的同时,删除与用户相关的所有文件

usermod 修改用户

基本语法:

image-20250123233334523

选项 功能
-l 改变用户名
-d 修改家目录

示例:

image-20250123233428178

用户组管理命令

​ 每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同。

​ 如 Linux 下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。

​ 用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group 文件的更新。

groupadd 新增组

基本语法:groupadd 组名

groupdel 删除组

基本语法:groupdel 组名

groupmod 修改组

基本语法:groupmod -n 新组名 老组名

usermod 修改用户主组

​ 在 Linux 和 Unix 系统中,每个用户都有一个主组(primary group)和可能的多个附加组(secondary groups 或 additional groups)

​ 用户的主组在用户创建时被指定,默认与用户名称相同,当用户创建一个新文件或目录时,默认情况下,这些文件或目录会被分配给用户的主组

基本语法:usermod -g 组名 用户名

image-20250123234554600

查看附加组和用户的映射关系

/etc/group 文件存储了用户和附加组的映射关系,每一行对应一个用户组,第三个冒号后面是以该组作为附加组的用户列表,列表为空表示没有用户将其作为附加组。

操作:cat /etc/group

将用户添加到附加组

基本语法:usermod -aG 组名 用户名

image-20250123235227862

image-20250123235237223

将用户从组中移除

基本语法:deluser 用户名 组名

sudo 设置普通用户具有 root 权限

把普通用户添加进sudo组中

操作:sudo usermod -aG sudo 用户

文件权限类

文件属性

文件基本属性介绍:

image-20250124214443509

如果查看到是文件:链接数指的是硬链接个数

如果查看的是文件夹:链接数指的是子文件夹个数

文件属性由从左到右的10 个字符表示

image-20250124213745962

如果没有权限,就会出现减号[ - ]而已。从左至右用 0-9 这些数字来表示:

(1)0 首位表示类型

在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等

- 代表文件;d 代表目录;l代表链接文档(link file)

(2)第 1-3 位确定属主(该文件的所有者)拥有该文件的权限。—User

(3)第 4-6 位确定属组(所有者的同组用户)拥有该文件的权限,—Group

(4)第 7-9 位确定其他用户拥有该文件的权限 —Other

  • rxw 作用文件和目录的不同解释

(1)作用到文件

[ r ]代表可读(read):可以读取,查看

[ w ]代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件

[ x ]代表可执行(execute):可以被系统执行

(2)作用到目录

[ r ]代表可读(read):可以读取,ls 查看目录内容

[ w ]代表可写(write):可以修改,目录内创建+删除+重命名目录

[ x ]代表可执行(execute):可以进入该目录

示例:

image-20250124214329663

chmod 改变权限

第一种方式:chmod [{ugoa}{+-=}{rwx}] 文件或目录

第二种方式:chmod [mode=对应数字 ] [文件或目录]

其中,

u:所有者 g:所有组 o:其他人 a:所有人(u、g、o 的总和)

而在第二种方式中,r=4, w=2, x=1 ,rwx=4+2+1=7

示例1:

image-20250124215907595

示例2:

image-20250124220144848

chown 改变所有者

基本语法:chown [选项] [最终用户] [文件或目录] (功能描述:改变文件或者目录的所有者)

选项 功能
-R 同时更改该文件夹内所有子文件

示例:

image-20250124220940294

chgrp 改变所属组

基本语法:chgrp [最终用户组] [文件或目录] (功能描述:改变文件或者目录的所属组)

搜索查找类

find 查找文件或者目录

基本语法:find [搜索范围] [选项]

选项 功能
-name <查询方式> 按照指定的文件名查找模式查找文件
-user <查询方式> 查找属于指定用户名所有文件
-size <文件大小> 按照指定的文件大小查找文件,单位为: b —— 块(512 字节) c —— 字节 w —— 字(2 字节) k —— 千字节 M —— 兆字节 G —— 吉字节

示例:

image-20250124222700911

grep 过滤查找及 “|” 管道符

管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理

基本语法:grep 选项 查找内容 源文件

选项 功能
-n 显示匹配行及行号。

示例:

image-20250124222838933

压缩和解压类

gzip/gunzip 压缩

基本语法:

gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz 文件)

gunzip 文件.gz (功能描述:解压缩文件命令)

只能压缩文件不能压缩目录,且不保留原来的文件

tar 打包

基本语法:tar [选项] XXX.tar.gz 将要打包进去的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)

选项 功能
-c 产生 .tar 打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解包 .tar 文件

示例:

image-20250124224635450

磁盘类

df 查看磁盘空间使用情况

df即disk free 空余硬盘

基本语法:df 选项 (功能描述:列出文件系统的整体磁盘使用量,检查文件系统的磁盘空间占用情况)

选项 功能
-h 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示

示例:

image-20250124231543105

du 文件和目录的磁盘使用空间

基本语法:du 目录/文件 (功能描述:统计文件或递归显示目录及子目录的磁盘使用空间)

选项 功能
-a 显示当前目录下所有的文件目录及子目录大小

示例:

image-20250124232032349

进程线程类

ps 查看当前系统进程状态

ps即process status 进程状态

基本语法:

ps -aux [| grep xxx] (功能描述:查看系统中所有进程,可以过滤查找)

ps -ef [| grep xxx] (功能描述:可以查看子父进程之间的关系)

选项 功能
-a 选择所有进程
-u 显示所有用户的所有进程
-x 显示没有终端的进程
  • ps -aux 显示信息说明:
名称 含义
USER 该进程是由哪个用户产生的
PID 进程的 ID 号
%CPU 该进程占用 CPU 资源的百分比,占用越高,进程越耗费资源
%MEM 该进程占用物理内存的百分比,占用越高,进程越耗费资源
VSZ 该进程占用虚拟内存的大小,单位 KB
RSS 该进程占用实际物理内存的大小,单位 KB
TTY 该进程是在哪个终端中运行的。其中 tty1 - tty7 代表本地控制台终端,tty1 - tty6 是本地的字符界面终端,tty7 是图形终端。pts/0 - 255 代表虚拟终端
STAT 进程状态。常见的状态有:R:运行、S:睡眠、T:停止状态、s:包含子进程、+:位于后台
START 该进程的启动时间
TIME 该进程占用 CPU 的运算时间,注意不是系统时间
COMMAND 产生此进程的命令名
  • ps -ef 显示信息说明
名称 含义
UID 用户 ID
PID 进程 ID
PPID 父进程 ID
C CPU 用于计算执行优先级的因子。数值越大,表明进程是 CPU 密集型运算,执行优先级会降低;数值越小,表明进程是 I/O 密集型运算,执行优先级会提高
STIME 进程启动的时间
TTY 完整的终端名称
TIME CPU 时间
CMD 启动进程所用的命令和参数

示例1:

image-20250124233123613

示例2:

image-20250124233450090

kill 终止进程

基本语法:

kill [选项] 进程号 (功能描述:通过进程号杀死进程)

killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)

选项 功能
-9 表示强迫进程立即停止

查看服务器总体内存

基本语法:free -m (功能描述:查看服务器总体内存,单位为兆M)

top 查看系统健康状态

(现在一般用软件监控)

基本命令:top [选项]

选项说明:

选项 功能
-d 秒数 指定 top 命令每隔几秒更新
-i 使 top 不显示任何闲置或者僵死进程
-p 通过指定监控进程 ID 来仅仅监控某个进程的状态

操作说明:

操作 功能
P 以 CPU 使用率排序,默认就是此项
M 以内存的使用率排序
N 以 PID 排序
q 退出 top

查询结果字段解释:

(1)第一行信息为任务队列信息

image-20250124235050039

(2)第二行为进程信息

image-20250124235108517

(3)第三行为 CPU 信息

image-20250124235128006

(4)第四行为物理内存信息

image-20250124235148689

(5)第五行为交换分区(swap)信息

image-20250124235213524

netstat 显示网络统计信息和端口占用情况

基本语法:

netstat -anp | grep 进程号 (功能描述:查看该进程网络信息)

netstat -nlp | grep 端口号 (功能描述:查看网络端口号占用情况)

选项 功能
-n 拒绝显示别名,能显示数字的全部转化成数字
-l 仅列出有在 listen(监听)的服务状态
-p 表示显示哪个进程在调用

crontab 系统定时任务

crontab 服务管理

重新启动 crond 服务:sudo systemctl restart cron

crontab 定时任务设置

基本语法:crontab [选项]

选项 功能
-e 编辑 crontab 定时任务
-l 查询 crontab 任务
-r 删除当前用户所有的 crontab 任务
image-20250125000633597

输入EDITOR=vim crontab -e后,打开如下文件,在最后写入命令即可

image-20250125001312349 image-20250125000844146 image-20250125000905001

Shell

Shell概述

Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核

Shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强

image-20250125155355526

Shell入门

脚本格式

脚本以#!/bin/bash 开头(指定解析器)

创建并执行一个脚本

要创建并执行一个Shell脚本,需要先在终端输入vim hello.sh创建并编辑一个Shell脚本

在hello.sh中输入如图内容(按’a’开始编辑,按’esc’退出编辑,输入’:wq’保存并退出,忘记了看笔记VIM编辑器部分)

image-20250125165424109

编辑成功后,有两种运行方式

方法一:不赋予脚本执行权限时,用sh 脚本bash 脚本即可运行(效果一样)

image-20250125165859260

方法二:赋予脚本执行权限,可直接执行

image-20250125170110499

变量

系统变量

常用系统变量有HOME、PWD、SHELL、USER 等

一般系统变量都是由全大写字母构成,所以自定义变量的时候尽量避免全部用大写字母

要获取变量的值可以用$变量名,$和变量名之间不能有空格

示例:

image-20250125170721845

自定义变量

基本语法

(1)定义变量:变量名=变量值,注意,=号前后不能有空格。(起名的时候不用加$)

(2)撤销变量:unset 变量名。

(3)声明静态变量:readonly 变量,注意:不能 unset。

变量定义规则

(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。

(2)等号两侧不能有空格。

(3)在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算。

(4)变量的值如果有空格,需要使用双引号或单引号括起来。

示例:

PixPin_2025-01-25_17-18-56

image-20250125172027486

特殊变量

$n

基本语法:

$n (功能描述:n 为数字,$0 代表该脚本名称,$1-$9 代表第一到第九个参数,十以上的参数需要用大括号包含,如${10})

示例:

image-20250125173400066

$#

$# (功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性)

示例:

image-20250125173915110

$* 和 $@

基本语法:

$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体。)

$@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待。)

(具体区别会在后续学习中了解)

示例:

image-20250125181241350

$?

基本语法:

$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定,表示错误代码),则证明上一个命令执行不正确了)

示例:

image-20250125181605791

运算符

基本语法:

$((运算式))$[运算式]

示例:计算 (2 + 3)× 4 的值

image-20250125182018286

条件判断

基本语法:

test 条件[ 条件 ] (注意条件前后有空格)

注意:条件非空即为 true,[ atguigu ]返回 true,[ ] 返回 false

常用判断条件

image-20250125184054189

示例1:

image-20250125184255341

示例2:

image-20250125184738999

示例3:多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令)

image-20250125185251176

流程控制

if判断

基本语法:

image-20250125221736607

image-20250125221758530

注意事项:

① [ 条件判断式 ],中括号和条件判断式之间必须有空格

② if 后要有空格

示例:

image-20250125222805470

case 语句

基本语法:

image-20250125225423369

注意事项:

(1)case 行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。

(2)双分号“;;”表示命令序列结束,相当于 C 中的 break。

(3)最后的“*)”表示默认模式,相当于 C 中的 defaul。

示例:

image-20250125231916854

image-20250125231942799

for 循环

基本语法1:

image-20250125232110733

基本语法2:

image-20250125232146742

示例1:

image-20250125232257501

示例2:打印所有输入参数

image-20250125232555465

image-20250125232618766

比较$*和$@的区别
  • $*和$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 $2 …$n的形式输出所有参数。

在for3.sh中写入如下内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/bin/bash
echo '=============$*============='
for i in $*
do
 echo "ban zhang love $i"
done
echo '=============$@============='
for j in $@
do 
 echo "ban zhang love $j"
done

如下执行:

image-20250125233153445

  • 当它们被双引号“”包含时,$*会将所有的参数作为一个整体,以“$1 $2 …$n”的形式输出所有参数;$@会将各个参数分开,以“$1” “$2”…“$n”的形式输出所有参数。

在for4.sh中写入如下内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/bin/bash
echo '=============$*============='
for i in "$*"
## $*中的所有参数看成是一个整体,所以这个 for 循环只会循环一次
do
 echo "ban zhang love $i"
done
echo '=============$@============='
for j in "$@"
## $@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次
do
 echo "ban zhang love $j"
done

如下执行:

image-20250125233426867

while 循环

基本语法:

image-20250125233551530

示例:从 1 加到 100

在while.sh中写入如下内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/bash
sum=0
i=1
while [ $i -le 100 ]
do
 sum=$[$sum+$i]
 i=$[$i+1]
done

echo $sum

执行:

image-20250125233726611

read 读取控制台输入

基本语法:read (选项) (参数)

选项:

-p:指定读取值时的提示符。

-t:指定读取值时等待的时间(秒)如果-t 不加表示一直等待。

参数

变量:指定读取值的变量名。

示例:

1
2
3
4
5
6
7
8
#!/bin/bash

read -t 5 -p "请在5秒内输入你的名字:" name
if [ $name ]; then
     echo "你好,$name"
else
     echo "未在指定时间内输入名字"
fi

如下执行:

image-20250126211739621

函数

系统函数

basename取文件名

基本语法:

basename [string / pathname] [suffix] (功能描述:basename 命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。

basename 可以理解为取路径里的文件名称。

suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的 suffix 去掉。

示例:

image-20250126212039885

dirname取路径

基本语法:

dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))

dirname 可以理解为取文件路径的绝对路径名称。

示例:

image-20250126212211976

自定义函数

基本语法:

image-20250126212643723

(1)必须在调用函数地方之前,先声明函数,shell 脚本是逐行运行。不会像其它语言一样先编译。

(2)函数返回值,只能通过$?系统变量获得,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。return 后跟数值 n(0-255),运行成功返回0,其他均为失败

示例:

在fun.sh中如下写入

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/bash
function sum()
{
 s=0
 s=$[$1+$2]
 echo "$s"
}
read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2;

如下执行:

image-20250126212822161

Shell工具

cut 工具的使用

cut 的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。

基本用法:

cut [选项参数] filename 说明:默认分隔符是制表符

选项参数 功能
-f 列号,提取第几列
-d 分隔符,按照指定分隔符分割列,默认是制表符“\t”
-c 按字符进行切割 后加加 n 表示取第几列 比如 -c 1

示例:

image-20250126213807207

awk 工具的使用

一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

基本用法:

awk [选项参数] ‘/pattern1/{action1} /pattern2/{action2}...’ filename

pattern:表示 awk 在数据中查找的内容,就是匹配模式。

action:在找到匹配内容时所执行的一系列命令。

选项参数 功能
-F 指定输入文件的分隔符
-v 赋值一个用户定义变量

正则表达式入门

常用特殊字符

1)特殊字符:^

image-20250126214638430

2)特殊字符:$

image-20250126214705322

3)特殊字符:.

image-20250126220524399

4)特殊字符:*

image-20250126220559421

5)特殊字符:[ ]

image-20250126220631176

6)特殊字符:\

image-20250126220812299

经典正则表达式

1
2
3
4
#邮箱正则
^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$
#手机号正则
/^1((34[0-8])|(8\d{2})|(([35][0-35-9]|4[579]|66|7[35678]|9[1389])\d{1}))\d{7}$/

补充

该笔记基于尚硅谷课程

https://www.bilibili.com/video/BV1JF4m1A7mN/

虚拟机代理配置

https://blog.csdn.net/weixin_63594197/article/details/138069939

链接失效时可以看下方视频

设置使用sudo时不需要密码

在终端输入:sudo vim /etc/sudoers

找到文件最下面,修改为如图所示的样子:

image-20250124000253152

\ 在下一行继续输入

示例:

image-20250125190002468

本站于2025年3月26日建立
使用 Hugo 构建
主题 StackJimmy 设计