8: Bash 的变量和运算符linux
1:Bash变量与其余编程语言的不一样shell
(1)在 Bash 中,变量的默认类型都是字符串型,若是要进行数值运算,则必修指定变量类型为数值型。编程
(2)变量用等号链接值,等号左右两侧不能有空格。bash
(3)变量的值若是有空格,须要使用单引号或双引号包括。如:“test="hello world!"”。其中双引号括起来的内容“$”、“\”和反引号都拥有特殊含义,而单引号括起来的内容都是普通字符。 在变量的值中,可使用“\”转义符。 若是须要增长变量的值,那么能够进行变量值的叠加。不过变量须要用双引号包含"$变量名dom
"或用${变量名}包含变量名ssh
2:变量的分类编程语言
用户自定义变量:这种变量是最多见的变量,由用户自由定义变量名和变量的值。命令行
环境变量:这种变量中主要保存的是和系统操做环境相关的数据,好比当前登陆用户,用户的家目录,命令的提示符等。环境变量的变量名能够自由定义,可是通常对系统起做用的环境变量的变量名是系统预先设定好的。进程
位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量做用是固定的。ip
预约义变量:是 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。若是只提供了一个变量名,则整个输入行赋予该变量。若是提供了一个以上的变量名,则输入行分为若干字,一个接一个地赋予各个变量。