8: Bash 的变量和运算符
1:Bash变量与其他编程语言的不同
(1)在 Bash 中,变量的默认类型都是字符串型,如果要进行数值运算,则必修指定变量类型为数值型。
(2)变量用等号连接值,等号左右两侧不能有空格。
(3)变量的值如果有空格,需要使用单引号或双引号包括。如:“test="hello world!"”。其中双引号括起来的内容“$”、“\”和反引号都拥有特殊含义,而单引号括起来的内容都是普通字符。 在变量的值中,可以使用“\”转义符。 如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含"$变量名
"或用${变量名}包含变量名
2:变量的分类
用户自定义变量:这种变量是最常见的变量,由用户自由定义变量名和变量的值。
环境变量:这种变量中主要保存的是和系统操作环境相关的数据,比如当前登录用户,用户的家目录,命令的提示符等。环境变量的变量名可以自由定义,但是一般对系统起作用的环境变量的变量名是系统预先设定好的。
位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
预定义变量:是 Bash 中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
(1)自定义变量
用户自定义变量:#等号左右两侧不能有空格
[root@localhost ~]# name=123
echo $name
变量的增删改查:
增加 :name=123,
改:name=567直接覆盖,
删除:unset name 删除变量,可以理解为释放变量的内存空间
查询:查看变量是否已经定义,或者系统定义了多少变量。
set 命令[选项]
选项:
-u: 如果设定此选项,调用未声明变量时会报错(默认无任何提示)
-x: 如果设定此选项,在命令执行之前,会把命令先输出一次
(2)系统环境变量
1:环境变量设置
export age="18"
2: 环境变量查询和删除
env 命令和 set 命令的区别是,set 命令可以查看所有变量,而 env 命令只能查看环境变量。
[root@localhost ~]# unset gender
[root@localhost ~]# env | grep gender
3:系统默认环境变量
HOSTNAME=localhost.localdomain 主机名
SHELL=/bin/bash 当前的 shell
TERM=linux 终端环境
HISTSIZE=1000 历史命令条数
SSH_CLIENT=192.168.4.159 4824 22 当前操作环境是用 ssh 连接的,这里记录客户端 ip
SSH_TTY=/dev/pts/1
例如:PATH="$PATH":/root/sh 修改系统bin执行路径添加sh
4: LANG 语系变量
LANG 变量定义了 Linux 系统的主语系环境,这个变量的默认值是:
[root@localhost src]# echo $LANG
(3)位置参数变量
$n: n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}.
$* 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体.
$@ 这个变量也代表命令行中所有的参数,不过$@把每个参数区分待
$# 这个变量代表命令行中所有参数的个数.
$1表示的是第一个参数,$0表示的是命令本身。
[root@localhost sh]# more parment.sh
#!/bin/bash
for i in $* #循环输出
do
echo "The paramenters is : $i"
done
for y in "$@"
#同样 in 后面的有几个值,for 循环几次,每次都把值赋予变量 y
#可是 Shell 中把“$@”中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次
do
echo "The parameter$x is: $y"
#输出变量 y 的值
x=$(( $x +1 ))
#然变量 x 每次循环都加 1,为了输出时看的更清楚
done
(4)预定义变量:
$? 最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。
$$ 当前进程的进程号(PID)
$! 后台运行的最后一个进程的进程号(PID)
9: 接收键盘输入
read [选项] [变量名]
选项:
-p “提示信息”: 在等待 read 输入时,输出提示信息
-t 秒数: read 命令会一直等待用户输入,使用此选项可以指定等待时间
-n 字符数: read 命令只接受指定的字符数,就会执行
-s:隐藏输入的数据,适用于机密信息的输入
变量名:变量名可以自定义,如果不指定变量名,会把输入保存入默认变量 REPLY。如果只提供了一个变量名,则整个输入行赋予该变量。如果提供了一个以上的变量名,则输入行分为若干字,一个接一个地赋予各个变量。