一、前言
变量是 Shell 编程的基础,所有判断、循环、函数、脚本逻辑都依赖变量。Shell 变量分为四大类:自定义变量、环境变量、位置变量、特殊内置变量。本篇全覆盖定义、赋值、取值、规则、实战场景、面试考点。
二、自定义变量(普通变量)
1. 定义规则(必考)
-
变量名由字母、数字、下划线组成,不能以数字开头
-
等号两边绝对不能有空格
-
字符串默认不用引号,含空格必须加双引号
-
变量默认都是字符串类型,无严格数据类型
2. 定义与调用
#!/bin/bash
name="运维笔记"
age=18
# 调用变量
echo $name
echo ${age}
3. 变量赋值方式
# 1. 直接赋值
a=100
# 2. 命令结果赋值(重点)
time=$(date +%H:%M:%S)
echo $time
# 3. 交互式输入赋值
read -p "请输入内容:" input
echo "你输入的是:$input"
4. 变量销毁
unset name
三、环境变量(全局变量)
普通变量仅当前 Shell 有效;环境变量全局有效,子 Shell 也能继承,常用于系统配置、路径、脚本全局参数。
1. 定义环境变量
# 临时环境变量(当前终端有效)
export SCHOOL="LinuxStudy"
2. 永久环境变量
-
用户级:~/.bashrc、~/.bash_profile
-
系统级:/etc/profile
写入 export 配置后,执行 source /etc/profile 生效。
3. 常见系统环境变量
echo $PATH # 系统命令路径
echo $USER # 当前用户
echo $HOME # 家目录
echo $PWD # 当前路径
echo $SHELL # 默认解释器
四、位置变量(脚本传参核心)
执行脚本时,跟在脚本后的参数,自动接收,无需定义,多用于脚本传参。
位置变量参数表
-
$0:脚本本身名称
-
$1 $2 … $9:第1~9个参数
-
${10}:第10个参数(必须大括号)
-
$#:参数总个数
-
$*:所有参数整体作为一个字符串
-
$@:所有参数独立列表(循环首选)
实战案例 test.sh
#!/bin/bash
echo "脚本名:$0"
echo "第一个参数:$1"
echo "参数总数:$#"
echo "所有参数:$*"
执行:bash test.sh 11 22 33
五、特殊变量面试考点($* 和 $@ 区别)
-
$*:将所有参数看成一个整体
-
$@:将所有参数看成独立列表
-
for循环遍历参数,永远用 $@
六、变量总结
自定义变量:局部、当前Shell、临时使用
环境变量:全局、子Shell继承、系统配置
位置变量:脚本传参、自动化脚本必备