目录
1.shell变量定义规则
①变量名不能包括$符号 eg:$name,name$,na$me等变量都是错误的
②变量名只能使用英文字母,数字,下划线来组成,并且不能以数字开头
③变量名中不能存在空格和标点符号,可以使用下划线
④变量命中不能使用bash中的关键字
2.变量如何使用
只需要在变量名前加个$即可,如下
#!/bin/bash
hobby="swim"
echo $hobby
echo ${hobby} //这两种都会输出结果:swim
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况
for skill in Ada Coffe Action Java; do
echo "I am good at ${skill}Script"
done
分析:1.使用${skill}正常打印
2.使用$skillScript,结果则与我们预想的不一样了,它会误以为skillScript是一个变量,然而我们并没有定义该变量,所以打印出来的结果只有I am good at
在使用变量的时候,推荐使用${变量名}的形式
3.只读变量
在shell中,使用readonly修饰,只能读而不能修改。相当于java中的final修饰的变量
#!/bin/bash
param1="ShangHai"
echo ${param1} ---结果:ShangHai
param1="BeiJing"
echo ${param1} ---结果:BeiJing,说明param1变量已经被修改
readonly param2="Dog"
echo ${param2} ---结果:Dog
param2="Cat"
echo ${param2} ---报错:param2: readonly variable
4.删除变量
使用unset可以删除变量
#!/bin/bash
param1="ShangHai"
echo ${param1} ---结果:ShangHai
unset param1
echo ${param1} ---结果:(空白,因为变量已经删除)
readonly param2="Dog"
echo ${param2} ---结果:Dog
unset param2 ---提示:unset: param2: cannot unset: readonly variable
echo ${param2} ---结果:Dog(证明unset无法删除只读变量)
5.env:查看所有的环境变量
env是environment(环境)的简写。罗列的是环境变量。
[root@master ~]# env
XDG_SESSION_ID=1
HOSTNAME=master
SHELL=/bin/bash
...
6.set:查看所有的环境变量和自定义变量
[root@master ~]# set
7.$
($也是一个变量)返回当前shell的进程号
[root@master ~]# echo $$
8.?
(?也是一个变量)返回上个执行命令的返回值
上个命令执行成功,返回 0;上个命令执行失败,返回的是一个非 0 的数值
[dmtsai@study ~]$ echo $SHELL
/bin/bash <==可顺利显示!没有错误!
[dmtsai@study ~]$ echo $?
0 <==因为没问题,所以回传值为 0
[dmtsai@study ~]$ 12name=VBird
bash: 12name=VBird: command not found... <==发生错误了!bash 回报有问题
[dmtsai@study ~]$ echo $?
127 <==因为有问题,回传错误代码(非为 0)
# 错误代码回传值依据软件而有不同,我们可以利用这个代码来搜寻错误的原因喔!
[dmtsai@study ~]$ echo $?
0
# 咦!怎么又变成正确了?这是因为 "?" 只与『上一个执行指令』有关,
# 所以,我们上一个指令是执行『 echo $? 』,当然没有错误,所以是 0 没错!
9.export
将自定义变量转变成环境变量
[dmtsai@study ~]$ export 变量名称
10.read
读取键盘变量(要读取来自键盘输入的变量,就是用 read 这个指令了)
11.declare/typeset
部分参考自:https://www.runoob.com/linux/linux-shell-variable.html
Linux命令可参考:https://www.runoob.com/linux/linux-command-manual.html