常用的shell脚本
原创2025年3月8日大约 13 分钟
⌨️ Linux 命令
学习shell的第一步:当然是从Linux命令入手了。
⭐常用 150 个Linux命令⭐
命令 | 功能说明 |
---|---|
线上查询及帮助命令 (2 个) | |
man | 查看命令帮助,命令的词典,更复杂的还有 info,但不常用。 |
help | 查看 Linux 内置命令的帮助,比如 cd 命令。 |
文件和目录操作命令 (18 个) | |
ls | 全拼 list,功能是列出目录的内容及其内容属性信息。 |
cd | 全拼 change directory,功能是从当前工作目录切换到指定的工作目录。 |
cp | 全拼 copy,其功能为复制文件或目录。 |
find | 查找的意思,用于查找目录及目录下的文件。 |
mkdir | 全拼 make directories,其功能是创建目录。 |
mv | 全拼 move,其功能是移动或重命名文件。 |
pwd | 全拼 print working directory,其功能是显示当前工作目录的绝对路径。 |
rename | 用于重命名文件。 |
rm | 全拼 remove,其功能是删除一个或多个文件或目录。 |
rmdir | 全拼 remove empty directories,功能是删除空目录。 |
touch | 创建新的空文件,改变已有文件的时间戳属性。 |
tree | 功能是以树形结构显示目录下的内容。 |
basename | 显示文件名或目录名。 |
dirname | 显示文件或目录路径。 |
chattr | 改变文件的扩展属性。 |
lsattr | 查看文件扩展属性。 |
file | 显示文件的类型。 |
md5sum | 计算和校验文件的 MD5 值。 |
查看文件及内容处理命令(21 个) | |
cat | 全拼 concatenate,功能是用于连接多个文件并且打印到屏幕输出或重定向到指定文件中。 |
tac | tac 是 cat 的反向拼写,因此命令的功能为反向显示文件内容。 |
more | 分页显示文件内容。 |
less | 分页显示文件内容,more 命令的相反用法。 |
head | 显示文件内容的头部。 |
tail | 显示文件内容的尾部。 |
cut | 将文件的每一行按指定分隔符分割并输出。 |
split | 分割文件为不同的小片段。 |
paste | 按行合并文件内容。 |
sort | 对文件的文本内容排序。 |
uniq | 去除重复行。oldboy |
wc | 统计文件的行数、单词数或字节数。 |
iconv | 转换文件的编码格式。 |
dos2unix | 将 DOS 格式文件转换成 UNIX 格式。 |
diff | 全拼 difference,比较文件的差异,常用于文本文件。 |
vimdiff | 命令行可视化文件比较工具,常用于文本文件。 |
rev | 反向输出文件内容。 |
grep/egrep | 过滤字符串,三剑客老三。 |
join | 按两个文件的相同字段合并。 |
tr | 替换或删除字符。 |
vi/vim | 命令行文本编辑器。 |
文件压缩及解压缩命令(4 个) | |
tar | 打包压缩。oldboy |
unzip | 解压文件。 |
gzip | gzip 压缩工具。 |
zip | 压缩工具。 |
信息显示命令(11 个) | |
uname | 显示操作系统相关信息的命令。 |
hostname | 显示或者设置当前系统的主机名。 |
dmesg | 显示开机信息,用于诊断系统故障。 |
uptime | 显示系统运行时间及负载。 |
stat | 显示文件或文件系统的状态。 |
du | 计算磁盘空间使用情况。 |
df | 报告文件系统磁盘空间的使用情况。 |
top | 实时显示系统资源使用情况。 |
free | 查看系统内存。 |
date | 显示与设置系统时间。 |
cal | 查看日历等时间信息。 |
搜索文件命令(4 个) | |
which | 查找二进制命令,按环境变量 PATH 路径查找。 |
find | 从磁盘遍历查找文件或目录。 |
whereis | 查找二进制命令,按环境变量 PATH 路径查找。 |
locate | 从数据库 (/var/lib/mlocate/mlocate.db) 查找命令,使用 updatedb 更新库。 |
用户管理命令(10 个) | |
useradd | 添加用户。 |
usermod | 修改系统已经存在的用户属性。 |
userdel | 删除用户。 |
groupadd | 添加用户组。 |
passwd | 修改用户密码。 |
chage | 修改用户密码有效期限。 |
id | 查看用户的 uid,gid 及归属的用户组。 |
su | 切换用户身份。 |
visudo | 编辑 / etc/sudoers 文件的专属命令。 |
sudo | 以另外一个用户身份(默认 root 用户)执行事先在 sudoers 文件允许的命令。 |
基础网络操作命令(11 个) | |
telnet | 使用 TELNET 协议远程登录。 |
ssh | 使用 SSH 加密协议远程登录。 |
scp | 全拼 secure copy,用于不同主机之间复制文件。 |
wget | 命令行下载文件。 |
ping | 测试主机之间网络的连通性。 |
route | 显示和设置 linux 系统的路由表。 |
ifconfig | 查看、配置、启用或禁用网络接口的命令。 |
ifup | 启动网卡。 |
ifdown | 关闭网卡。 |
netstat | 查看网络状态。 |
ss | 查看网络状态。 |
深入网络操作命令(9 个) | |
nmap | 网络扫描命令。 |
lsof | 全名 list open files,也就是列举系统中已经被打开的文件。 |
发送和接收邮件。 | |
mutt | 邮件管理命令。 |
nslookup | 交互式查询互联网 DNS 服务器的命令。 |
dig | 查找 DNS 解析过程。 |
host | 查询 DNS 的命令。 |
traceroute | 追踪数据传输路由状况。 |
tcpdump | 命令行的抓包工具。 |
有关磁盘与文件系统的命令(16 个) | |
mount | 挂载文件系统。 |
umount | 卸载文件系统。 |
fsck | 检查并修复 Linux 文件系统。 |
dd | 转换或复制文件。 |
dumpe2fs | 导出 ext2/ext3/ext4 文件系统信息。 |
dump | ext2/3/4 文件系统备份工具。 |
fdisk | 磁盘分区命令,适用于 2TB 以下磁盘分区。 |
parted | 磁盘分区命令,没有磁盘大小限制,常用于 2TB 以下磁盘分区。 |
mkfs | 格式化创建 Linux 文件系统。 |
partprobe | 更新内核的硬盘分区表信息。 |
e2fsck | 检查 ext2/ext3/ext4 类型文件系统。 |
mkswap | 创建 Linux 交换分区。 |
swapon | 启用交换分区。 |
swapoff | 关闭交换分区。 |
sync | 将内存缓冲区内的数据写入磁盘。 |
resize2fs | 调整 ext2/ext3/ext4 文件系统大小。 |
系统权限及用户授权相关命令(4 个) | |
chmod | 改变文件或目录权限。 |
chown | 改变文件或目录的属主和属组。 |
chgrp | 更改文件用户组。 |
umask | 显示或设置权限掩码。 |
查看系统用户登陆信息的命令(7 个) | |
whoami | 显示当前有效的用户名称,相当于执行 id -un 命令。 |
who | 显示目前登录系统的用户信息。 |
w | 显示已经登陆系统的用户列表,并显示用户正在执行的指令。 |
last | 显示登入系统的用户。 |
lastlog | 显示系统中所有用户最近一次登录信息。 |
users | 显示当前登录系统的所有用户的用户列表。 |
finger | 查找并显示用户信息。 |
内置命令及其它(19 个) | |
echo | 打印变量,或直接输出指定的字符串 |
printf | 将结果格式化输出到标准输出。 |
rpm | 管理 rpm 包的命令。 |
yum | 自动化简单化地管理 rpm 包的命令。 |
watch | 周期性的执行给定的命令,并将命令的输出以全屏方式显示。 |
alias | 设置系统别名。 |
unalias | 取消系统别名。 |
date | 查看或设置系统时间。 |
clear | 清除屏幕,简称清屏。 |
history | 查看命令执行的历史纪录。 |
eject | 弹出光驱。 |
time | 计算命令执行时间。 |
nc | 功能强大的网络工具。 |
xargs | 将标准输入转换成命令行参数。 |
exec | 调用并执行指令的命令。 |
export | 设置或者显示环境变量。 |
unset | 删除变量或函数。 |
type | 用于判断另外一个命令是否是内置命令。 |
bc | 命令行科学计算器 |
系统管理与性能监视命令 (9 个) | |
chkconfig | 管理 Linux 系统开机启动项。 |
vmstat | 虚拟内存统计。 |
mpstat | 显示各个可用 CPU 的状态统计。 |
iostat | 统计系统 IO。 |
sar | 全面地获取系统的 CPU、运行队列、磁盘 I/O、分页(交换区)、内存、 CPU 中断和网络等性能数据。 |
ipcs | 用于报告 Linux 中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。 |
ipcrm | 用来删除一个或更多的消息队列、信号量集或者共享内存标识。 |
strace | 用于诊断、调试 Linux 用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。 |
ltrace | 命令会跟踪进程的库函数调用, 它会显现出哪个库函数被调用。 |
关机 / 重启 / 注销和查看系统信息的命令(6 个) | |
shutdown | 关机。 |
halt | 关机。 |
poweroff | 关闭电源。 |
logout | 退出当前登录的 Shell。 |
exit | 退出当前登录的 Shell。 |
Ctrl+d | 退出当前登录的 Shell 的快捷键。 |
进程管理相关命令(15 个) | |
bg | 将一个在后台暂停的命令,变成继续执行 (在后台执行)。 |
fg | 将后台中的命令调至前台继续运行。 |
jobs | 查看当前有多少在后台运行的命令。 |
kill | 终止进程。 |
killall | 通过进程名终止进程。 |
pkill | 通过进程名终止进程。 |
crontab | 定时任务命令。 |
ps | 显示进程的快照。 |
pstree | 树形显示进程。 |
nice/renice | 调整程序运行的优先级。 |
nohup | 忽略挂起信号运行指定的命令。 |
pgrep | 查找匹配条件的进程。 |
runlevel | 查看系统当前运行级别。 |
init | 切换运行级别。 |
service | 启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。 |
⭐shell 传递参数
⭐
参数处理 | 说明 |
---|---|
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数。 如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
⭐shell 运算符
⭐
1️⃣ 算术运算符
下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:
运算符 | 说明 | 举例 |
---|---|---|
+ | 加法 | expr $a + $b 结果为 30。 |
- | 减法 | expr $a - $b 结果为 -10。 |
* | 乘法 | expr $a \* $b 结果为 200。 |
/ | 除法 | expr $b / $a 结果为 2。 |
% | 取余 | expr $b % $a 结果为 0。 |
= | 赋值 | a=$b 将把变量 b 的值赋给 a。 |
== | 相等。用于比较两个数字,相同则返回 true。 | [ $a == $b ] 返回 false。 |
!= | 不相等。用于比较两个数字,不相同则返回 true。 | [ $a != $b ] 返回 true。 |
注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。
2️⃣ 关系运算符
下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:
运算符 | 说明 | 举例 |
---|---|---|
-eq | 检测两个数是否相等,相等返回 true。 | [ $a -eq $b ] 返回 false。 |
-ne | 检测两个数是否不相等,不相等返回 true。 | [ $a -ne $b ] 返回 true。 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | [ $a -gt $b ] 返回 false。 |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | [ $a -lt $b ] 返回 true。 |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | [ $a -ge $b ] 返回 false。 |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | [ $a -le $b ] 返回 true。 |
注意:关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
3️⃣ 布尔运算符
下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:
运算符 | 说明 | 举例 |
---|---|---|
! | 非运算,表达式为 true 则返回 false,否则返回 true。 | [ ! false ] 返回 true。 |
-o | 或运算,有一个表达式为 true 则返回 true。 | [ $a -lt 20 -o $b -gt 100 ] 返回 true。 |
-a | 与运算,两个表达式都为 true 才返回 true。 | [ $a -lt 20 -a $b -gt 100 ] 返回 false。 |
4️⃣ 逻辑运算符
以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20:
运算符 | 说明 | 举例 |
---|---|---|
&& | 逻辑的 AND | [[ $a -lt 100 && $b -gt 100 ]] 返回 false |
|| | 逻辑的 OR | [[ $a -lt 100 || $b -gt 100 ]] 返回 true |
5️⃣ 字符串运算符
下表列出了常用的字符串运算符,假定变量 a 为 "abc",变量 b 为 "efg":
运算符 | 说明 | 举例 |
---|---|---|
= | 检测两个字符串是否相等,相等返回 true。 | [ $a = $b ] 返回 false。 |
!= | 检测两个字符串是否相等,不相等返回 true。 | [ $a != $b ] 返回 true。 |
-z | 检测字符串长度是否为0,为0返回 true。 | [ -z $a ] 返回 false。 |
-n | 检测字符串长度是否为0,不为0返回 true。 | [ -n $a ] 返回 true。 |
str | 检测字符串是否为空,不为空返回 true。 | [ $a ] 返回 true。 |
6️⃣ 文件测试运算符
文件测试运算符用于检测 Unix 文件的各种属性。
属性检测描述如下:
操作符 | 说明 | 举例 |
---|---|---|
-b file | 检测文件是否是块设备文件,如果是,则返回 true。 | [ -b $file ] 返回 false。 |
-c file | 检测文件是否是字符设备文件,如果是,则返回 true。 | [ -c $file ] 返回 false。 |
-d file | 检测文件是否是目录,如果是,则返回 true。 | [ -d $file ] 返回 false。 |
-f file | 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 | [ -f $file ] 返回 true。 |
-g file | 检测文件是否设置了 SGID 位,如果是,则返回 true。 | [ -g $file ] 返回 false。 |
-k file | 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 | [ -k $file ] 返回 false。 |
-p file | 检测文件是否是有名管道,如果是,则返回 true。 | [ -p $file ] 返回 false。 |
-u file | 检测文件是否设置了 SUID 位,如果是,则返回 true。 | [ -u $file ] 返回 false。 |
-r file | 检测文件是否可读,如果是,则返回 true。 | [ -r $file ] 返回 true。 |
-w file | 检测文件是否可写,如果是,则返回 true。 | [ -w $file ] 返回 true。 |
-x file | 检测文件是否可执行,如果是,则返回 true。 | [ -x $file ] 返回 true。 |
-s file | 检测文件是否为空(文件大小是否大于0),不为空返回 true。 | [ -s $file ] 返回 true。 |
-e file | 检测文件(包括目录)是否存在,如果是,则返回 true。 | [ -e $file ] 返回 true。 |
⭐shell 流程控制
⭐
if 语句:
单分支
if 条件表达式; then 命令 fi
双分支
if 条件表达式; then 命令 else 命令 fi
多分支
if 条件表达式; then 命令 elif 条件表达式; then 命令 else 命令 fi
for 语句:
for 变量名 in 取值列表; do 命令 已完成
while 语句:
while 条件表达式; do 命令 已完成
case 语句:
case 模式名 in 模式 1) 命令 ;; 模式 2) 命令 ;; *) 不符合以上模式执行的命令 esac