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 编程的同学有所帮助,如有错误或不足之处,欢迎在评论区留言指正。