64、深入探索Bash脚本部署与自动化作业

深入探索Bash脚本部署与自动化作业

1. 部署Bash脚本

在文本文件中添加多个命令以运行时,必须在文件开头使用Shebang行( #! ),它用于指定要使用的Linux shell。同时,需要使用 chmod 命令的 u+x 选项为自己赋予执行该文件的权限。运行文件时,可能需要指定文件的完整路径,或者修改系统的 PATH 环境变量,以便shell能找到脚本文件。

Bash shell为脚本文件提供了额外功能,使其更像真正的程序:
- echo 语句 :可在脚本的命令输出之间插入文本输出,帮助修改脚本产生的输出。
- 变量 :
- 环境变量 :可获取脚本运行的shell环境信息,如启动shell的用户账户及其相关信息。
- 用户变量 :能在脚本中存储和检索数据,让脚本表现得像真正的程序。

Bash shell还提供了高级编程特性:
- 命令替换 :可将命令的输出捕获到变量中,以便在脚本中从命令输出中提取信息。
- 数学运算 :Bash shell支持基本的整数数学运算,但处理浮点数不太擅长,可能需要借助 bc 计算器等其他程序。
- 逻辑语句 :支持 if 和 case 逻辑语句,可对数字、字符串和文件进行特定条件测试,并根据测试结果运行命令。
- 循环 :支持 for 和 while 循环,可遍历数据组,在一组命令中处理每个元素。

2. 数据处理与访问
  • 数据处理方式 :
    • 输出重定向 :可将命令的输出重定向到文本文件,供后续读取。
    • 管道 :可将一个命令的输出重定向为另一个命令的输入数据,运行脚本时输出不会显示在监视器上,数据传输在后台进行。
  • 可访问的数据类型 :
    • 环境变量 :包含脚本运行的shell环境信息,可获取系统和运行脚本的用户账户信息。
    • 位置变量 :允许在运行脚本时从命令行向脚本传递数据。
3. 数据操作与数学运算
  • 数据操作 :命令替换可将命令输出重定向到用户变量,然后使用标准的Linux文本处理命令对数据进行排序、提取数据记录等操作,再将变量数据重定向到另一个命令。
  • 数学运算 :Bash shell使用 $[] 符号定义要处理的数学方程,但只能执行整数运算,功能有限。
4. 逻辑实现方法

Bash shell支持 if 语句和 case 语句,可对数值、字符串或文件进行测试,并根据测试结果运行一组命令。

5. 复习问题

以下是一些相关的复习问题及答案:
| 问题 | 选项 | 答案 |
| — | — | — |
| 用于定义shell脚本所用shell的Shebang由什么字符组成? | A. >>
B. #!
C. |
D. >
E. 2> | B |
| Henry要将脚本输出存储到新的日志文件中,应使用什么字符? | A. >>
B. #!
C. |
D. >
E. 2> | D |
| Jasmine创建了新的Bash脚本,要从命令行运行,应给文件分配什么 chmod 权限? | A. 644
B. u+r
C. u+x
D. u+w
E. u=wr | C |
| 哪个环境变量包含启动shell的用户的用户名? | A. $USER
B. $UID
C. $HOME
D. $BASH
E. $1 | A |
| Zuri编写Bash脚本,要给变量赋值,应怎么做? | A. var1=$(10)
B. var1 = 10
C. var1=10
D. var1="10"
E. var1= 10 ` | C | | Cameron编写Bash脚本,要测试文件是否存在且为普通文件,应写哪行代码? | A. if [ -e file ] <br> B. if [ -f file ] <br> C. if [ -d file ] <br> D. if [ -x file ] <br> E. if [ -w file ] | B | | 用什么字符或字符组合将一个命令的输出重定向到另一个命令? | A. >> <br> B. #! <br> C. | <br> D. > <br> E. 2> | C | | Christina创建Bash脚本,希望脚本失败时返回值为2,应添加什么语句? | A. #! <br> B. $? <br> C. $1 <br> D. exit <br> E. while | D | | 要执行命令替换,将命令输出赋值给脚本中的变量,应使用什么命令? | A. > <br> B. >> <br> C. $[] <br> D. | <br> E. $() | E | | 在脚本中执行数学运算,应使用什么命令? | A. > <br> B. >> <br> C. $[] <br> D. | <br> E. $()` | C |

6. 自动化作业

在构建shell脚本时,可能会思考如何在Linux系统上运行和控制它们。除了从命令行界面实时运行命令和脚本外,还有其他运行脚本的选项,同时也需要解决脚本陷入循环等问题。

6.1 后台运行脚本

有时直接从命令行界面运行shell脚本不太方便,因为有些脚本处理时间长,会占用命令行界面。可以将脚本在后台运行,方法是在命令后添加 & 符号,例如:

$ ./test1.sh &
[1] 19555
$ This is a test program
Loop #1
Loop #2

$ ls -l
total 8
-rwxr--r--    1 rich     rich          219 Feb  26 19:27 test1.sh
$ Loop #3

添加 & 符号后,命令与Bash shell分离,作为系统的后台进程运行。系统会显示作业号和进程ID(PID),之后会出现新的命令行界面提示符,可继续输入新命令。后台进程运行时仍会使用终端监视器输出消息,进程结束时会在终端显示状态信息。

也可以同时启动多个后台作业,每个作业会被分配唯一的作业号和PID。可以使用 ps 命令查看运行的进程,但如果所有进程都在终端会话中显示输出,会比较混乱。

需要注意的是,后台进程与终端会话绑定,如果终端会话退出,后台进程也会退出。有些终端模拟器会提醒,有些则不会。若希望脚本在注销控制台后仍在后台运行,可使用 nohup 命令。

6.2 无控制台运行脚本

使用 nohup 命令可让脚本在终端会话退出后继续在后台运行。 nohup 命令会阻止发送给进程的 SIGHUP 信号,防止进程在终端会话退出时终止。可将 nohup 命令与 & 符号结合使用,例如:

$ nohup ./test1.sh &
[1] 19831
$ nohup: appending output to  'nohup.out'
$

使用 nohup 命令后,脚本会忽略终端会话发送的 SIGHUP 信号。由于 nohup 命令将进程与终端分离,进程会失去与监视器的输出链接,输出消息会自动重定向到当前工作目录下的 nohup.out 文件。进程运行结束后,可查看该文件获取输出结果。

6.3 发送信号

Bash shell可向系统上运行的进程发送信号,用于停止或中断失控的应用程序进程。对于前台运行的应用程序,可使用键盘组合键生成两个基本的Linux信号:
- 中断进程 : Ctrl+C 组合键生成 SIGINT 信号,可停止当前在shell中运行的进程,例如:

$ sleep 100

$
  • 暂停进程 : Ctrl+Z 组合键生成 SIGTSTP 信号,可暂停shell中运行的进程。暂停进程与终止进程不同,暂停后程序仍在内存中,可继续运行。例如:
$ sleep 100

[1]+  Stopped                 sleep 100
$

若有停止的作业,尝试退出shell时Bash会发出警告。可使用 ps 命令查看停止的作业状态,若想退出shell并终止停止的作业,可再次输入 exit 命令,或使用 kill 命令发送 SIGKILL 信号终止作业。

另外, Ctrl+D 组合键会向shell的标准输入发送 EOF 字符,输入数据流时可用于指示数据结束。若不输入数据直接使用 Ctrl+D ,会导致shell终止,若是登录shell,会自动注销系统。

6.4 作业控制

使用 Ctrl+Z 组合键停止作业后,可对其进行杀死或重启操作,重启停止的进程需要发送 SIGCONT 信号。启动、停止、杀死和恢复作业的功能称为作业控制,可使用相关命令查看和控制shell中运行的作业。

查看作业 :关键命令是 jobs 命令,可查看shell当前处理的作业。例如:

$ cat test2.sh
#!/bin/bash
# testing job control

echo "This is a test program $$"
count=1
while [ $count -le 10 ] ; do
    echo "Loop #$count"
    sleep 10
    count=$[ $count + 1 ]
done
echo "This is the end of the test program"
$ ./test2.sh
This is a test program 29011
Loop #1

[1]+  Stopped                 ./test2.sh
$ ./test2.sh > test2.sh.out &
[2] 28861
$
$ jobs
[1]+  Stopped                 ./test2.sh
[2]-  Running                 ./test2/sh >test2.shout &
$

jobs 命令使用一些不同的命令行参数,如下表所示:
| 参数 | 描述 |
| — | — |
| -l | 列出进程的PID和作业号 |
| -n | 仅列出自上次shell通知后状态发生变化的作业 |
| -p | 仅列出作业的PID |
| -r | 仅列出正在运行的作业 |
| -s | 仅列出已停止的作业 |

作业输出中的 + 号表示默认作业,若作业控制命令未指定作业号,将引用该作业; - 号表示当前默认作业处理完成后将成为默认作业的作业。任何时候,shell中只有一个带 + 号和一个带 - 号的作业。

深入探索Bash脚本部署与自动化作业

7. 作业控制的深入理解

作业控制在Bash脚本的运行管理中起着至关重要的作用,它可以让我们更加灵活地掌控脚本的执行。

7.1 作业状态转换

作业在运行过程中会有不同的状态,如运行、停止、终止等。我们可以通过不同的操作来改变作业的状态。
- 运行到停止 :使用 Ctrl+Z 组合键可以将正在运行的作业暂停,使其进入停止状态。例如上述提到的 ./test2.sh 脚本,在运行过程中按下 Ctrl+Z ,脚本就会停止,系统会显示作业号和停止信息。
- 停止到运行 :要将停止的作业重新启动,可以使用 fg (前台运行)或 bg (后台运行)命令。例如,若要将作业号为 1 的停止作业在前台运行,可以输入 fg 1 ;若要在后台运行,则输入 bg 1 。
- 作业的终止 :可以使用 kill 命令向作业发送信号来终止作业。如前面提到的 kill -9 20605 ,就是向PID为 20605 的作业发送 SIGKILL 信号,强制终止该作业。

7.2 作业控制的流程图
graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px

    A([开始运行作业]):::startend --> B(作业运行中):::process
    B --> C{是否需要暂停?}:::decision
    C -->|是| D(按下Ctrl+Z):::process
    D --> E(作业停止):::process
    E --> F{是否继续运行?}:::decision
    F -->|是| G{前台还是后台?}:::decision
    G -->|前台| H(fg 作业号):::process
    G -->|后台| I(bg 作业号):::process
    H --> B
    I --> B
    C -->|否| J{是否需要终止?}:::decision
    J -->|是| K(kill -信号 作业PID):::process
    K --> L([作业终止]):::startend
    J -->|否| B
    F -->|否| L
8. 脚本运行的优化策略

在实际使用中,为了提高脚本的运行效率和稳定性,我们可以采取一些优化策略。

8.1 资源管理
  • 内存管理 :Bash脚本在运行过程中会占用一定的内存资源。对于一些大型脚本或需要处理大量数据的脚本,要注意内存的使用情况。可以通过优化变量的使用、避免不必要的循环和递归等方式来减少内存的占用。
  • CPU使用 :如果脚本中有一些耗时的操作,如大量的数学运算或文件处理,可以考虑将这些操作放在后台运行,避免占用过多的CPU资源,影响其他任务的执行。
8.2 错误处理

在脚本中添加错误处理机制可以提高脚本的稳定性。例如,使用 set -e 命令可以让脚本在遇到错误时立即终止,避免错误继续传播。同时,可以使用 try-catch 类似的结构来捕获和处理特定的错误。以下是一个简单的示例:

#!/bin/bash
set -e
function main() {
    # 尝试执行命令
    command_that_might_fail
    echo "命令执行成功"
}
# 捕获错误
main || {
    echo "命令执行失败,进行错误处理"
    # 可以在这里添加具体的错误处理逻辑
}
9. 脚本的监控与日志记录

为了更好地了解脚本的运行情况,我们可以对脚本进行监控并记录日志。

9.1 监控脚本的运行状态

可以使用 ps 命令和 top 命令来监控脚本的运行状态。 ps 命令可以查看系统中所有进程的信息,通过过滤可以查看特定脚本的运行情况。 top 命令可以实时显示系统中各个进程的资源使用情况,方便我们及时发现脚本是否存在异常。

9.2 日志记录

日志记录可以帮助我们追踪脚本的运行过程,便于排查问题。可以使用 echo 命令将关键信息输出到日志文件中。例如:

#!/bin/bash
log_file="script.log"
echo "脚本开始运行" >> $log_file
# 脚本的主要逻辑
for i in {1..10}; do
    echo "循环第 $i 次" >> $log_file
    sleep 1
done
echo "脚本运行结束" >> $log_file

这样,脚本的运行过程就会被记录在 script.log 文件中,方便后续查看和分析。

10. 总结

通过以上对Bash脚本部署与自动化作业的深入探讨,我们了解了脚本的编写、运行、控制和优化等方面的知识。从脚本的基本部署,包括Shebang行的使用、权限设置,到数据处理、逻辑实现等高级编程特性;从脚本的不同运行模式,如后台运行、无控制台运行,到作业控制、信号发送等管理手段;再到脚本运行的优化策略和监控日志记录,这些知识可以帮助我们更加高效、稳定地使用Bash脚本,提高工作效率,解决实际问题。在实际应用中,我们可以根据具体的需求和场景,灵活运用这些知识,让Bash脚本发挥更大的作用。

相关推荐

从零构建嵌入式开发环境:openEuler WSL下的ARM工具链自动化部署与生态融合实践

本文详细介绍了在openEuler WSL环境下构建ARM嵌入式开发环境的自动化实践方案。通过工具链自动部署、环境配置优化和CI/CD集成,解决了开发环境一致性问题,实现了Linux与Windows生态的高效融合,显著提升嵌入式团队协作和开发效率。

water的专栏 599

银河麒麟V10 x86/ARM64 双架构 .NET 8 部署对比:包管理器 vs 离线安装 3 种方案

本文详细对比了银河麒麟V10系统上x86/ARM64双架构下.NET 8的三种部署方案,包括包管理器安装、离线二进制部署和第三方脚本自动化方案。针对国产化环境特点,提供了从环境准备到性能优化的全流程指南,特别解析了ARM64架构的特殊配置和常见问题解决方案,帮助开发者高效完成ASP.NET Core应用的国产化迁移。

weixin_33957648的博客 330

macOS终端自动化部署Claude Code全攻略

终端环境下的智能编程助手部署涉及环境配置、依赖管理和性能优化等多个技术环节。通过自动化脚本实现标准化部署流程,可以显著提升开发效率。在macOS系统中,不同终端(如Terminal.app、iTerm2、Warp等)对ANSI渲染、内存管理和环境变量的处理方式存在差异,需要针对性优化。以Claude Code部署为例,采用pyenv、nvm等版本管理工具确保Python和Node.js版本兼容性,同时通过预加载技术和内存池配置提升启动速度。该方案特别针对Apple Silicon芯片进行了优化,解决了90%

weixin_33739541的博客 312

记录一次在PowerShell下进入VC编译环境的探索过程

前言 为了实现 gitlab CI 自动化构建功能,需要用到 gitlab-runner,在 windows + vc 的场景下需要用到 gitlab-runner for windows。其最终原理是在 powershell 环境下执行 powershell 脚本。 众所周知,大部分通过命令行编译VC项目的过程都需要先初始化VC的工作环境(用cmake构建的除外),通常是通过开始菜单中的 “...

wuqiu的专栏 4013

Mac本地部署DeepSeek V4 Flash:量化压缩与ARM64优化实战

模型量化作为深度学习模型压缩的核心技术,通过降低权重和激活值的数值精度,在保持模型性能的同时显著减少存储需求和计算开销。其原理是将高精度浮点数转换为低精度整数表示,如从FP16转换为INT8或INT4,从而在边缘设备和消费级硬件上实现高效推理。这项技术的价值在于打破了硬件限制,使得大型语言模型能够在本地环境中运行,保障数据隐私并降低长期使用成本。在应用场景上,特别针对ARM64架构的Mac设备,结合llama.cpp等优化框架,可以实现大模型的本地化部署。本文以DeepSeek V4 Flash模型为例,详

weixin_34355559的博客 638

MySQL自动化配置工具开发:探索如何用脚本实现MySQL一键安装与配置,提升运维效率

通过开发MySQL自动化配置工具,可以显著提升运维效率,减少人为错误。本文提供的脚本和配置参数列表可直接用于实际生产环境,同时也为后续的功能扩展(如备份恢复、监控告警)奠定了基础。希望本文能为技术博主和研究生们提供有价值的参考!

专注于编程、AI、人工智能等多个领域内容研究和分析 420

在树莓派上通过nginx安装ownCloud的bash自动化脚本

Bash(Bourne Again SHell)是Unix和Linux系统中常用的命令行解释器,它提供了一个与用户交互的环境,并允许执行命令和编写脚本。作为程序员和系统管理员,熟练掌握Bash脚本可以显著提高工作效率,实现复杂任务的自动化。树莓派(Raspberry Pi)是一款由树莓派基金会开发的单板计算机,自2012年首次发布以来,它已经经历了多次迭代和升级。树莓派最初的设计目的是为教育机构提供一种低成本、高效率的学习和教学工具,以便学生学习计算机编程和电子技术。

weixin_42510243的博客 882

LLC谐振变换器恒压恒流双竞争闭环控制simulink仿真(附说明文档)

内容概要:本资源是一套面向电力电子与智能控制领域的综合性科研仿真资料合集,核心聚焦于LLC谐振变换器的恒压恒流双竞争闭环控制策略设计与Simulink建模仿真实现,涵盖半桥LLC、双向全桥LLC等拓扑结构的调频闭环仿真,并提供详尽的说明文档与PPT辅助材料。资源体系不仅深入呈现LLC变换器的动态响应与控制逻辑,还扩展至双有源桥(DAB)变换器的软开关协同优化、最小应力控制、EPS调制策略及新扩展移相角优化等前沿技术,同时集成三相PWM整流器在电网不平衡条件下的功率平衡控制、VOC+SVPWM双闭环控制等典型应用场景。此外,资源包涵盖状态估计(如EKF、UKF、PF)、微电网经济调度、卡尔曼滤波融合、神经网络控制、PID优化、储能系统管理等多个交叉方向,特别强调对顶级EI期刊研究成果的高精度复现,旨在帮助科研人员快速掌握先进控制算法的核心思想与仿真实现方法。; 适合人群:电气工程、自动化、电力电子、新能源科学与工程等相关专业的硕士博士研究生、高校科研人员,以及从事新能源变换器、智能电网、电动汽车、微电网系统研发的工程技术人员。; 使用场景及目标:① 深入理解LLC与DAB变换器的闭环控制机理,掌握恒压恒流切换、软开关实现与损耗优化方法;② 利用Simulink平台构建复杂电力电子系统模型,开展动态性能分析与控制器参数整定;③ 复现高水平期刊论文中的先进控制策略,提升科研创新能力与论文发表竞争力;④ 支持毕业设计、科研课题、项目申报及工程原型开发中的仿真验证环节。; 阅读建议:建议结合提供的完整资源目录循序渐进学习,优先研读标注“顶级EI复现”的案例以获取权威方法参考,配合MATLAB/Simulink动手搭建模型,重点关注控制框图设计、调制逻辑实现与仿真结果对比,深入理解算法背后的物理意义与数学推导过程。

ANSYS二次开发:Python和ANSYS进行交互操作(PyAnsys库,DPF)

🎈ANSYS二次开发:APDL开发入门准备🎈- 🎈ANSYS二次开发:后处理使用APDL命令流解析结果文件🎈 🎈ANSYS二次开发:Python解析ANSYS结果文件(PyAnsys库)🎈 🎈ANSYS二次开发:Python操作ANSYS(PyAnsys库,PyDPF)🎈 文章目录1、简介2、安装2.1 ansys-mapdl-core2.2 pyaedt2.3 ansys-dpf-core2.4 ansys-dpf-post2.5 ansys-mapdl-reader2.6 G...

爱看书的小沐 2万+

浊音/清音/爆破音的时域及频域特性

第一周作业 浊音/清音/爆破音的时域及频域特性 思路:使用Audacity进行录制,时域部分将音频放大观察波形规律,频域部分生成并进行频谱分析。 (1)浊音U 时域分析: 时域表现为短周期性,波形比较规律。 频域分析: 频域上表现为频率集中在低频区域,共振峰较为明显,短时能量较高。 (2)清音S 时域分析: 时域波形没有周期性,整体振幅小于浊音。 频域分析: 频域波形平缓,无共振峰,能量比较集中。 (3)爆破音t 时域分析: 脉冲波,更为尖锐,整体上振幅降低。 频域分析: 没有像浊音一样的共振

Leylaaaa的博客 1228

Android HWC硬件合成器实战:从SurfaceFlinger到显示驱动的完整流程解析

本文深入解析Android HWC硬件合成器从SurfaceFlinger到显示驱动的完整流程,揭示HWC如何优化图形性能并降低功耗。通过实战案例和调试技巧,帮助开发者掌握硬件加速的图层混合技术,提升移动设备的显示效率。

gaochao的博客 494

基于YOLOv5/v8/v10的答题卡填涂识别与评分系统(附数据集+UI界面+完整代码)

在教育信息化的大背景下,传统的手工阅卷方式正在被智能化技术所取代。答题卡识别作为标准化考试的核心环节,其准确率和效率至关重要。本文将详细介绍如何利用YOLO系列目标检测算法(YOLOv5、YOLOv8、YOLOv10)构建一个答题卡填涂识别与评分系统。文章从数据集的制作与标注开始,逐步深入到模型的训练、评估与对比,最后基于PyQt5设计了一个用户友好的桌面端UI界面,实现了从图像输入到得分输出的全流程自动化。

YOLO 634

使用 Simulink + Simscape Electrical 搭建一个三相PWM整流器模型

本文详细介绍了使用Simulink搭建三相PWM整流器模型的方法,重点讲解了SVPWM调制策略的实现过程。内容包括系统结构设计、主电路搭建、SVPWM算法实现、双闭环控制器设计以及仿真分析。通过MATLAB Function Block实现SVPWM核心算法,并给出优化建议,如死区补偿、开关频率优化等。该教程为电力电子领域工程师提供了实用的建模与仿真方法,可用于新能源并网、电机驱动等应用场景的研发与优化。

amy_mhd的博客 195

Vue+OpenLayers6一本通,OpenLayers6完整教程大全,OpenLayers6全知全解,OpenLayers6入门、实战、扩展进阶三合一专栏目录汇总

Gis开发入门,OpenLayers、Leaflet、Maplibre-gl和Cesiumjs地图引擎介绍以及几种地图服务vms、vmts介绍OpenLayers介绍,相比较其他地图引擎有什么优点OpenLayers7.x版本和6.x版本有什么区别,是否需要升级到OpenLayers7版本?OpenLayers6实战:OpenLayers创建自定义控件,以创建一个地图复位控件为例OpenLayers6实战,OpenLayers创建自定义鹰眼控件,自定义鹰眼控件样式,调整鹰眼控件位置、大小、文字和按钮等样式。

GIS技术方向,GIS地图技术分享(GIS入门、Openlayers教程、Leaflet教程),做最好的GIS地图开发教程。关注博主公众号:eguid 2198

Allegro172版本多人协同在线设计操作指导

首先用户需要在同一个局域网下,并且Allegro172的版本必须一致,比如都是S082的版本。另外一个用户同样打开相同版本的172,选择Symphony Team design。Allegro升级到172版本,可以支持多人协同设计,并且实时同步,具体操作如下。协同模式下,不能直接保存文件,需要另存版本,注意时常保存文件,以免丢失数据。第一个用户打开PCB,选择Symphony Team design。等待一会出现如下窗口,表示已经共享成功了,并且记下IP地址。出现一个窗口,输出开共享用户的IP地址。

weixin_54787054的博客 4952

习题加餐4. 冒险者工会

这个问题通过贪心算法解决,展示了贪心算法在解决一些优化问题中的强大能力。关键在于如何识别贪心选择的性质,并通过数学证明确保这种方法能够达到全局最优解。通过对问题的深入理解和逻辑推理,我们可以设计出有效的算法来解决问题,同时也需要注意代码实现中的细节,如排序和双指针的使用,以确保算法的效率和正确性。贪心算法的应用这个问题展示了贪心算法在实际问题中的应用。贪心算法通过在每一步选择当前最优的解决方案,期望最终达到全局最优解。该问题中,每次选择能力最接近但足以完成最难任务的冒险者,就是贪心选择的体现。

tang7mj的博客 1349

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: 7、微观层面测量与可视化学生参与度的新方法
下一篇: 1、人工智能驱动5G移动通信迈向6G
lambda
博客等级 码龄23年 49粉丝 1303原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值