7.Shell 基础(从零开始学)
在开启一天的学习的时候先做好快照过程中如果出现意外的报错解决不了的就立即恢复快照作为初学者省时省力不要过于纠结哪里错了浪费时间1.变量定义和查看Linux 使用变量临时字符串值便于后续引用。变量值存储在当前会话内存中。变量名只能包含字母、数字、下划线。变量名不能以数字开头。shell中变量的类型一般不需要明确指明。# 变量定义 [fengkaicentos7 ~ 14:31:40]$ var1key1 [fengkaicentos7 ~ 14:35:48]$ echo $var1 key1 # 标准格式如下 [fengkaicentos7 ~ 14:36:09]$ declare var1key1 # 使用$引用变量值 [fengkaicentos7 ~ 14:36:23]$ echo $var1 key1 # 示例2 [fengkaicentos7 ~ 14:36:28]$ first_namekai [fengkaicentos7 ~ 14:37:12]$ last_namefeng [fengkaicentos7 ~ 14:37:36]$ echo $last_name $first_name feng kai # 使用多个空格效果一样 [fengkaicentos7 ~ 14:38:29]$ echo $last_name $first_name feng kai # 使用双引号保留多个空格 [fengkaicentos7 ~ 14:39:00]$ echo $last_name $first_name feng kai # 使用-和_分别对结果的影响_导致$last_name失效那如何使用_下划线呢 [fengkaicentos7 ~ 14:39:25]$ echo $last_name-$first_name feng-kai [fengkaicentos7 ~ 14:41:01]$ echo $last_name_$first_name kai # 使用{}限定变量范围这样_就不影响了 [fengkaicentos7 ~ 14:43:44]$ echo ${last_name}_$first_name feng_kai # 当前shell中所有变量 [fengkaicentos7 ~ 14:44:40]$ set ····· 有很多 ····· # set命令还会显示函数 [fengkaicentos7 ~ 14:44:40]$ set | grep first_name first_namekai # 取消变量定义 [fengkaicentos7 ~ 14:45:51]$ echo $first_name kai [fengkaicentos7 ~ 14:46:33]$ unset first_name [fengkaicentos7 ~ 14:48:00]$ echo $first_name # 定义变量时候转换变量大小写 [fengkaicentos7 ~ 14:48:02]$ declare -l nameFeng [fengkaicentos7 ~ 14:48:46]$ echo $name feng [fengkaicentos7 ~ 14:48:50]$ declare -u nameFeng [fengkaicentos7 ~ 14:48:58]$ echo $name FENG2.环境变量根据变量是否是用户定义:shell 环境内置变量设置shell的运行环境。用户自定义变量字面意思用户自己定义的变量也就是普通变量。部分shell环境变量如下环境变量名作用EDITOR默认编辑器HISTFILE历史文件位置HISTFILESIZE历史命令个数HISTTIMEFORMAT历史命令时间格式PS1命令行提示符LANGshell 环境语言PATH命令搜素路径HOME当前用户家目录USER当前用户PWD当前shell路径完整的shell 环境变量参考bash1。2.1 EDITOR注意权限[rootcentos7 /etc 14:52:38]# visudo # 以上命令默认使用vi 编辑文件/etc/sudoers不显示语法高亮[rootcentos7 /etc 14:55:33]# export EDITOR/bin/vim # 或者 [rootcentos7 /etc 14:56:03]# EDITOR/bin/vim vim vimdiff vimtutor [rootcentos7 /etc 14:56:03]# EDITOR/bin/vim visudo # 以上命令使用vim 编辑文件/etc/sudoers显示语法高亮2.2 LANG注意权限# 由中文切换为英文显示时间 [rootcentos7 /etc 14:56:58]# date 2026年 07月 17日 星期五 14:57:52 CST [rootcentos7 /etc 14:57:52]# export LANGen_US.utf8 [rootcentos7 /etc 14:58:17]# date Fri Jul 17 14:58:20 CST 2026 # 由英文切换为中文显示时间 [rootcentos7 /etc 14:58:20]# export LANGzh_CN.utf8 [rootcentos7 /etc 14:59:30]# date 2026年 07月 17日 星期五 14:59:31 CST常见 LANG代码英语en_US.utf8简体中文zh_CN.utf8繁体中文zh_TW.utf82.3 PATH注意权限# 查看系统命令的路径 [rootcentos7 /etc 15:03:28]# echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/fengkai/.local/bin:/home/fengkai/bin # 将ls的系统命令转移到当前文件下面要注意当前文件是/etccd到初始目录下 [rootcentos7 /etc 15:09:01]# cd [rootcentos7 ~ 15:03:37]# mv /usr/bin/ls . [rootcentos7 ~ 15:05:14]# ls bash: ls: 未找到命令... 相似命令是 lz # 我们刚刚把ls移动到了/root的根目录下通过/root/ls可以执行ls命令查看 [rootcentos7 ~ 15:09:05]# /root/ls anaconda-ks.cfg ls 公共 视频 文档 音乐 initial-setup-ks.cfg test.txt 模板 图片 下载 桌面 # 看不到ls的位置 [rootcentos7 ~ 15:12:52]# which ls alias lsls --colorauto # 将/root目录追加到PATH中并查看当前的PATH对比之前的多了/root这样ls就可以执行了,which也找到了对应的位置 [rootcentos7 ~ 15:13:12]# export PATH$PATH:/root [rootcentos7 ~ 15:14:25]# ls anaconda-ks.cfg ls 公共 视频 文档 音乐 initial-setup-ks.cfg test.txt 模板 图片 下载 桌面 [rootcentos7 ~ 15:14:28]# echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/fengkai/.local/bin:/home/fengkai/bin:/root [rootcentos7 ~ 15:14:44]# which ls alias lsls --colorauto /root/ls # 将ls移动到原来 [rootcentos7 ~ 15:17:41]# mv ./ls /usr/bin [rootcentos7 ~ 15:17:45]# which ls alias lsls --colorauto /usr/bin/ls2.4 PS1注意权限[fengkaicentos7 ~]$ echo $PS1 [\u\h \W]\$ [fengkaicentos7 ~]$ man bash man bash 搜索PROMPTING # 扩展说明 \h 主机名第一个 . 之前的部分 \H 主机名 \n 新行符 \t 当前时间采用 24小时制的 HH:MM:SS 格式 \T 当前时间采用 12小时制的 HH:MM:SS 格式 \ 当前时间采用 12小时制上午/下午 (am/pm) 格式 \A 当前时间采用 24小时制上午/下午格式 \u 当前用户的用户名 the username of the current user \w 当前工作目录 \W 当前工作目录的基本部分 \$ 如果有效 UID 是 0就是 #, 其他情况下是 $ # 提示符由[fengkaicentos7 ~]$变为了hello [fengkaicentos7 ~]$ PS1hello hello # 敲如下命令提示符又恢复回来了 PS1[\u\h \W \t]\$ [fengkaicentos7 ~ 16:06:35]$ # 显示完整工作目录 [fengkaicentos7 ~ 16:08:16]$ PS1[\u\h \w \t]\$ [fengkaicentos7 ~ 16:08:20]$ cd /usr/share/doc [fengkaicentos7 /usr/share/doc 16:08:29]$彩色提示符# 代码 # \[\e[0;30m\]黑色 # \[\e[0;31m\]红色 # \[\e[0;32m\]绿色 # \[\e[0;33m\]黄色 # \[\e[0;34m\]蓝色 # \[\e[0;35m\]紫色 # \[\e[0;36m\]青色 # \[\e[0;37m\]白色 # \[\e[0m\]恢复默认颜色示例# root权限下vim /etc/bashrc 文件末尾添加一行 [rootcentos7 fengkai]# vim /etc/bashrc PS1[\[\e[91m\]\u\[\e[0m\]\[\e[93m\]\[\e[0m\]\[\e[92;1m\]\h\[\e[0m\]\[\e[94m\] \W\[\e[0m\] \[\e[35m\]\t\[\e[0m\]]\[\e[93m\]\$\[\e[0m\] # 或者 echo 追加 echo PS1[\[\e[91m\]\u\[\e[0m\]\[\e[93m\]\[\e[0m\]\[\e[92;1m\]\h\[\e[0m\]\[\e[94m\] \W\[\e[0m\] \[\e[35m\]\t\[\e[0m\]]\[\e[93m\]\\\$\[\e[0m\] /etc/bashrc # 注意 echo追加的PS1与直接vim的是不一致的体现在\\\$。推出登陆并重新连接之后提示符就有颜色显示了2.5 HISTTIMEFORMAT控制历史命令时间格式。通过设置该变量可以在执行history命令时显示每条历史命令的执行时间。常用配置示例上图最后的一行就是HISTTIMEFORMAT%F %T 显示年月日时分秒如2024-10-24 15:30:45bash export HISTTIMEFORMAT%F %T 效果history输出会类似1000 2024-10-24 15:30:45 ls -l显示更简洁的时间格式如10-24 15:30bash export HISTTIMEFORMAT%m-%d %H:%M HISTTIMEFORMAT支持的常见时间格式符%F完整日期年 - 月 - 日如2024-10-24%T完整时间时分: 秒如15:30:45%Y四位年份如2024%m两位月份01-12%d两位日期01-31%H24 小时制小时00-23%M分钟00-59%S秒00-593.变量持久化保存login shell 启动的时候会按顺序加载以下配置文件中配置 1. /etc/profie限定所有用户设置操作系统级别。 2. \~/.bash_profile只限定特定用户 3. ~/.bashrc只限定特定用户 4. /etc/bashrc限定所有用户nologin shell启动的时候会按顺序加载以下配置文件中配置 1. ~/.bashrc只限定特定用户例如限定laoma用户 /home/laoma/.bashrc。 2. /etc/bashrc限定所有用户# login shell 示例 [rootcentos7 fengkai 16:34:14]# echo export LANGen_US.utf8 /etc/profile # 验证 Connecting to 10.1.8.10:22... Connection established. To escape to local shell, press CtrlAlt]. Last login: Fri Jul 17 16:32:35 2026 from 10.1.8.1 # nologin shell 示例 [rootcentos7 fengkai 16:46:35]# echo export EDITORvim /etc/bashrc # 验证 [fengkaicentos7 ~ 16:50:49]$ bash [fengkaicentos7 ~ 16:53:19]$ echo $EDITOR vim4.命令替换格式如下$(COMMAND)COMMAND效果如下# 查看星期几 [fengkaicentos7 ~ 16:59:12]$ echo Today is date %A Today is 星期五 # 查看现在的时间 [fengkaicentos7 ~ 16:59:15]$ echo The time is $(date %M) minutes past $(date %l%p). The time is 59 minutes past 4下午 #新建一个带日期的文件 [fengkaicentos7 ~ 17:00:01]$ touch file-$(date %Y%m%d) # 或者 [fengkaicentos7 ~ 17:00:17]$ touch file-date %Y%m%d [fengkaicentos7 ~ 17:00:27]$ ls allinone file- file-3 passwd.list profile.sh 视频 音乐 bashrc file-1 file.tar passwd.man testfile 图片 桌面 dhcpd.conf file-2 passwd2.list passwd.stdout 公共 文档 ext4.man file-20260717 passwd.all profile 模板 下载如何计算 12..99100的值# 计算数值 [fengkaicentos7 ~ 17:00:28]$ echo $[123] 6 # 获取序列 [fengkaicentos7 ~ 17:03:59]$ echo {1..3} 1 2 3 # 替换空格为号 [fengkaicentos7 ~ 17:04:17]$ echo {1..3} | tr 123 # 计算结果直接带入会出现错误需要用$()将上面的命令填入 [fengkaicentos7 ~ 17:04:35]$ echo $[echo {1..3} | tr ] -bash: echo 1 | tr : 表达式中有语法错误 错误符号是 1 | tr [fengkaicentos7 ~ 17:05:32]$ echo $[$(echo {1..3} | tr )] 6 [fengkaicentos7 ~ 17:05:48]$ echo $[$(echo {1..100} | tr )] 50505.保留字符字面含义许多字符在bash中有特殊的意义忽略这些含义使用引号和转义字符。\取消后面单个字符的特殊含义。双引号()压缩shell扩展含义不压缩命令替换、变量替换和转义字符\。单引号()可以压缩单引号内部的所有字符含义。# \ 示例将$PATH直接输出 [fengkaicentos7 ~ 17:05:57]$ echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/fengkai/.local/bin:/home/fengkai/bin [fengkaicentos7 ~ 17:08:12]$ echo \$PATH $PATH # 示例不加*会将所有文件显示两次加上就会正常 [fengkaicentos7 ~ 17:11:05]$ usernamefengkai [fengkaicentos7 ~ 17:12:30]$ echo * welcome $username to my home on $(date %F) * bashrc dhcpd.conf 公共 模板 视频 图片 文档 下载 音乐 桌面 welcome fengkai to my home on 2026-07-17 bashrc dhcpd.conf 公共 模板 视频 图片 文档 下载 音乐 桌面 [fengkaicentos7 ~ 17:12:34]$ echo * welcome $username to my home on $(date %F) * * welcome fengkai to my home on 2026-07-17 * # \和 示例将$username直接输出 [fengkaicentos7 ~ 17:13:19]$ echo * welcome \$username to my home on $(date %F) * * welcome $username to my home on 2026-07-17 * # 示例不论加不加\$username直接输出加了\连同\一起输出 [fengkaicentos7 ~ 17:13:52]$ echo * welcome $username to my home on $(date %F) * * welcome $username to my home on $(date %F) * [fengkaicentos7 ~ 17:14:24]$ echo * welcome \$username to my home on $(date %F) * * welcome \$username to my home on $(date %F) *思考# 下面命令的输出 [fengkaicentos7 ~ 17:17:54]$ echo \ [fengkaicentos7 ~ 17:17:45]$ echo \\ \ # 最终输出一个 \ 符号 [laomacentos7 ~]$ echo \\\ # 最终输出一个 \ 符号 [fengkaicentos7 ~ 17:18:27]$ echo \\\\ \\ ## 最终输出一个 \\ 符号 # 下面命令的输出Let\为一段s go为一段加起来如下显示 [fengkaicentos7 ~ 17:19:28]$ echo Let\s go Let\s go # 使用 echo 一次性在文件中输入多行字符串 [fengkaicentos7 ~ 17:20:41]$ echo hello1 hello2 hello3hello.txt [fengkaicentos7 ~ 17:22:46]$ cat hello.txt hello1 hello2 hello36.综合练习1.变量名规范。Linux 使用变量临时字符串值便于后续引用。变量值存储在当前会话内存中。变量名只能包含字母、数字、下划线。变量名不能以数字开头。2.变量如何定义和查看举例说明。定义变量xxxxxxfengkai查看变量xxxecho $xxx3.如何扩展变量范围举例说明。echo $xxx $yyy4.解释以下环境变量作用举例说明。 - EDITOR - PS1 - LANG - PATHEDITOR:设置编辑器通过visudo命令设置显示是否高亮PS1:命令提示符设置通过PS1[\u\w\t....参数]还可以设置颜色LANG:系统语言选择主要为英文和中文PATH:主要是系统命令的相关路径5.命令替换作用举例说明。主要为$(xxx)和xxx两种echoe $(date %A)或者date %A6.解释以下符号作用举例说明。 - 转义符号\ - 双引号 - 单引号\符号取消后面单个字符的特殊含义举例:echo $PATH显示系统命令的路径echo \$PATh显示为$PATH符号:压缩shell扩展含义不压缩命令替换、变量替换和转义字符\举例:echo * \$PATH显示为* $PATH*被压缩显示\没有符号:可以压缩单引号内部的所有字符含义举例:echo * \$PATH显示为* \$PATH*和\都被压缩显示出来了

相关新闻

Cargo 与自定义链接器:mold 和 lld 能让链接阶段快多少的实测数据

Cargo 与自定义链接器:mold 和 lld 能让链接阶段快多少的实测数据

Cargo 与自定义链接器:mold 和 lld 能让链接阶段快多少的实测数据专栏: 技术 / Cargo / 编译优化一、链接:编译管线中最被忽视的性能黑洞 cargo build 最慢的不是编译,是链接。我是在一个 100 crate 的中型项目里意识到这一点的:R…

2026/7/23 4:01:10 阅读更多 →
高性能2.4G无线收发芯片推荐:芯岭技术XL24系列2.4G收发芯片

高性能2.4G无线收发芯片推荐:芯岭技术XL24系列2.4G收发芯片

深圳市芯岭技术有限公司推出的XL24系列芯片,以差异化的产品定位,精准覆盖了从简单遥控到复杂外设的多样化需求。XL2400T、XL2417D、XL2417U三款定位清晰的芯片,提供了从基础收发到高性能SoC再到带USB的SOC芯片解决方案。它们都有着优秀的射频…

2026/7/21 15:44:34 阅读更多 →
AI Agent时代的流程自动化:RPA、Workflow与LLM协同架构实践

AI Agent时代的流程自动化:RPA、Workflow与LLM协同架构实践

前言 过去十年,企业流程自动化主要依赖RPA(Robotic Process Automation,机器人流程自动化)。 从财务报销、订单处理到数据录入,大量重复性工作被RPA取代,帮助企业显著降低人工成本。 然而随着业务复杂度不断…

2026/7/21 16:45:40 阅读更多 →

最新新闻

Qwen3.1-B大模型全参数调优指南与生产部署实践

Qwen3.1-B大模型全参数调优指南与生产部署实践

1. 项目背景与核心价值在开源大模型生态中,Qwen系列一直保持着快速迭代和技术领先。这次拿到的qwen3.1-B版本,相比前代在数学推理和代码生成能力上有显著提升。但官方发布的基准测试结果都是在理想环境下得出的,实际业务场景中要发挥其最大潜…

2026/7/24 12:42:22 阅读更多 →
旗讯OCR:金融医疗场景下的智能文档解析方案

旗讯OCR:金融医疗场景下的智能文档解析方案

1. 项目背景与核心价值纸质文档数字化一直是企业办公场景中的刚需。从财务票据处理到合同管理,从档案电子化到报表分析,每天都有海量纸质文件需要转化为可编辑、可检索的电子数据。传统OCR技术虽然能解决基础的文字识别问题,但在实际业务中仍…

2026/7/24 12:42:22 阅读更多 →
AI如何助力毕业论文写作:Paperzz智能写作功能解析

AI如何助力毕业论文写作:Paperzz智能写作功能解析

1. 项目背景与核心价值每到毕业季,数以百万计的高校学生都会面临毕业论文这座"大山"。从选题开题到文献综述,从数据分析到论文撰写,整个过程往往伴随着巨大的压力和焦虑。特别是在最后冲刺阶段,很多同学会发现自己的写作…

2026/7/24 12:42:22 阅读更多 →
金融级银行卡号识别技术:从OCR原理到工程实践

金融级银行卡号识别技术:从OCR原理到工程实践

1. 项目背景与核心价值银行卡号识别是金融科技领域的基础性技术,每天影响着数亿级别的交易流程。传统OCR技术在处理银行卡这种特定场景时面临三大痛点:卡面材质反光、数字字体特殊、背景干扰复杂。我在某第三方支付公司参与风控系统建设时,曾…

2026/7/24 12:42:22 阅读更多 →
Chrome插件网络请求拦截:webRequest API详解与实战

Chrome插件网络请求拦截:webRequest API详解与实战

Chrome插件网络请求拦截:webRequest API详解与实战 摘要:本文详细介绍Chrome插件的webRequest API,重点讲解网络请求拦截、修改、监听等核心技术,并以MuxDesk视频下载为例展示实际应用。 一、引言 1.1 背景介绍 webRequest API是…

2026/7/24 12:42:22 阅读更多 →
智能仓储物流硬件越来越同质化,为什么真正拉开差距的是软件大脑?

智能仓储物流硬件越来越同质化,为什么真正拉开差距的是软件大脑?

在制造业智能仓储领域,堆叠更多AGV、立体库和输送线并不能自动换来高效率。真正决定仓库能否精准匹配产线节拍、拉升库存周转率、实现拉动式JIT配送的,是隐藏在所有硬件背后的软件大脑。 这完全呼应了特斯拉“系统为王”的产业判断——硬件只是可替代的执…

2026/7/24 12:41:22 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻