LinuxShell的变量
一 定义变量的规范
①变量名称可以由字母,数字和下划线组成,但是不能以数字开头
②在Bash中,变量的默认类型都是字符串类型,如果要进行数值运算,则必须指定变量类型为数值型
③变量用等号连接值,等号左右两侧不能有空格
④变量的值如果有空格,需要使用单引号或双引号包括
⑤若需要增加变量的值,那么可以进行变量值的叠加.不过变量需要使用双引号包含"$变量名"或用${变量名}包含变量名,如下所示:
变量值的叠加可以使用两种格式:"$变量名"或${变量名}
[root@Linux01 ~]# test=123 [root@Linux01 ~]# test="$test"456 [root@Linux01 ~]# echo $test 123456 [root@Linux01 ~]# test=${test}789 [root@Linux01 ~]# echo $test 123456789
⑥若是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令
[root@Linux01 ~]# test=$(date) [root@Linux01 ~]# echo $test Wed Dec 25 20:52:29 CST 2019
二 变量的分类
①用户自定义变量:由用户自定义变量名和变量的值.
set [选项] 选项: -u 若设定此选项,调用未声明变量时会报错(默认无任何提示) -x 若设定此选项,在命令执行之前,会把命令先输出一次 #直接使用set命令,会查询系统中所有的变量,包含用户自定义和环境变量 #当设置了-u选项后调用未声明变量时会报错(默认无任何提示) [root@Linux01 ~]# set -u [root@Linux01 ~]# echo $file bash: file: unbound variable [root@Linux01 ~]# echo $file #当设定了-x选项,命令执行之前,会把命令先输出一次 [root@Linux01 ~]# set -x [root@Linux01 ~]# ls + ls --color=auto anaconda-ks.cfg Documents install.log Music Public test.txt Desktop Downloads install.log.syslog Pictures Templates Videos [root@Linux01 ~]# pwd + pwd /root
unset 变量名
②环境变量:这种变量主要保存的是和系统操作环境的相关数据.
#设置环境变量 [root@Linux01 ~]# export age="18" #查看环境变量,env与set的区别是:set查看所有变量,env只能查看环境变量 [root@Linux01 ~]# env|grep age age=18 #删除环境变量 [root@Linux01 ~]# unset age
系统默认环境变量
env命令可以查询到所有的环境变量,但是一些和Bash操作接口相关的变量,只能用set命令查看
PATH变量:系统查找命令的路径
PS1变量:命令提示符设置
PS1是用来定义命令行的提示符,PS1可以支持以下选项:
③位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的
④预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用是固定的
#!/bin/bash #输出当前进程的pid #这个pid就是variable.sh这个脚本执行时,生成进程的PID echo "The current process is $$" #使用find命令在root目录下查找hello.sh文件 #使用&的意思是命令放入后台执行 find /root -name hello.sh & #输出这个后台执行命令的进程PID,也就是输出find命令的PID echo "The last one Daeomn process is $
⑦ 键盘输入
read 【选项】【变量名】 选项: -p “提示信息”: 在等待read输入时,输出提示信息 -t 秒数: read命令会一直等待用户输入,使用此选项可以指定等待时间 -n 字符数 read命令只接受指定的字符数,就会执行 -s 隐藏输入的数据,适用于机密信息的输入 变量名: 变量名可以自定义,如果不指定变量名,会把输入保存入默认变量REPLY 如果只提供一个变量名,则整个输入行赋予该变量 如果提供一个以上的变量名,则输入行分为若干字,一个接一个地赋予各个变量,而命令行上的最后一个变量取得剩余的所有字
#!/bin/bash #提示输入名字,并等待30秒,把用户输入的保存到变量name中 read -t 30 -p "Please input your name:" name echo "Name is $name" #提示"请输入年龄",并等待30秒,把用户的输入保存变量age中 #年龄是隐私,所以用-s选项隐藏输入 read -s -t 30 -p "Please input your age:" age #调准输出格式,若不输出换行;年龄的输出不会换行,-e可以激活转义符 echo -e "\n" echo "Age is $age" #提示"请选择性别",并等待30秒,把用户的输入保存到变量gender read -n 1 -t 30 -p "Please select your gender[M/F]:" gender echo -e "\n" echo "Sex is $gender"