一.Shell变量的种类
- 概念:变量的名字就是变量保存值的地方。引用变量的值就叫做变量替换。
如果 variable 是一个变量的名字,那么 $variable 就是引用这变量的值,即这变量所包含的数据。
\$variable 事实上只是 \${variable} 的简写形式。在某些上下文中 \$variable 可能会引起错误,这时候你就需要用 \${variable} 了。 - 用户自定义变量:由用户自己定义、修改和使用
- 预定义变量:Bash预定义的特殊变量,不能直接修改
- 位置变量:通过命令行给程序传递执行参数
二.自定义变量
- 定义新的变量
- 变量名要以英文字母或下划线开头,区分大小写
- 格式:变量名=变量值
- 查看变量的值
- 格式:echo $变量名
- 从键盘输入内容为变量赋值
- 格式:read [-p “信息”] 变量名
- 结合不同的引号为变量赋值
- 双引号 ” “:允许通过$符号引用其他变量值
- 单引号 ’ ’ :禁止引用其他变量值,$视为普通字符
- 反引号
:将命令执行的结果输出给变量
- 清除用户定义的变量
- 格式:unset 变量名
#!/bin/bash
# 变量赋值和替换
a=375
hello=$a
#-------------------------------------------------------------------------
# 强烈注意, 在赋值的的时候, 等号前后一定不要有空格.
# 如果出现空格会怎么样?
# "VARIABLE =value"
# ^
#% 脚本将尝试运行一个"VARIABLE"的命令, 带着一个"=value"参数.
# "VARIABLE= value"
# ^
#% 脚本将尝试运行一个"value"的命令,
#+ 并且带着一个被赋值成""的环境变量"VARIABLE".
#-------------------------------------------------------------------------
echo hello # 没有变量引用, 只是个hello字符串.
echo $hello
echo ${hello}
echo "$hello"
echo "${hello}"
echo
hello="A B C D"
echo $hello # A B C D
echo "$hello" # A B C D
# 引用一个变量将保留其中的空白, 当然如果是变量替换就不会保留了.
# 在bash中,当变量中有空格、tab之类的字符时候,
# 如果需要打印这些字符,需要用双引号进行引用 "$hello".
echo
echo '$hello' # $hello
# ^ ^
# 全引用(单引号)的作用将会导致"$"被解释为单独的字符, 而不是变量前缀.
# 使用单引号引用变量时候,变量的值不会被引用,只是简单的保持原始字符串.
# 注意这两种引用所产生的不同的效果.
hello= # 设置为空值.
echo "\$hello (null value) = $hello"
# 注意设置一个变量为null, 与unset这个变量, 并不是一回事
#+ 虽然最终的结果相同(具体见下边).
# --------------------------------------------------------------
# 可以在同一行上设置多个变量,
#+ 但是必须以空白进行分隔.
# 慎用, 这么做会降低可读性, 并且不可移植.
var1=21 var2=22 var3=$V3
echo
echo "var1=$var1 var2=$var2 var3=$var3"
# 在老版本的"sh"上可能会引起问题.
# --------------------------------------------------------------
echo; echo
numbers="one two three"
# ^ ^
other_numbers="1 2 3"
# ^ ^
# 如果在变量中存在空白,那么就必须加上引号
# other_numbers=1 2 3 # 将给出一个错误消息.
echo "numbers = $numbers"
echo "other_numbers = $other_numbers" # other_numbers = 1 2 3
# 不过也可以采用将空白转义的方法.
mixed_bag=2\ ---\ Whatever
# ^ ^ 在转义符后边的空格(\).
echo "$mixed_bag" # 2 --- Whatever
echo; echo
echo "uninitialized_variable = $uninitialized_variable"
# Uninitialized变量为null(就是没有值).
uninitialized_variable= # 声明, 但是没有初始化这个变量,
#+ 其实和前边设置为空值的作用是一样的.
echo "uninitialized_variable = $uninitialized_variable"
# 还是一个空值.
uninitialized_variable=23 # 赋值.
unset uninitialized_variable # Unset这个变量.
echo "uninitialized_variable = $uninitialized_variable" # 还是一个空值.
三.位置变量
- 表示为$n,n为1-9之间的数字
四.预定义变量
- 表示形式:
- $#:命令行中位置参数的个数
- $*:所有位置参数的内容
- $?:上一条明了执行后返回的状态,当返回状态值为0时表示执行成功,非0值表示执行异常或错误
- $0:当前执行的进程/程序名
五.数值变量的运算
- 计算整数表达式的运算结果
- 格式:expr 变量1 运算符 变量2 …[运算符 变量n]
- expr的常用运算符
- 加法运算: +
- 减法运算: -
- 乘法运算: *
- 除法运算: /
- 求模(取余)运算:%