Shell 变量和参数
掌握 Shell 变量定义、使用和参数传递,构建灵活的脚本程序
变量基础
变量定义和使用
# 定义变量(注意等号两边不能有空格)
name="Linux Cloud Lab"
count=100
version=2.0
# 使用变量
echo "欢迎来到 $name"
echo "学员数量: $count"
echo "版本: $version"
变量命名规则
- 只能包含字母、数字和下划线
- 必须以字母或下划线开头
- 区分大小写
- 不能使用 Shell 关键字
环境变量
常用环境变量
$HOME
用户主目录$PATH
可执行文件路径$USER
当前用户名$SHELL
当前Shell$PWD
当前工作目录$HOSTNAME
主机名$LANG
系统语言$RANDOM
随机数设置和导出环境变量
# 设置局部变量
MY_VAR="hello"
# 导出为环境变量
export MY_VAR
# 或者一步完成
export MY_VAR="hello"
# 查看所有环境变量
env
# 查看特定变量
echo $MY_VAR
位置参数
位置参数说明
$0
脚本名称$1, $2, ...
第1、2个参数$#
参数个数$*
所有参数(字符串)$@
所有参数(数组)$?
上个命令退出状态位置参数示例脚本
#!/bin/bash
# 文件名: params.sh
echo "脚本名称: $0"
echo "参数个数: $#"
echo "第一个参数: $1"
echo "第二个参数: $2"
echo "所有参数: $@"
# 检查参数个数
if [ $# -lt 2 ]; then
echo "用法: $0 参数1 参数2"
exit 1
fi
运行示例:
./params.sh hello world
特殊变量
进程相关变量
$$
当前进程ID$!
后台进程ID$?
上个命令退出状态特殊变量使用示例
#!/bin/bash
echo "当前进程ID: $$"
# 启动后台进程
sleep 10 &
echo "后台进程ID: $!"
# 检查命令执行状态
ls /nonexistent 2>/dev/null
if [ $? -eq 0 ]; then
echo "命令执行成功"
else
echo "命令执行失败"
fi
变量操作技巧
字符串操作
text="Hello World"
# 获取字符串长度
echo $#text # 输出: 11
# 字符串截取
echo $text:0:5 # 输出: Hello
echo $text:6 # 输出: World
# 字符串替换
echo $text/World/Linux # 输出: Hello Linux
默认值设置
# 如果变量未设置,使用默认值
echo $name:-"默认用户"
# 如果变量未设置,设置并使用默认值
echo $name:="默认用户"
# 如果变量未设置,显示错误信息
echo $name:?"变量未设置"
数组变量
# 定义数组
fruits=("apple" "banana" "orange")
# 访问数组元素
echo $fruits[0] # 第一个元素
echo $fruits[@] # 所有元素
echo $#fruits[@] # 数组长度
# 遍历数组
for fruit in "$fruits[@]"; do
echo "水果: $fruit"
done