Bash 基础与进阶实践指南

目录

  1. Bash 简介与基础
  2. 基本命令与文件操作
  3. 权限管理与用户管理
  4. 重定向与管道
  5. 变量与环境变量
  6. 通配符与正则表达式
  7. Shell 脚本结构与控制流
  8. 常用内建命令与技巧
  9. 文本处理常用命令
  10. 作业控制与进程管理
  11. 别名与函数
  12. 实用技巧与注意事项
  13. 更多 Bash 进阶话题
  14. 参考资源

1. Bash 简介与基础

1.1 什么是 Bash

  • Bash(Bourne-Again SHell):一种常见的 Unix/Linux Shell(命令解释器),也是在大多数 Linux 发行版中的默认 Shell。
  • Shell 的作用:提供命令执行与脚本编写环境,是用户与操作系统内核交互的接口。

1.2 如何进入 Bash

  • 登录终端 后默认即进入 Bash。如果使用的是其他 Shell(如 zsh),可输入 bash 切换到 Bash。
  • 查看当前 Shell:
    echo $SHELL
    

1.3 Bash 的主要特点

  • 强大的 命令行交互:组合、重定向、管道操作非常灵活。
  • 支持 脚本编写:可以编写 .sh 文件并运行。
  • 易于与其他命令结合,具有丰富的内置功能。

2. 基本命令与文件操作

2.1 查看当前目录与切换目录

  • 查看当前所在目录:
    pwd
    
  • 切换目录:
    cd /path/to/directory
    

2.2 列出文件

  • 列出文件和目录(简洁列表):
    ls
    
  • 查看详情(权限、大小、修改时间等):
    ls -l
    
  • 显示隐藏文件:
    ls -a
    

2.3 创建、删除、复制、移动

  • 创建文件(空文件):
    touch filename
    
  • 创建目录
    mkdir directory_name
    
  • 删除文件
    rm filename
    
  • 删除目录
    rm -r directory_name
    
  • 复制文件
    cp source_file target_file
    
  • 移动/重命名文件
    mv old_name new_name
    

2.4 查看文件内容

  • cat:一次性显示整个文件
    cat file.txt
    
  • less:分页查看文件(q 退出)
    less file.txt
    
  • head/tail:只看开头/结尾 N 行
    head -n 10 file.txt
    tail -n 10 file.txt
    
  • tail -f file.txt:实时查看文件增长(常用于查看日志)

2.5 搜索文件

  • find:在指定路径下查找文件
    find /path -name "*.sh"
    
    常与 xargs-exec 搭配使用做批量操作:
    find /path -type f -name "*.log" -exec rm {} \;
    

3. 权限管理与用户管理

3.1 文件权限

  • Unix/Linux 的文件权限通常分为:所有者(user)组(group)其他人(others) 三类。
  • 每一类权限有三个维度:读(r)写(w)执行(x)
  • 查看权限:
    ls -l
    
    例如:-rwxr-xr-- 表示所有者有 rwx 权限,组用户有 r-x 权限,其他人有 r-- 权限。

3.2 修改权限

  • 使用 chmod 修改权限(符号模式或数字模式):
    chmod u=rwx,g=rx,o=r file.sh
    chmod 755 file.sh
    

3.3 修改文件拥有者

  • chown:修改文件/目录所有者或所属组
    chown user file.txt
    chown user:group file.txt
    

3.4 切换用户

  • 从当前用户切换到其他用户:
    su - other_user
    
  • 使用超级管理员权限(若当前用户在 sudoers 列表中):
    sudo command
    

4. 重定向与管道

4.1 标准输入输出和错误输出

  • 文件描述符
    • stdin:标准输入(文件描述符 0)
    • stdout:标准输出(文件描述符 1)
    • stderr:标准错误输出(文件描述符 2)

4.2 重定向

  • 重定向输出到文件(覆盖原文件):
    command > file.txt
    
  • 追加输出到文件
    command >> file.txt
    
  • 重定向错误输出
    command 2> error.log
    command 2>> error.log
    
  • 同时重定向标准输出和错误输出
    command > all.log 2>&1
    

4.3 管道

  • 管道操作符 |:将左边命令的标准输出作为右边命令的标准输入。
    command1 | command2
    
    常用示例:
    ls -l | grep ".sh"
    

4.4 Here Document 与 Here String

  • Here Document:将多个行的文本作为输入传递给命令
    cat << EOF > file.txt
    line1
    line2
    EOF
    
    EOF 可以改为任意标记,结束符前不能有多余空格。
  • Here String:将一小段字符串作为输入
    grep "pattern" <<< "this is a test"
    

5. 变量与环境变量

5.1 变量的定义与使用

  • 定义变量
    NAME="Alice"
    echo $NAME
    
  • 注意:等号两边不能有空格;要引用变量使用 echo $变量名${变量名}

5.2 环境变量

  • 常见环境变量
    • $HOME:用户主目录
    • $PATH:可执行文件搜索路径
    • $PWD:当前工作目录
    • $SHELL:当前 Shell 路径
  • 导出环境变量
    export VARIABLE="value"
    
  • 查看环境变量
    env
    printenv
    

5.3 位置参数变量

  • 脚本中的位置参数
    • $0:脚本自身的名字
    • $1$9:传递给脚本的参数
    • $#:传递给脚本的参数总个数
    • $@:传递给脚本的所有参数
    • $?:上一条命令的退出状态(0 表示成功,非 0 表示失败)

5.4 数组与关联数组(简单介绍)

  • 普通数组
    myarr=(apple banana cherry)
    echo ${myarr[0]}    # apple
    echo ${myarr[@]}    # apple banana cherry
    
  • 关联数组(Bash 4+ 支持):
    declare -A mymap
    mymap[color]="blue"
    mymap[fruit]="apple"
    echo ${mymap[color]}  # blue
    

6. 通配符与正则表达式

6.1 通配符(Globbing)

  • *:匹配任意长度的任意字符(包括空字符)
  • ?:匹配单个任意字符
  • [ ]:匹配中括号内任意单个字符
    例如 ls *.sh:匹配当前目录下所有以 .sh 结尾的文件。

6.2 正则表达式(Regular Expressions)

  • 通常结合 grepsedawk 等命令使用,用于复杂的文本匹配。
  • 常见元字符:
    • ^:匹配行首
    • $:匹配行尾
    • .:匹配除换行符以外的任何字符
    • *:匹配前一个字符的 0 次或多次出现
    • [...]:匹配方括号内的任意一个字符
    • ( ):分组
  • 注意:通配符与正则表达式的语法/使用场景并不完全相同,需要区分。

7. Shell 脚本结构与控制流

7.1 脚本的基本结构

  • 脚本头行(Shebang):指定解释器
    #!/usr/bin/env bash
    
  • 注释:使用 #
  • 执行权限:要让脚本具有可执行权限
    chmod +x script.sh
    
  • 运行脚本
    ./script.sh
    
    或在当前 Shell 中执行:
    source script.sh
    # 或 . script.sh
    

7.2 条件判断

  • if 语句
    if [ condition ]; then
        # ...
    elif [ condition2 ]; then
        # ...
    else
        # ...
    fi
    
  • test 命令 或者 单中括号 [ ]:进行数值、字符串、文件检测,比如
    [ -f file ]      # 是否是一个普通文件
    [ -d directory ] # 是否是一个目录
    [ "$VAR" = "abc" ] # 字符串是否相等
    [ "$NUM" -eq 10 ]  # 数值是否等于 10
    
  • 双中括号 [[ ]]:Bash 的扩展测试语句,支持更多模式匹配等高级特性。

7.3 循环

  • for 循环
    for var in item1 item2 item3
    do
        echo $var
    done
    
  • while 循环
    while [ condition ]
    do
        # ...
    done
    
  • until 循环
    until [ condition ]
    do
        # ...
    done
    

7.4 case 语句

case $variable in
  pattern1)
    # ...
    ;;
  pattern2)
    # ...
    ;;
  *)
    # 默认匹配
    ;;
esac

7.5 常用扩展

  • 命令替换
    result=$(command) 
    # 或者老式用法: result=`command`
    
  • 算术扩展
    num1=10
    num2=5
    echo $((num1 + num2))  # 15
    
  • 花括号扩展
    echo {1..5}    # 1 2 3 4 5
    echo file{A,B,C}.txt  # fileA.txt fileB.txt fileC.txt
    

8. 常用内建命令与技巧

8.1 type/which

  • 查看命令是内置(builtin)还是外部可执行文件:
    type cd
    type ls
    
  • 查看可执行文件路径:
    which ls
    

8.2 history

  • 查看和管理历史命令:
    history
    
  • 执行第 N 条历史命令:
    !N
    
  • 搜索历史:按 Ctrl + r,然后输入关键字

8.3 echo/printf

  • echo:输出文本,自动换行
  • printf:功能类似 C 语言的 printf,可格式化输出

8.4 read

  • 交互式读取用户输入:
    read -p "Enter your name: " NAME
    echo "Hello, $NAME"
    
  • read 常用选项:
    • -r:禁止反斜杠转义
    • -t <秒>:设置等待输入的超时时间

8.5 引号与转义

  • 单引号 ' ':原样输出,引号内所有字符都被视为普通字符
  • 双引号 " ":可以进行变量替换和命令替换
  • 反斜杠 \ :转义下一字符

9. 文本处理常用命令

9.1 grep

  • 在文本中搜索匹配的行:
    grep "pattern" file.txt
    
  • 结合正则表达式:
    grep -E "reg(pattern)+" file.txt
    
  • 常用选项:
    • -i:忽略大小写
    • -n:显示行号
    • -v:显示不匹配的行

9.2 sed

  • 流编辑器,可进行文本替换、插入、删除等:
    sed 's/old/new/g' file.txt
    
  • -i 选项可以直接修改文件:
    sed -i 's/old/new/g' file.txt
    

9.3 awk

  • 强大的文本处理工具,可按列进行分析:
    awk '{print $1, $3}' file.txt
    
  • 支持复杂脚本逻辑,可以根据分隔符处理 CSV 等格式。关键字段:
    • $0:当前行全部内容
    • $1:第一列 … $NF:最后一列
    • NR:当前行号
    • FS:输入分隔符

9.4 sort、uniq、cut、paste、xargs、tee

  • sort:排序
    sort file.txt
    
  • uniq:去重(需先 sort)
    sort file.txt | uniq
    
  • cut:切割某几列
    cut -d ',' -f 1,3 file.csv
    
  • paste:将多文件按行合并
  • xargs:将标准输入的输出拼接成命令参数
    find . -name "*.txt" | xargs rm
    
  • tee:将输入同时写入文件和标准输出
    command | tee output.txt
    

10. 作业控制与进程管理

10.1 后台运行

  • 在命令末尾加 &,使其在后台运行:
    long_running_command &
    
  • 查看后台作业:
    jobs
    

10.2 前后台切换

  • 暂停前台作业Ctrl + Z
  • 将暂停的作业放到后台bg %job_number
  • 恢复后台作业到前台fg %job_number

10.3 进程管理

  • ps:列出当前进程
    ps aux
    
  • top/htop:动态查看进程状态
  • kill:结束进程
    kill -9 PID
    

11. 别名与函数

11.1 别名(alias)

  • 临时设置别名:
    alias ll='ls -l'
    
  • ~/.bashrc 中设置长期别名,加入:
    alias ll='ls -l --color=auto'
    

11.2 函数(function)

  • 在脚本或命令行定义函数:
    myfunc() {
        echo "This is my function."
    }
    
  • 调用函数:
    myfunc
    
  • 在函数内使用局部变量可用 local 关键字:
    myfunc() {
        local var="local_value"
        echo "$var"
    }
    

12. 实用技巧与注意事项

  1. Tab 补全:在命令行输入部分命令或文件名后按 Tab 可自动补全。
  2. 通配符谨慎使用:如 rm -rf *;需非常小心,以防误删重要文件。
  3. Shell 脚本调试
    • bash -x script.sh:打印执行过程(追踪每一条命令)
    • bash -n script.sh:只做语法检查,不执行脚本
    • 在脚本顶部加入 set -x 或手动添加 set -eset -uset -o pipefail 等,以控制脚本在出错或使用未定义变量时及时退出。
  4. 查看命令帮助
    • 内部命令使用 help command
    • 外部命令使用 command --helpman command
  5. PS1 自定义:在 ~/.bashrc 中可自定义 PS1 来定制命令行提示符(颜色、显示 Git 分支等)。
  6. 区分登录 Shell 与非登录 Shell:常见的启动文件有 .bash_profile.bashrc.profile 等,具体加载顺序略有差异。
  7. 使用 shellcheck:对脚本做静态分析,排查常见错误和风格问题。

13. 更多 Bash 进阶话题

以下内容更偏进阶或对复杂场景十分有用,可在掌握基础后逐步学习:

  1. 定时任务:使用 cron(编辑 crontab -e)或 at 命令进行定时或一次性任务调度。
  2. 函数库与脚本组织:将常用函数抽取为脚本,使用 source (或 .) 引用。
  3. shopt 与 Shell 选项:比如 shopt -s expand_aliases 等,可开启或关闭 Bash 的一些特性。
  4. 信号处理(trap):在脚本里捕获 SIGINT (Ctrl+C) 等信号并做相应处理。
  5. 正则高级用法:POSIX ERE 与 PCRE 的差异、利用 grep -P 等。
  6. 多进程/并发:用子 Shell、GNU Parallel 等方式提升脚本并发能力。

14. 参考资源

  1. GNU Bash 官方文档
  2. The Linux Documentation Project (TLDP)
  3. Bash Scripting Tutorial (ABS Guide)
  4. shellcheck - Shell 脚本静态分析工具

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/965706.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux之安装docker

一、检查版本和内核是否合格 Docker支持64位版本的CentOS 7和CentOS 8及更高版本&#xff0c;它要求Linux内核版本不低于3.10。 检查版本 cat /etc/redhat-release检查内核 uname -r二、Docker的安装 1、自动安装 Docker官方和国内daocloud都提供了一键安装的脚本&#x…

2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题3)-网络部分解析-附详细代码

目录 附录1:拓扑图 附录2:地址规划表 1.SW1 2.SW2 3.SW3 4.SW4 5.SW5 6.SW6 7.SW7 8.R1 9.R2 10.R3 11.AC1 12.AC2 13.AP2 14.AP3 15.EG1 16.EG2 附录1:拓扑图 附录2:地址规划表 设备

Vim跳转文件及文件行结束符EOL

跳转文件 gf 从当前窗口打开那个文件的内容&#xff0c;操作方式&#xff1a;让光标停在文件名上&#xff0c;输入gf。 Ctrlo 从打开的文件返回之前的窗口 Ctrlwf 可以在分割的窗口打开跳转的文件&#xff0c;不过在我的实验不是次次都成功。 统一行尾格式 文本文件里存放的…

《Angular之image loading 404》

前言&#xff1a; 千锤万凿出深山&#xff0c;烈火焚烧若等闲。 正文&#xff1a; 一。问题描述 页面加载图片&#xff0c;报错404 二。问题定位 页面需要加载图片&#xff0c;本地开发写成硬编码的形式请求图片资源&#xff1a; 然而部署到服务器上报错404 三。解决方案 正确…

Windows Docker笔记-Docker容器操作

在文章《Windows Docker笔记-Docker拉取镜像》中&#xff0c;已经拉取成功了ubuntu镜像&#xff0c;本章来讲解如何通过镜像来创建容器并运行容器。 这里再类比一下&#xff0c;加深理解&#xff0c;比如&#xff0c;我们现在想开一个玩具厂&#xff0c;我们的最终目的肯定是想…

upload-labs安装与配置

前言 作者进行upload-labs靶场练习时&#xff0c;在环境上出了很多问题&#xff0c;吃了很多苦头&#xff0c;甚至改了很多配置也没有成功。 upload-labs很多操作都是旧时代的产物了&#xff0c;配置普遍都比较老&#xff0c;比如PHP版本用5.2.17&#xff08;还有中间件等&am…

(2025|ICLR,音频 LLM,蒸馏/ALLD,跨模态学习,语音质量评估,MOS)音频 LLM 可作为描述性语音质量评估器

Audio Large Language Models Can Be Descriptive Speech Quality Evaluators 目录 1. 概述 2. 研究背景与动机 3. 方法 3.1 语音质量评估数据集 3.2 ALLD 对齐策略 4. 实验结果分析 4.1 MOS 评分预测&#xff08;数值评估&#xff09; 4.2 迁移能力&#xff08;在不同…

深入理解linux中的文件(下)

目录 一、语言级缓冲区和内核级缓冲区 二、C语音中的FILE* fp fopen(“./file.txt”,"w"): 四、理解磁盘结构&#xff1a; 物理结构 逻辑结构 五、未被打开的文件&#xff1a; 六、更加深入理解inode编号怎么找到文件&#xff1a; 七、对路径结构进行…

零基础Vue入门6——Vue router

本节重点&#xff1a; 路由定义路由跳转 前面几节学习的都是单页面的功能&#xff08;都在专栏里面https://blog.csdn.net/zhanggongzichu/category_12883540.html&#xff09;&#xff0c;涉及到项目研发都是有很多页面的&#xff0c;这里就需要用到路由&#xff08;vue route…

京准:NTP卫星时钟服务器对于DeepSeek安全的重要性

京准&#xff1a;NTP卫星时钟服务器对于DeepSeek安全的重要性 京准&#xff1a;NTP卫星时钟服务器对于DeepSeek安全的重要性 在网络安全领域&#xff0c;分布式拒绝服务&#xff08;DDoS&#xff09;攻击一直是企业和网络服务商面临的重大威胁之一。随着攻击技术的不断演化…

网络计算机的五个组成部分

单个计算机是无法进行通信的。所以需要借助网络。 下面介绍一些在网络里常见的设备。 一、服务器 服务器是在网络环境中提供计算能力并运行软件应用程序的特定IT设备 它在网络中为其他客户机&#xff08;如个人计算机、智能手机、ATM机等终端设备&#xff09;提供计算或者应用…

MATLAB实现单层竞争神经网络数据分类

一.单层竞争神经网络介绍 单层竞争神经网络&#xff08;Single-Layer Competitive Neural Network&#xff09;是一种基于竞争学习的神经网络模型&#xff0c;主要用于数据分类和模式识别。其核心思想是通过神经元之间的竞争机制&#xff0c;使得网络能够自动学习输入数据的特…

【漫画机器学习】082.岭回归(或脊回归)中的α值(alpha in ridge regression)

岭回归&#xff08;Ridge Regression&#xff09;中的 α 值 岭回归&#xff08;Ridge Regression&#xff09;是一种 带有 L2​ 正则化 的线性回归方法&#xff0c;用于处理多重共线性&#xff08;Multicollinearity&#xff09;问题&#xff0c;提高模型的泛化能力。其中&am…

网络安全 | 零信任架构:重构安全防线的未来趋势

网络安全 | 零信任架构&#xff1a;重构安全防线的未来趋势 一、前言二、零信任架构的核心概念与原理2.1 核心概念2.2 原理 三、零信任架构的关键技术组件3.1 身份管理与认证系统3.2 授权与访问控制系统3.3 网络与安全监测系统3.4 加密与数据保护技术 四、零信任架构与传统安全…

网络爬虫学习:借助DeepSeek完善爬虫软件,增加停止任务功能

一、引言 我从24年11月份开始学习网络爬虫应用开发&#xff0c;经过2个来月的努力&#xff0c;终于完成了开发一款网络爬虫软件的学习目标。这几天对本次学习及应用开发进行一下回顾总结。前面已经发布了两篇日志&#xff1a; 网络爬虫学习&#xff1a;应用selenium从搜*狐搜…

JVM图文入门

往期推荐 【已解决】redisCache注解失效&#xff0c;没写cacheConfig_com.howbuy.cachemanagement.client.redisclient#incr-CSDN博客 【已解决】OSS配置问题_keyuewenhua.oss-cn-beijing.aliyuncs-CSDN博客 【排坑】云服务器docker部署前后端分离项目域名解析OSS-CSDN博客 微服…

VScode如何使用deepseek详细教程

本章教程,主要介绍如何在vscode中,安装使用deepseek教程。deepseek生成式人工智能模型最近可是非常的热门。感兴趣的可以尝试看看吧。 一、注册deepseek账号 注册登录地址:https://platform.deepseek.com/api_keys 注册登录账号之后,创建一个API key ,将这个API key复制下…

大数据相关职位介绍之三(数据挖掘,数据安全 ,数据合规师,首席数据官,数据科学家 )

大数据相关职位介绍之三&#xff08;数据挖掘&#xff0c;数据安全 &#xff0c;数据合规师&#xff0c;首席数据官&#xff0c;数据科学家 &#xff09; 文章目录 大数据相关职位介绍之三&#xff08;数据挖掘&#xff0c;数据安全 &#xff0c;数据合规师&#xff0c;首席数据…

[基础]端口隔离实验

实验教程 隔离类型 双向隔离&#xff1a;统一端口隔离组的接口之间隔离&#xff0c;不同端口隔离组的接口之间不隔离&#xff0c;端口隔离只针对同一设备上的端口隔离组成员&#xff0c;对于不同设备上的接口而言无法实现。单向隔离&#xff1a;实现不同端口隔离组的接口之间的…

vscode 如何通过Continue引入AI 助手deepseek

第一步&#xff1a; 在deepseek 官网上注册账号&#xff0c;得到APIKeys(deepseek官网地址) 创建属于自己的APIKey,然后复制这个key,(注意保存自己的key)! 第二步&#xff1a; 打开vscode,在插件市场安装Continue插件, 点击设置&#xff0c;添加deepseek模型&#xff0c;默认…