目录
1、自定义变量
自定义变量:以固定名存放有变化的值
定义格式: 变量名=变量值
取消定义的变量 unset 变量名
注:=两边不能有空格,不要用关键字做变量名,例如:ls,cd等
如果变量已存在,则会覆盖之前的变量值
变量名称有:字母/数字/下划线组成,不能以数字组成
调用语法格式: $变量名 或 ${变量名} 加上花括号是为了防止异常
例如:
定义: a=11 调用:echo $a
定义: x=centos 调用:echo $x 如果想要在x后加上其他内容 echo ${x}7.8 则会输出centos7.8
2、操作系统定义的变量
①环境变量(变量名通常大写,有操作系统维护)
②位置变量(bash内置 存储脚本执行的参数)
③预定义变量(bash内置 可以调用但不可以赋值或修改)
④自定义变量(用户自主设置)
2.1环境变量
存在于/etc/profile或~/.bash_profile ;env可以列出所有的环境变量
如:
PATH:命令搜索变量
PWD:当前路径
USER:当前用户名
UID:当前用户的ID号
HOME:当前用户的家目录
SHELL:用的什么shell
2.2位置变量
使用$n表示,n表示数字序列号
例如:
$1,$2,$3·······$9,${10},${11} 注意1~9不需要写{},之后的都需要写{}
演示:创建一个vars.sh文件,在文件内写入
执行
2.3预定义变量
用来保存脚本的执行信息
直接使用这些变量,不能直接为这些变量赋值
$0 当前所在的脚本名或进程
$$当前运行进程的PID号
$?命令执行后的返回状态,0正常,1或其他异常
$#已加载的位置变量的个数
$*所有位置变量的值
3、变量扩展引用
3.1各种引号
双引号" "允许扩展(可以取变量的值),以$引用
单引号' '禁止扩展(不能取变量的值),$视为普通字符
反引号` `将命令执行输出结果作为变量值,$()与反引号等效
创建文件:
touch a b c 创建了三个文件
touch "a b c" 创建了一个文件 ,与touch 'a b c'等效
删除文件: rm -rf 文件名
双引号和单引号输出结果的区别
注:无特殊符号时,单引号、双引号作用是一样的。
3.2read命令定义变量
read 命令定义变量
read从键盘读入变量值完成赋值 , read 变量名
格式:read [ -p "提示信息" ] 变量名
-p可选
-t可指定超时秒数
-s设置是否在终端显示输入的内容
创建一个read.sh文件,写入如下的内容
注意:在Ubuntu中 echo "$pass" | passwd --stdin $name不能使用,目前还在找替换的命令,如果你用的其他的虚拟机可以试试哦
调用并输入用户名和密码
./read.sh
注意:read -p "请输入密码" pass 是一个明文输入,不安全,如果需要暗文输入请输入以下命令
read -s -p "请输入密码:" pass 或者 read -p "请输入密码" pass -s
read -t 3 iname 表示在3秒内赋值 而read iname是默认一直等
3.3全局或局部变量
全局变量,在当前shell以及子shell环境均有效
局部变量,新定义的变量默认只有在当前shell环境中有效,无法在子shell环境中有效,无法在子shell环境中使用
x=11 局部变量
export y=22 全局变量