Shell 变量
在 Shell 编程中,变量是用于存储数据值的名称。
✅ 在定义变量时,变量名无需添加美元符号 ($
),这一点跟 PHP 语言中的变量不同。示例如下:
your_name="kaicz"
✅ 需注意,变量名和等号之间不能有空格——这一点可能与你熟悉的所有编程语言都不同。同时,变量名的命名必须遵循以下规则:
- 变量名只能包含字母、数字和下划线 (
_
),且不能以数字开头。 - 变量名区分大小写,不能包含空格。
- 变量名不能是 Shell 的保留字(如 if、then、else、fi 等)。
- 变量名不能包含特殊字符(如 !、@、#、$、% 等)。
- 变量名的长度没有限制,但建议保持简短且具有描述性,以便于理解其用途。
- 使用大写字母表示常量
- 变量名应避免与系统环境变量、Shell 内置命令、常用命令冲突。
✅ 有效的 Shell 变量命名方式:
KAICZ="www.kaicz.com" # 使用大写字母表示常量
LD_LIBRARY_PATH="/bin/" # 变量名包含下划线
_var="123" # 变量名支持下划线开头
var2="abc" # 变量名支持字母和数字组合
⛔ 无效的 Shell 变量命名方式:
if="some_value" # 避免使用 if 等保留字作为变量名
variable_with_$=42 # 避免使用 $ 等特殊符号作为变量名
variable with="value" # 避免使用空格作为变量名
variable_name = value # 避免等号两侧使用空格
✅ 除了显式地直接赋值,还可以通过循环语句为变量赋值,如:
for file in `ls /etc`
# 等价于
for file in $(ls /etc)
通过上面的语句,将/etc
下目录的文件名循环展示出来。
1. 使用变量
✅ 使用一个定义过的变量,只要在变量名前面加美元符号即可,如:
website_url="kaicz.com" # 定义变量
echo $website_url # 使用变量时,变量名不加花括号
echo ${website_url} # 使用变量时,变量名添加花括号,加花括号是为了帮助解释器识别变量的边界
✅ 已定义的变量,可以被重新定义,如:
website_url="kaicz.com" # 定义变量
echo $website_url # 使用变量
website_url="qq.com" # 重新定义变量
echo $website_url # 使用变量
这样写是合法的,但注意,第二次赋值的时候不能写 $website_url="qq.com"
,使用变量的时候才加美元符 ($
)。
2. 只读变量
使用readonly
命令可以将变量定义为只读变量,只读变量的值不能被改变。
✅ 下面的例子尝试更改只读变量,结果报错:
#!/bin/bash
myUrl="https://www.google.com"
readonly myUrl
myUrl="https://www.kaicz.com"
✅ 运行脚本,结果如下:
/bin/sh: NAME: This variable is read only.
3. 删除变量
使用unset
命令可以将变量删除,但是不能删除只读变量。
✅ 下面的例子尝试更改只读变量,结果报错:
#!/bin/sh
myUrl="https://www.kaicz.com"
unset myUrl
echo $myUrl
以上实例执行后,不会有任何输出。
4. 变量类型
Shell 支持多种类型的变量,主要包括字符串变量、整数变量、数组变量、环境变量和特殊变量。
Shell 字符串
字符串是 Shell 编程中最常用且最有用的数据类型。事实上,Shell 脚本主要处理的数据类型就是字符串和数字,几乎不存在其他常用的数据类型。定义字符串时,可以使用单引号、双引号,也可以完全不使用引号。
1. 单引号
单引号中的内容会被原样输出,其中的变量不会被解析;单引号必须成对出现(即使使用转义符也无法单独使用)。
name='kaicz' # 输出结果:kaicz
str='It'"'"'s working.' # 输出结果:It's working.
greeting='Hi, '"$name" # 输出结果:Hi, kaicz
msg='Time: '"$(date)" # 输出结果:Time: 2025-08-20 20:59:20
str='Hello,''World' # 输出结果:Hello,World
2. 双引号
双引号里可以有变量,双引号里可以出现转义字符。
name="kaicz" # 输出结果:kaicz
str='It'"'"'s working.' # 输出结果:It's working.
greeting="Hi, $name!" # 输出结果:Hi, kaicz!
msg="Time: \"$(date)\"" # 输出结果:Time: "2025-08-20 20:59:20"
3. 获取字符串长度
使用${#variable_name}
(最常用,推荐),这是 Bash/Shell 中最直接、最标准的获取字符串长度的方法。
website="www.kaicz.com" # 定义字符串变量
echo $website # 输出结果:www.kaicz.com
echo ${#website} # 输出结果:15
4. 提取子字符串
提取字符串中,第 4 个字符开始,长度为 5 个字符(第一个字符的索引值为 0):
website="www.kaicz.com" # 定义字符串变量
echo $website # 输出结果:www.kaicz.com
echo ${website:4:5} # 输出结果:kaicz
5. 查找子字符串
查找字符 i 或 o 的位置(哪个字母先出现就计算哪个):
website="www.kaicz.com" # 定义字符串变量
echo $website # 输出结果:www.kaicz.com
echo `expr index "$website" io` # 输出结果:7
注意:以上脚本中`
是反引号,而不是单引号'
,不要看错了哦。
Shell 数组
bash
支持一维数组 (不支持多维数组),并且没有限定数组的大小。
类似于 C 语言,数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。
1. 定义数组
在 Shell 中,用小括号()
来表示数组,数组元素用 "空格" 符号分割开。定义数组的一般形式为:
数组名=(值1 值2 ... 值n)
✅ 定义一个数组,元素用空格分隔,整个列表用括号括起来:
fruits=("Apple" "Banana" "Orange")
✅ 定义一个数组,可以写成多行,更清晰,整个列表用括号括起来:
fruits=(
"Apple"
"Banana"
"Orange"
)
✅ 定义一个数组,也可以逐个元素赋值:
fruits[0]="Apple"
fruits[1]="Banana"
fruits[2]="Orange"
2. 读取数组
读取数组元素值的一般格式是${数组名[下标]}
,比如:
echo ${fruits[0]} # 输出:Apple
如果要读取整个数组,可以使用${数组名[@]}
或${数组名[*]}
,比如:
echo ${fruits[@]} # 输出:Apple Banana Orange
3. 获取数组的长度
获取数组长度的一般格式是${#数组名[@]}
,比如:
echo ${#fruits[@]} # 输出:3
length=${#fruits[*]} # 输出:3
length=${#fruits[2]} # 输出:6 (获取第三个元素的长度)
Shell 注释
在 Shell 编程中,以井号#
开头的行为注释行,解释器会忽略这些行。
#--------------------------------------------
# 这是一个注释
# author:开创者教程
# site:www.kaicz.com
# slogan:成长的路上,开创者与你同行!
#--------------------------------------------
##### 用户配置区 开始 #####
#
#
# 这里可以添加脚本描述信息
#
#
##### 用户配置区 结束 #####
反馈提交成功
感谢您的反馈,我们将尽快处理您的反馈