bash中的变量分类和read命令
变量是计算机内存的单元,其中存放的值可以改变。当脚本程序需要保存一些信息时,就把它存放在一个变量中,每个变量有一个名字,通过变量名引用它的值。
1、在Shell中,变量名不能以数字开头
2、变量的默认类型都是字符串型,如果要进行数值运算,必须指定变量类型为数值型。
3、变量用等号连接值,等号左右两侧不能有空格
4、变量的值如果有空格,需要使用单引号或双引号括起来
5、在变量的值中,可以使用转义符
6、如果需要增加变量的值,那么可以进行变量值的叠加,不过变量需要用双引号包含"$变量名"或用${变量名}包含。
7、环境变量名建议大写,便于区分
一、用户自定义变量:也称为本地变量,只在当前的Shell中生效。
变量定义:name="my name"(因为值中间有空格所以用双引号括起来)
变量叠加:num=123
aa="$aa"321或者aa=${aa}321
变量叠加并不是把数值增加,因为Linux默认变量类型是字符串类型,上面例子中的变量aa的值是123321,数据类型是字符串。
变量调用:用$符加变量名
变量查看:set(查看所有变量,包括本地变量,环境变量、位置参数变量和预定义变量)
变量删除:unset 变量名
定义多行变量(标示符):
aa=$(cat <<biaoshi
sdfsxvxcv
sdfsdfsdfsdfsdf
biaoshi
)
二、环境变量:主要保存的是和系统操作环境相关的数据,系统已经定义的环境变量名称不能更改,但是变量的值可以更改,用户还可以自己增加新的环境变量,环境变量会在当前Shell和这个Shell的所有子Shell中生效,如果把环境变量写入到相应的配置文件中,那么这个环境变量就会在所有的Shell中生效。
export 变量名=变量值:申明并设置变量(export 变量名:把已经存在的本地变量设置成环境变量)
env:查询变量(专门用来查看所有环境变量的命令)
unset 变量名:删除变量
常见环境变量:
PATH:系统用来查找命令的路径,每个用户的环境变量配置文件在家目录中的.bash_profile文件或者.bashrc文件(系统加载时会先加载.bashrc文件),在文件中添加修改对应的环境变量,如PATH=$PATH:‘/usr/local/mysql/bin/‘:‘/usr/local/httpd2/bin/‘:‘/usr/local/php5.5/bin/‘,代表把指定的目录中的命令添加到系统命令搜索目录。
PS1:(使用env查看不到该变量,使用set可以)定义系统提示符格式的变量,也就是在操作界面上看到的[root@localhost ~]#的字符串的格式
\d:显示日期,格式为"星期 月 日" \h:显示主机名,默认主机名"localhost"
\t:显示24小时制时间,格式为"HH:MM:SS" \A:显示24小时制时间,格式为"HH:MM"
\T:显示12小时制时间,格式为"HH:MM:SS" \@:显示12小时制时间,并且显示"上午"或"下午"字样,格式为"HH:MM"
\u:显示当前用户名 \w:显示当前所在目录的完整名称
\W:显示当前所在目录的最后一个目录 \#:执行的第几个命令
$:提示符,如果是root用户会显示"#",如果是普通用户会显示"$"
三、位置参数变量:主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量的作用是固定的,但是值可以更改(严格来说位置参数变量也是属于预定义变量的,但是由于位置参数变量比较特殊,所以一般都是单独分离出来的)。
$n:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号括起来,如${12}。
$*:这个变量代表命令行中的多有参数,$*把所有的参数看成一个整体
$@:也是代表命令行中的多有参数,不过$@会把每个参数区分对待
$#:这个变量代表命令行中所有参数的个数
如现有脚本test.sh,内容如下:
!/bin/bash
echo "your name is $1,you age is $2"
运行./test.sh zhangsan 25会输出your name is zhangsan,you age is 25
位置参数变量有时候在运行脚本的时候我们不知道需要输入多少个参数以及每个参数的意义,这是可以用接收键盘输入:read [选项] [接收的值赋予的变量名]
-p "提示信息":在等待read输入时,输出提示信息
-t 秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间
-n 字符数:read接受输入的字符数达到指定字符数就会执行,不加只有在按了回车才会执行。
-s:隐藏输入的数据,适用于机密信息的输入
如下的脚本就是接受用户输入的值赋给指定变量:
!/bin/bash
read -t 30 -p "please input your name: " name
echo "your name is $name"
四、预定义变量:是bash中已经定义好的变量,变量名不能自定义,变量的作用也是固定的,但是值可以更改。
$?:最后一次执行的命令的返回状态,如果这个变量的值为0,说明上一个命令正确执行,如果值不是0(具体是几,由命令来决定),说明上一个命令执行不正确
$$:当前进程的进程号(PID)
$!:后台运行的最后一个进程的进程号(PID)