一、定义变量
在Shell中,用一个变量来存储一个字符串或数字。定义一个变量需要按照以下格式:
variable_name=value
其中,variable_name表示变量名称,value表示变量值。变量名需以字母或下划线开头。变量名中允许使用字母、数字和下划线。变量名区分大小写。
在Shell中定义变量的示例:
str="hello world"
num=100
echo "str="$str
echo "num="$num
输出结果如下:
str=hello world
num=100
二、通过命令行参数传递参数
在Shell脚本中,可以通过命令行参数传递参数。使用特殊变量$0、$1、$2、$3……来获取命令行参数。其中,$0表示脚本名称,$1表示第1个参数,$2表示第2个参数,以此类推。
在Shell中通过命令行参数传递参数的示例:
#!/bin/sh
echo "脚本名称:$0"
echo "第1个参数:$1"
echo "第2个参数:$2"
echo "第3个参数:$3"
运行该脚本并传递3个参数,结果如下:
脚本名称:./test.sh
第1个参数:hello
第2个参数:world
第3个参数:100
三、特殊变量
在Shell中还有一些特殊变量,如下表所示:
变量名 | 含义 |
---|---|
$? | 上一个命令的退出状态码,0表示成功,其他表示失败。 |
$$ | 当前进程的进程号。 |
$! | 上一个后台命令的进程号。 |
$# | 命令行参数的个数。 |
$* | 所有命令行参数,以单个字符串表示。 |
$@ | 所有命令行参数,以单个字符串表示,但每个参数都以引号括起来。 |
四、引号的使用
在Shell中,变量被引号括起来时有不同的含义:
- 双引号:变量被双引号括起来时,可以包含空格和特殊字符,并且可以被解析。
- 单引号:变量被单引号括起来时,变量名被当成普通字符串,不能被解析。
在Shell中引号的使用示例:
#!/bin/sh
str='hello world'
echo "str1="$str
str="hello world"
echo "str2="$str
输出结果如下:
str1=hello world
str2=hello world
五、取消变量定义
在Shell中,可以使用unset命令取消变量的定义,变量的值将被清空。
在Shell中取消变量定义的示例:
#!/bin/sh
str="hello world"
echo "str1="$str
unset str
echo "str2="$str
输出结果如下:
str1=hello world
str2=
六、变量替换
在Shell中,可以通过一些特殊的符号对变量进行替换。
- ${var}:用于获取变量的值。
- ${var:-word}:变量未定义或者值为空时,返回word。
- ${var:=word}:变量未定义或者值为空时,设置为word。
- ${var:+word}:变量已定义且值不为空时,返回word。
- ${var:#pattern}:从变量开头开始,删除最短的与pattern匹配的子串。
- ${var:##pattern}:从变量开头开始,删除最长的与pattern匹配的子串。
- ${var:%pattern}:从变量结尾开始,删除最短的与pattern匹配的子串。
- ${var:%%pattern}:从变量结尾开始,删除最长的与pattern匹配的子串。
在Shell中变量替换的示例:
#!/bin/sh
str1="hello world"
echo "变量str1="$str1
echo "获取变量str1的值:${str1}"
echo "未定义变量str2:${str2:-default}"
echo "设置变量str2的值为aaa:${str2:=aaa}"
echo "已定义变量str2:${str2:+default}"
echo "替换变量str1中的l为L:${str1/l/L}"
echo "删除变量str1中的o及其之前的字符:${str1#*o}"
echo "删除变量str1中的l及其之后的字符:${str1%%l*}"
输出结果如下:
变量str1=hello world
获取变量str1的值:hello world
未定义变量str2:default
设置变量str2的值为aaa:aaa
已定义变量str2:default
替换变量str1中的l为L:heLLo world
删除变量str1中的o及其之前的字符:lo world
删除变量str1中的l及其之后的字符:he