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

Linux学习篇12——Shell编程入门与Shell编程变量详解大全

引言

最近开始系统学习Linux Shell编程部分,关于Linux基础指令的博客更新就先告一段落了,这一块的更新已经结束,下面会继续跟新Linux系统的另一个模块——Shell编程模块,为了巩固自己的学习成果,同时也为了之后可以更方便快速的回顾知识,特此整理了这一块的知识。

作为Linux学习的第12篇,本篇主要总结了Shell编程的基本概念,基本语法注意事项以及Shell编程的变量介绍部分。如有不对的地方,还请大佬指正!!

1. Shell编程基础:什么是Shell编程与基本语法

1.1 Shell的定义

在 Linux 系统中,Shell 是用户与系统内核之间交互的桥梁,用于接受用户所给出的指令,并将其解释为内核能够理解的指令,最终完成相关的操作并返回结果给用户,平时所使用的 ls、cd等指令,也都是通过 Shell 来执行的。

Shell 编程,则是将一系列的 Shell 指令按照一定的语法规则组织到一个文件中,形成可执行性的脚本文件(其拓展名一般都以 .sh 结尾)。通过运行这个脚本文件,系统会按顺序执行其中的命令,从而实现自动化的任务处理。

1.2 为什么学习Shell编程

通过专栏之前的文章学习,已经掌握了基本的 Linux 系统的指令语法,那么将指令统一编写到一个文件中,就可以实现更多重复性的工作,比如日志分析、文件备份、系统监控等,完成自动化任务,提高工作效率。

如果要成为一名运维工程师,Shell编程是必备技能,能够快速完成服务器配置、故障排除等工作,高效完成系统管理任务。

1.3 Shell的基本语法规则

1.3.1 脚本创建

使用任意文本编辑器(如vim、touch)创建一个.sh文件。

脚本文件的第一行通常需要指定的解释器,格式为

#!/bin/bash.....代码逻辑.....

其中,#!被称为 "幻数",它告诉系统这个脚本需要使用/bin/bash来解释执行。bash是最常用的 Shell 解释器,除此之外还有sh、zsh等。 

1.3.2 注意事项
# 方式1:解释器直接执行
bash script.sh# 方式2:赋予权限后执行
chmod +x script.sh
./script.sh

大小写敏感:Shell 脚本是大小写敏感的,echo和Echo是不同的命令。

空格的使用:在变量赋值时,等号两边不能有空格,例如name="Tom"是正确的,name = "Tom"则会报错。

路径问题:执行脚本或在脚本中引用其他文件时,尽量使用绝对路径,避免因工作目录变化导致的错误。

特殊字符转义:当命令或字符串中包含$、"、'等特殊字符时,需要使用\进行转义,否则可能会被 Shell 误解。

1.3.3 Shell文件的执行

Shell文件的执行有两种方法。一种是通过bash解释器直接运行脚本内容,这种方法就不需要权限控制,而另一种是通过指明文件的目录地址运行脚本内容,这种方式会有权限控制,有对该脚本运行权限的用户才能运行该脚本。

# 方式1:解释器直接执行
bash script.sh# 方式2:赋予权限后执行
chmod +x script.sh
./script.sh

2. Shell变量深度解析

2.1 变量的定义与使用

在Shell编程中,变量定义的基本格式为 变量名=值,注意!!等号左右不能有空格。

name="Alice"
age=25

使用某个变量时,就必须在变量名前加上一个$美元符号。

echo $name  
# 输出变量name的值Aliceecho "My name is $name, and I am $age years old." 
# 在字符串中引用变量,结果为My name is Alice, and I am 25 years old.

 也可以使用${变量名}的形式,在变量名与其他字符相连时,这种方式可以避免歧义,例如:

fruit="apple"
echo "I like ${fruit}s."  # 输出"I like apples."

 2.2 变量的删除

使用unset命令可以删除变量,例如:

name="Bob"
echo $name  # 输出Bob
unset name
echo $name  # 变量被删除,无输出

2.3 变量的分类

2.3.1 脚本本地变量

本地变量是在当前 Shell 会话或脚本中定义的变量,仅在当前作用域内有效,但是在除当前的脚本外的脚本文件,就不起作用了。

可以看到在一个脚本中定义的变量,在另一个脚本中不起作用。

2.3.2 环境变量

环境变量是全局变量,不仅在当前 Shell 会话中有效,在其派生的子 Shell 中也能被访问。常用的环境变量有PATH(命令搜索路径)、HOME(用户主目录)、USER(当前用户名)等。

可以使用export命令将本地变量转换为环境变量。

查看环境变量可以使用echo命令,例如echo $PATH;查看所有环境变量可以使用env命令或者set命令。

2.3.3 位置参数变量 

位置参数变量用于接收传递给脚本或函数的参数,之前介绍过 Linux 系统所能执行的指令 ls、cd等其实都是一个Shell,所使用的 ls -选项,这里对应的选项就是所谓的参数,也就是位置参数变量。

主要包括:

  • $n:n为数字,$1表示第一个参数,$2表示第二个参数,以此类推,$0表示脚本本身的名称。
  • $#:表示参数的个数。
  • $*:表示所有参数的集合,将所有参数视为一个整体。
  • $@:表示所有参数的集合,将每个参数视为独立的个体。
#!/bin/bash
# 执行:./test.sh A B C
echo "脚本名: $0"     # 输出 ./test.sh
echo "第一个参数: $1" # A
echo "参数个数: $#"   # 3
echo "所有参数: $@"   # A B C
echo "所有参数: $*"   # A B C
 2.3.4 只读变量

使用readonly命令可以定义只读变量,只读变量定义后不能被重新赋值或删除,例如:

readonly pi=3.14159
echo $pi  # 输出3.14159
pi=3.14  # 尝试重新赋值,会报错
unset pi  # 尝试删除,会报错
2.3.5 预定义变量

预定义变量又称特殊变量,是由Shell 自动维护,用于存储一些特定的信息,也是Shell设计者事先已经定义好的变量,可以直接在Shell脚本中使用。

常用的有:

  • $?:上一条命令的退出状态码。0 表示命令执行成功,非 0 表示执行失败。
  • $$:当前 Shell 进程的 PID(进程 ID)。
  • $!:上一个后台运行命令的 PID。
echo "上一条命令的退出状态码:$?"  # 输出非0值为失败echo "当前进程PID:$$"echo "后台进程PID:$!"

2.4 变量的引号原则

  • 字符串用双引号 → "$var"(允许变量扩展)

  • 纯字符用单引号 → '$var'(原样输出)

 

可以看到变量在不同的引号是不一样的,当我们使用单引号时,只会原样输出,而双引号则会解析内容。

结语

本文总结了 Shell 编程的入门知识,包括 Shell 编程的概念、基本语法与注意事项,以及变量部分的核心内容,涵盖了变量的定义、使用、分类和基本操作。希望这篇博客能对正在学习 Shell 编程的同学有所帮助,如有错误或不足之处,欢迎在评论区留言指正。

http://www.dtcms.com/a/305355.html

相关文章:

  • C++ 枚举enum的使用详细总结
  • 信号上升沿时间与频谱分量的关系
  • 浏览器访问kerberos集群webUI详细配置
  • 在 Vue 中,如何在回调函数中正确使用 this?
  • 【时时三省】(C语言基础)指向指针数据的指针变量
  • 2025年中科院1区SCI-冬虫夏草优化算法Caterpillar Fungus Optimizer-附Matlab免费代码
  • 《汇编语言:基于X86处理器》第10章 结构和宏(3)
  • 【Dify】分享一篇之前部署过的过程
  • 机器学习算法—— K-近邻算法
  • MybatisPlus-核心功能
  • 【网络工程师软考版】网络安全
  • ROUGE-WE:词向量化革新的文本生成评估框架
  • 3D 工业相机解析:轴向、平面、重复、线性精度到底哪个更重要?
  • 【拓扑排序 最短路】P2149 [SDOI2009] Elaxia的路线|省选-
  • 爱普生L3219开机三灯同时闪报错031006故障分析
  • python的进程、线程、锁
  • SQL Server中的分页查询
  • Elasticsearch重点
  • 路径平滑优化算法--B样条(B-spline)路径平滑算法
  • 2025年八大OA系统综合评测:Kimi+DeepSeek专业推荐
  • U3D中的package
  • Python 程序设计讲义(27):字符串的用法——字符串的常用操作
  • 自组织粒子群优化算法(Self-Organizing Particle Swarm Optimization, SOPSO)求解Rastrigin函数
  • STM32CubeIDE新建项目过程记录备忘(一)
  • JSON:数据交换格式
  • 本地使用postman调试mcp接口
  • 力扣刷题(第一百零二天)
  • Level2可转换债券高频交易五档行情Tick级分钟历史数据深度解析
  • PDF 文档级脚本(Document Level Scripts)
  • SZU大学物理实验报告|光敏电阻