Shell中的变量
2026/7/29 2:08:37 网站建设 项目流程

1、变量命名

  • 可以使用数字,字母,和下划线给变量命名
  • 不能用数字开头
  • 如果给同一个变量赋值多次,最后一次赋值会覆盖之前的值
var1=value#普通赋值方法var2='value'var3="hello world"#当变量的值(字符串)中包含任何空白符时,加双引号var4="$(ls-l)"#将命令结果赋值给变量

注意:=前后不要有空格(区别于其他语言,Shell对空格检查严格)

2、变量的使用
使用一个定义过的变量,只要在变量名前面加美元符号$即可,如:

str="Hello"echo$strecho${str}

当需要标明变量的边界时,需要加上花括号。

skill="Java"echo"I am good at${skill}Script

如上,如果不加花括号会被认为是$skillScript,导致出现问题

3、变量作用域

  1. 局部变量
    局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  2. 环境变量
    所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  3. shell变量
    shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

4、内置变量
shell内置的环境变量是所有的shell程序都可以使用的变量,环境变量会影响所有的脚本的执行结果。

变量说明
PATH命令的搜索路径,以冒号作为分隔符
HOME用户的家目录的路径,是cd命令的默认参数
COLUMNS命令行编辑模式下可使用命令的长度
HISTFILE命令历史的文件路径
HISTFILESIZE命令历史中包含的最大行数
HISTSIZEhistory命令输出的记录数
LOGNAME当前用户的名字
SHELL当前使用的shell
PWD当前的工作目录

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过$𝑛的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数等。注意,若参数数量超过10,需要使用${10}的形式获取。

参数解释
$#命令行的参数的个数
$0当前脚本的名称,$2表示脚本的第二个参数……
$*以“参数1 参数2 参数3”的形式返回所有参数的值
$@以“参数1”“参数2”“参数3”的形式返回所有参数的值
$$返回本程序的进程ID(PID)
$?返回本程序的结束状态码

5、取消变量

unsetxxx#将之前定义的变量xxx删除,后面将不在有效。

如果直接关闭终端进程,也可以达到取消变量的效果。

6、变量扩展语法

形式说明
${var}变量本来的值
${var:-word}如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。
${var:=word}如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。
${var:?message}如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。如果在Shell脚本中发生了这个替换,那么脚本将停止运行。
${var:+word}如果变量 var 被定义,那么返回 word,但不改变 var 的值。

7、字符串操作
计算长度

string="abcd"echo${#string}#输出 4

提取子串

string="alibaba is a great company"echo${string:1:4}#输出liba

拼接字符串

your_name="qinjx"greeting="hello, "$your_name" !"greeting_1="hello,${your_name}!"echo$greeting$greeting_1

查找字符串

string="alibaba is a great company"echo`exprindex"$string"is`
text="read phy addr: 0x1f reg: 0x1f value : 0x0"str="value : "value=${text#*$str}#打印value的值echo"$value"0x0

替换字符

string="123123"echo${string/3/0}#用0替换第一个遇见的3echo${string//3/0}#用0替换串中所有3

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询