bash中,所有变量的值默认均为字符串。

1. 变量操作

  • 调用变量
$变量
  • 查看变量(所有类型)
set 
  • 删除变量
unset 变量

2. 变量分类

2.1 自定义变量

自定义变量仅对当前Shell有效;

自定义变量的操作:

# 定义变量
变量=变量值
# 其它操作见<1.变量操作>
2.2 环境变量

环境变量对当前Shell及子Shell有效;如果把环境变量写入配置文件,则它对所有shell生效。

环境变量的操作:

# 定义环境变量
export 环境变量=环境变量值
# 查看环境变量
env
# 其它操作见<1.变量操作>

2个重要的环境变量:

$PATH :系统查找命令的路径
$PS1:命令提示符
2.3 位置参数变量

位置参数变量的作用在于执行命令(脚本)的同时,接收需要的参数。

  • $n
    $0表示命令本身,$1-$9表示第1-9个参数,第10个及以上的参数需要使用${n},如:$
  • $*
    所有的参数(作为一个整体)
  • $@
    所有的参数(多个参数)
  • $#
    参数的个数
2.4 预定义变量
  • $?
    $?表示上一个命令的执行结果,0:成功;1-255:失败。
  • $$
    当前进程的进程号(PID)
  • $!
    后台运行的最后一个进程的进程号

3. 读取键盘输入

读取键盘输入需要用到一个命令:read,但read的功能不仅仅如此。详细用法又需要自行查看帮助吧,它是bash built-in commands。

read [-ers] [-a 数组] [-d 分隔符] [-i 缓冲区文字] [-n 读取字符数] [-N 读取字符数] [-p 提示符] [-t 超时] [-u 文件描述符] [名称 ...]

4. declare命令:

declare命令的作用:设置变量值和属性(Set variable values and attributes)
声明变量并赋予属性,如果没有给定变量名,则显示所有变量的属性和值。

declare [-aAfFgilrtux] [-p] [name[=value] ...]

-p    display the attributes and value of each NAME

Options which set attributes:
-i	to make NAMEs have the 'integer' attribute(声明为数值型)
-l	to convert NAMEs to lower case on assignment(转小写,只影响declare之后的赋值)
-r	to make NAMEs readonly(只读)
-u	to convert NAMEs to upper case on assignment(转大写,只影响declare之后的赋值)
-x	to make NAMEs export(环境变量)
Using `+' instead of `-' turns off the given attribute.

5. 变量运算(数值运算)

5.1 运算类型:
  • 逻辑运算:!(非)、&&(与)、||(或)
  • 算术运算:*(乘)、/(除)、%(模)、+(加)、-(减)
  • 位运算: <<(左移)、>>(右移)、&(位与)、|(位或)、^(位异或)
  • 比较运算:>、<、>=、<=、==、!=
  • 赋值运算:=、+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=
5.2 运算形式
  • declare -i 变量,声明为数值型,再进行运算
  • expr、let数值运算工具
    let VAR=算术运算表达式
    VAR=$(expr $ARG1 $OP $ARG2)
  • $[]、$(())
    VAR=$[算术运算表达式]
    VAR=$((算术运算表达式))

示例

[root@localhost ~]# a=11
[root@localhost ~]# b=22
[root@localhost sh]# x=$[a+b];echo $x
33
[root@localhost sh]# y=$((a+b));echo $y
33
[root@localhost sh]# let z=a+b;echo $z
33
[root@localhost sh]# m=$(expr $a + $b);echo $m
33
[root@localhost sh]# declare -i aa;declare -i bb;declare -i cc
[root@localhost sh]# aa=11;bb=22;cc=$aa+$bb;echo $cc
33

推荐最后一种方式,简单、便捷、容易理解。