Shell脚本 ———— Shell 变量
基本介绍: 在Shell脚本中,变量是存储数据的基本单元,它们可以包含字符串、数字等,并在脚本中被引用和操作。用于保存命令的输出、用户输入、配置参数等。通过定义和使用变量,可以简化脚本的编写和维护。
变量的定义: Shell 变量不需要显式声明其类型,可以直接使用。
定义规则:
1、变量名必须以字母 (a-z, A-Z) 或下划线开头 ( _ )。
2、变量名只能包含字母 (a-z, A-Z) 、数字 (0-9) 和下划线 ( _ ) 。
3、变量名区分大小写,这意味着 VAR 和 var 是两个不同的变量。
4、变量的赋值使用等号 (=),等号两边不能有空格。
5、规避特殊名称,特殊名称不能用于变量名。这些特殊名称通常与系统环境变量、内置命令或保留字冲突。 系统环境变量在Shell中有特定的意义和用途,重定义这些变量可能导致脚本或系统行为异常。以下是一些常见的系统环境变量:
PATH: 定义可执行文件搜索路径。
HOME: 用户的主目录。
USER: 当前登录的用户名。
SHELL: 当前Shell的路径。
PWD: 当前工作目录。
OLDPWD: 前一个工作目录。
IFS: 内部字段分隔符,用于分隔单词的默认分隔符。
- 示例:
_myVar="valid"
myVar2="valid"
2myVar="invalid" # 错误,不能以数字开头
————————————————————————————————————————————————————————————————————
VAR="uppercase"
var="lowercase"
echo $VAR # 输出:uppercase
echo $var # 输出:lowercase
变量赋值:
1、直接使用等号 = 进行赋值,等号两边不能有空格。
2、使用 read 命令从用户读取输入,并赋值给变量,示例:
read user_input
echo "You entered: $user_input"
变量类型:
1、字符串变量: 用于存储文本数据,示例:
name="Alice"
2、数值变量: 用于存储数值数据,但在Shell中数值也是字符串形式,示例:
age=30
3、只读变量: 使用 readonly 命令将变量标记为只读,防止其值被修改,示例:
readonly pi=3.14
4、删除变量: 使用 unset 命令删除变量,示例:
unset my_variable
变量的使用方式:
1、直接引用: 使用美元符号 $ 直接引用变量的值,示例:
my_variable="Hello, World!"
echo $my_variable # 输出:Hello, World!
2、双引号 " " 引用: 使用双引号包围字符串,可以保留变量的值,并进行变量替换, 示例:
greeting="Hello"
name="Alice"
echo "$greeting, $name!" # 输出:Hello, Alice!
3、单引号 ’ ’ 引用: 使用单引号包围字符串,完全保留其内容,不进行变量替换, 示例:
greeting="Hello"
echo '$greeting, World!' # 输出:$greeting, World!
4、花括号引用: 使用花括号 {} 包围变量名,可以清晰地界定变量边界,避免歧义,示例:
name="Alice"
echo "Hello, ${name}!" # 输出:Hello, Alice!
echo "Hello, ${name}s!" # 输出:Hello, Alices!
引用命令替换:
1、反引号(旧方法): 使用反引号 command
执行命令,并将命令的输出赋值给变量,示例:
current_date=`date` #执行date命令输出当前日期,并赋值给变量 current_date
echo "Current date is $current_date" #输出日期
2、$() 语法(新方法): 使用 $() 语法进行命令替换,更加清晰和易读,示例:
current_date=$(date) #执行date命令输出当前日期,并赋值给变量 current_date
echo "Current date is $current_date" #输出日期
位置参数变量: 让 Shell 脚本程序更好地满足用户的一些实时需求,以便灵活完成工作,必须要让脚本程序能够像之前执行命令时那样,接收用户输入的参数。
例如 $0 对应的是当前 Shell 脚本程序的名称,$1、$2、$3……$N 则分别对应着第1、第2、第3…第N 个位置的参数值。
./test.sh arg1 arg2 arg3 arg4
./test.sh 脚本内容:
#!/bin/bash
echo "$1 $2 $3 $4"
输出结果:arg1 arg2 arg3 arg4
预定义变量: Shell中有一些预定义的特殊变量,如下:
$# 表示参数个数。
$? 表示上一命令的退出状态。
$$ 表示当前Shell进程ID。
$@ 和 $* 表示记录所有的参数值【从 $1 开始记录】,不包含 $0。
${!n} 表示第n个参数。
${!#} 表示最后一个参数。
示例:
echo "Number of arguments: $#"
echo "Exit status: $?"
echo "Process ID: $$"
echo "all arguments: $@"
变量的作用域:
1、全局变量: 在Shell脚本中定义的变量默认是全局变量,在整个脚本中都可用。
2、局部变量: 使用 local 关键字可以定义局部变量,其作用域仅限于函数内部,示例:
my_function() {
local my_local_variable="I am local"
echo $my_local_variable
}
my_function
示例脚本: 以下是一个完整的示例Shell脚本,展示了变量的定义、规则和使用方式:
#!/bin/bash
# 定义字符串变量
greeting="Hello, World!"
# 输出变量
echo $greeting
# 读取用户输入
echo "Enter your name:"
read user_name
echo "Hello, $user_name!"
# 定义只读变量
readonly pi=3.14
echo "The value of pi is $pi"
# 删除变量
unset greeting
echo "Greeting after unset: $greeting"
更多内容请参考 Shell 脚本专栏。