当前位置: 首页 > news >正文

Shell 基础知识点总结

Shell 是操作系统内核与用户之间的命令解释器,它接收用户输入的命令,将其翻译成内核能理解的指令并执行,最终返回结果。常见的 Shell 版本包括 Bash(Linux 默认)、ZshSh 等,其中 Bash(Bourne Again Shell)应用最广泛,以下知识点以 Bash 为核心展开。

一、Shell 环境与基本概念

1. Shell 的分类

根据交互方式,Shell 分为两类:

  • 交互式 Shell:用户输入一条命令,Shell 执行一条并返回结果(如终端直接操作)。
  • 非交互式 Shell:执行预先编写好的 Shell 脚本(.sh 文件),批量完成任务,无需用户逐行干预。

2. 查看与切换 Shell

  • 查看当前使用的 Shell:echo $SHELL$SHELL 是环境变量,存储当前 Shell 路径)。
  • 查看系统支持的 Shell:cat /etc/shells
  • 切换 Shell(需用户已安装目标 Shell):chsh -s /bin/zsh(永久切换,需重启终端;临时切换直接输入 zsh)。

3. 环境变量与本地变量

变量是 Shell 中存储数据的载体,分为环境变量(全局生效,所有子进程可访问)和本地变量(仅当前 Shell 进程生效)。

类型定义方式生效范围示例
本地变量变量名=值(无空格)当前 Shell 进程name="Alice"
环境变量export 变量名=值当前 Shell 及所有子进程export PATH=/usr/local/bin:$PATH
查看变量echo $变量名-echo $name(输出 Alice)
删除变量unset 变量名-unset name

常用系统环境变量

  • PATH:存储命令的搜索路径(执行 ls 时,Shell 会在 PATH 路径中找 ls 程序)。
  • HOME:当前用户的主目录(如 ~ 等价于 $HOME)。
  • USER:当前登录用户名。
  • PWD:当前工作目录(等价于 pwd 命令)。

二、Shell 基本命令

Shell 命令是操作的核心,格式通常为:命令 [选项] [参数](选项以 - 短选项或 -- 长选项开头,如 ls -l 或 ls --all)。

1. 目录与文件操作命令

命令功能描述常用选项与示例
pwd显示当前工作目录路径pwd(输出 /home/user
cd切换工作目录cd ~:回到主目录- cd ..:回到上级目录- cd /usr/local:绝对路径切换
ls列出目录下的文件 / 目录ls -l(长格式,显示权限、大小等)- ls -a(显示隐藏文件,以 . 开头)
mkdir创建目录mkdir test:创建单个目录- mkdir -p a/b/c:递归创建多级目录
touch创建空文件或更新文件修改时间touch demo.sh(创建脚本文件)
cp复制文件 / 目录cp file1 file2:复制 file1 为 file2- cp -r dir1 dir2:递归复制目录
mv移动 / 重命名文件 / 目录mv file1 dir/:移动 file1 到 dir 目录- mv oldname newname:重命名
rm删除文件 / 目录(谨慎使用,不可恢复rm file:删除文件- rm -r dir:递归删除目录- rm -f file:强制删除(不提示)
cat查看文件内容(适合短文件)cat demo.sh(直接输出文件内容)
more/less分页查看文件内容(适合长文件)more longfile:向下分页(按 Enter 翻行,q 退出)- less longfile:上下分页(按 ↑↓ 键,q 退出)
grep在文件 / 输出中搜索匹配的字符串(文本过滤)grep "error" log.txt:在 log.txt 中找 "error" 行- grep -i "Error" log.txt:忽略大小写

2. 系统信息与权限命令

命令功能描述常用选项与示例
whoami显示当前登录用户名whoami(输出 user
ps查看进程状态ps aux:查看所有进程(a:所有用户,u:显示用户,x:无终端进程)- `ps -efgrep python`:过滤出 python 进程
kill终止进程kill 1234:通过进程 ID(PID)终止进程- kill -9 1234:强制终止( -9 为强制信号)
chmod修改文件 / 目录的权限权限分 3 组(所有者、组用户、其他用户),每组含 r(读,4)、w(写,2)、x(执行,1)示例:chmod 755 demo.sh(所有者 rwx,其他 rx)
chown修改文件 / 目录的所有者和所属组chown user:group demo.sh(所有者改为 user,组改为 group)

三、Shell 脚本基础

Shell 脚本是将一系列 Shell 命令按逻辑组织到 .sh 文件中,批量执行任务的工具。

1. 脚本的创建与执行

步骤 1:创建脚本文件

用文本编辑器(如 vimnano)创建 .sh 文件,首行必须指定解释器路径(称为 “shebang”):

bash

#! /bin/bash  # 指定用 Bash 解释器执行(不可省略)
# 这是注释(以 # 开头,不执行)
echo "Hello, Shell!"  # 输出字符串
步骤 2:赋予执行权限

刚创建的脚本默认无执行权限,需用 chmod 授权:

bash

chmod +x demo.sh  # 给 demo.sh 增加执行权限(+x 表示添加执行权限)
步骤 3:执行脚本

有两种执行方式:

  • 方式 1(推荐)./demo.sh(需在脚本所在目录,./ 表示当前目录)。
  • 方式 2bash demo.sh(无需执行权限,直接指定 Bash 解释器运行)。

2. 脚本中的变量与参数

(1)自定义变量
  • 定义:变量名=值等号前后无空格,值含空格需用引号包裹,如 msg="Hello World")。
  • 使用:$变量名 或 ${变量名}(如 echo $msg 输出 Hello World)。
(2)位置参数(脚本接收外部输入)

执行脚本时,可传入参数,脚本内用 $n 接收(n 为 1、2、3...,$0 表示脚本自身路径):

bash

# 脚本 demo.sh 内容
echo "脚本名:$0"
echo "第一个参数:$1"
echo "第二个参数:$2"

执行脚本并传参:

bash

./demo.sh apple banana  # 输出:
# 脚本名:./demo.sh
# 第一个参数:apple
# 第二个参数:banana
(3)特殊参数
  • $#:传入参数的总个数。
  • $*:所有参数的集合(视为一个整体)。
  • $@:所有参数的集合(视为多个独立个体)。
  • $?:上一条命令的退出状态码(0 表示执行成功,非 0 表示失败,如 echo $? 查看上条命令结果)。

3. 脚本中的流程控制

(1)条件判断:if-else

语法格式(注意 if 后需有 thenfi 结束判断):

bash

if [ 条件表达式 ]; then  # 条件表达式前后必须有空格,[] 等价于 test 命令# 条件成立时执行的命令
elif [ 另一个条件 ]; then# 第二个条件成立时执行的命令
else# 所有条件不成立时执行的命令
fi

常见条件判断类型

  • 数值比较:-eq(等于)、-ne(不等于)、-gt(大于)、-lt(小于),如 [ 5 -gt 3 ](5>3,成立)。
  • 字符串比较:==(等于)、!=(不等于)、-z(空字符串),如 [ "$name" == "Alice" ]
  • 文件判断:-f(是否为文件)、-d(是否为目录)、-r(是否有读权限),如 [ -f demo.sh ](判断 demo.sh 是否存在且为文件)。

示例:判断文件是否存在

bash

if [ -f demo.sh ]; thenecho "文件 demo.sh 存在"
elseecho "文件 demo.sh 不存在"
fi
(2)循环:for 与 while
① for 循环(遍历列表或参数)

语法 1:遍历固定列表

bash

for 变量 in 列表; do# 循环体命令(变量每次取列表中的一个值)
done

示例:遍历水果列表

bash

for fruit in apple banana orange; doecho "水果:$fruit"
done
# 输出:
# 水果:apple
# 水果:banana
# 水果:orange

语法 2:遍历参数($@ 表示所有参数)

bash

for arg in $@; doecho "参数:$arg"
done
② while 循环(条件成立时持续执行)

语法(条件为真时循环,done 结束):

bash

while [ 条件表达式 ]; do# 循环体命令
done

示例:循环输出 1-5

bash

i=1
while [ $i -le 5 ]; do  # 当 i ≤5 时循环echo "i = $i"i=$((i+1))  # 数值计算($((...)) 用于整数运算)
done
(3)分支选择:case

适合多条件匹配场景,替代多个 if-elif,语法:

bash

case $变量 in模式1)# 变量匹配模式1时执行;;  # 结束当前分支(不可省略)模式2)# 变量匹配模式2时执行;;*)  # 默认分支(所有模式不匹配时执行)# 默认命令;;
esac  # case 倒写,结束分支

示例:根据输入判断星期

bash

read -p "请输入星期(1-7):" day  # read 接收用户输入,-p 显示提示语
case $day in1) echo "星期一" ;;2) echo "星期二" ;;3) echo "星期三" ;;4) echo "星期四" ;;5) echo "星期五" ;;6|7) echo "周末" ;;  # | 表示“或”*) echo "输入错误!" ;;
esac

四、Shell 进阶基础

1. 管道与重定向

Shell 支持通过管道(| 和重定向(>>>< 处理命令的输入输出。

(1)管道(|

将前一个命令的标准输出作为后一个命令的标准输入,实现命令联动。示例:查看当前目录下文件数(ls -l 输出长格式,wc -l 统计行数):

bash

ls -l | wc -l
(2)重定向
  • 标准输出重定向(>>>

    • 命令 > 文件:将命令输出覆盖写入文件(原文件内容清空)。
    • 命令 >> 文件:将命令输出追加写入文件(原文件内容保留)。示例:将 ls 结果写入 filelist.txt

    bash

    ls -l >> filelist.txt  # 追加写入,不覆盖原有内容
    
  • 标准错误重定向(2>2>>

    • 标准错误的文件描述符是 2,用 2> 或 2>> 重定向错误信息。示例:将错误信息写入 error.log

    bash

    rm nofile.txt 2>> error.log  # 删除不存在的文件,错误信息追加到 error.log
    
  • 标准输入重定向(<

    • 将文件内容作为命令的标准输入(替代键盘输入)。示例:用 cat 读取文件(等价于 cat file.txt):

    bash

    cat < file.txt
    

2. 函数

将重复执行的代码封装为函数,提高脚本复用性,语法:

bash

# 定义函数
函数名() {# 函数体命令(可接收参数,用 $1、$2 等获取)# return 退出状态码(可选,默认返回最后一条命令的状态码)
}# 调用函数
函数名 [参数1 参数2 ...]

示例:定义 “计算两数之和” 的函数

bash

add() {sum=$(( $1 + $2 ))echo "两数之和:$sum"
}# 调用函数,传入 3 和 5
add 3 5  # 输出:两数之和:8

五、常用技巧与注意事项

  1. 命令补全:按 Tab 键自动补全命令、文件 / 目录名(按两次 Tab 显示所有候选)。
  2. 命令历史:按 / 键查看历史命令;history 命令查看所有历史记录;!n 执行第 n 条历史命令(如 !100 执行第 100 条)。
  3. 注释规范:脚本中用 # 写注释,说明脚本功能、参数含义、关键逻辑,提高可读性。
  4. 空格注意
    • 变量定义:name=Alice(等号前后无空格),错误写法:name = Alice
    • 条件判断:[ $i -le 5 ][ 后、] 前必须有空格),错误写法:[$i -le 5]
  5. 引号使用
    • 双引号("):保留变量值(如 "$name" 会解析为变量内容),但忽略特殊符号(如 *?)。
    • 单引号('):完全原样输出(不解析变量、特殊符号,如 '$name' 输出 $name)。
  6. 安全提示rm -rf / 是危险命令(递归强制删除根目录所有文件),绝对禁止执行;删除文件前建议用 ls 确认路径。
http://www.dtcms.com/a/492550.html

相关文章:

  • 网站如何备案工信局备案网站打不开
  • 苏州网站建设空间河南省的网页制作
  • 网站开发的招标参数雅安网站建设公司
  • 企业站seo报价黑龙江省城乡和住房建设厅网站首页
  • 某公司人事管理网站开发wordpress建站不好用
  • 《独立开发者精选工具》
  • 注册网站需要多少钱wordpress很卡
  • 【大模型】IndexTTS-1.5在Linux + GTX1080TI平台部署步骤及性能分析
  • 比较好的网站建设品牌升级辽源商城网站建设
  • 纳税服务网站建设情况网络及建设公司网站
  • 用phpcms建站的网站深圳o2o网站建设
  • 网站建设公司发展方向及趋势网站内页产品 首页推荐
  • 做老托福听力的网站php做的网站 订单系统
  • 商派商城网站建设二次开发本地配置wordpress
  • 【论文学习】医学图像分割论文
  • 在网站做电子画册做的网站第二年续费多钱
  • 网站建设平台案例唯美wordpress简约主题
  • 购物网站建设ppt51游戏
  • 中国黄页是什么网站做进一步优化
  • 什么是MySQL分区?
  • 网站首页怎么用dw做服务器搭建网站能ping t
  • 湖南平台网站建设方案dw怎么建设网站
  • 在项目中导入文件时使用 import 和 require 的区别
  • 网站制作金华公司电话泉州网页制作设计
  • c2c网站名称网站建设 发短信文案
  • 基于Transformer与扩散模型的多模态生成对抗网络研究:迈向通用人工智能的生成之路
  • 国外网站上不去 dnsoss做下载网站
  • Ubuntu Server 系统安装图形界面
  • 黄岛区城市建设局网站汕头 网站设计
  • 做家政有什么网站做推广好洛阳gjyl设计院