shell变量名的命名需要遵循如下规则:

  1. 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  2. 中间不能有空格,可以使用下划线(_)。
  3. 不能使用标点符号。
  4. 不能使用bash里的保留关键字,(bash里的保留关键字如下)
命令含义
!保留字,逻辑非
:不做任何事,只做参数展开
.读取文件并在shell中执行它
alias设置命令或命令行别名
bg将作业置于后台运行
bind将关键字序列与readline函数或宏捆绑
break保留字,跳出for、while、until、select循环
builtin调用命令的内建命令格式,而禁用同名的函数。或者同名的扩展命令
case保留字,多重选择
cd切换当前工作目录
command找出内建和外部命令;寻找内建命令而非同名函数
continue保留字,到达下次for、while、until、select循环
declare声明变量定义变量属性
dirs显示当前存储的列表
disown将作业从列表中移除
do保留字,for、while、until、select循环的一部分
done保留字,for、while、until、select循环的一部分
echo打印参数
elif保留字,if结构的一部分
else保留字,if结构的一部分
enable开启和关闭内建命令
esac保留字,case的一部分
eval将参数作为命令再次处理一遍
exec以特定程序取代shell或为shell改变I/O
exit退出shell
export将变量声明为环境变量
fc与历史命令一起运行
fg将作业置于后台运行
fi保留字,if循环的一部分
for保留字,for循环的一部分
function定义一个函数
getops处理命令行选项
hash记录并指定命令的路径名
help显示内建命令的帮助信息
history显示历史信息
if保留字,if循环的一部分
in保留字,case、for、select循环的一部分
jobs显示后台运行的作业
kill向进程传送信号
let使变量执行算术运算
local定义局部变量
logout从Shell中注销
popd从目录栈中弹出目录
pushd将目录压入栈
pwd显示当前工作目录
read从标准输入中读取一行
readonly将变量定义为只读
return从函数或脚本返回
select保留字,生成菜单
set设置Shell选项
shift变换命令行参数
suspend终止Shell的执行
test评估条件表达式
then保留字,if结构的一部分
time保留字,输出统计出来的命令执行时间,其输出格式由TIMEFORMAT变量来控制
times针对Shell及其子Shell,显示用户和系统CPU的时间和
trap设置扑捉程序
type确定命令的源
typeset声明变量,定义变量属性,与declare等价
ulimit设置和显示进程占用的资源限制
umask设置和显示文件权限码
unalias取消别名定义
unset取消变量或函数定义
until保留字,一种循环结构
wait等待后台作业完成
while保留字,一种循环结构
Bash Shell的内建命令和保留字

定义变量

shell定义变量很简单,和大多数编程一样。不过需要注意的是,变量名不能加美元符号:”$“,在使用变量的时候才需要加美元符号。

name="hello world"
_name="lihua"
a_name="zhangsan"
name1="lisi"

使用变量

使用一个定义过的变量,只要在变量名前面加美元符号”$“即可。

name="hello world"
echo $name
echo ${name}

变量名外面的花括号是可选的,加不加都行,在某些情况下加花括号是为了帮助解释器识别变量的边界,比如下面这种情况,如果不给skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。

for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done

已经定义过的变量是可以被重新定义的。

name="张三"
echo $name
name="李华"
ehco $name

只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

myURL="https;//blog.amxsf.com"
readonly myURL
myURL="https;//www.baidu.com"

这个时候如果去运行这个脚本就会报错:NAME: This variable is read only.

删除变量

使用unset命令可以删除变量,变量删除后不可再次使用,且不能删除只读变量。
以下示例运行后将没有任何输出。

myUrl="https://www.runoob.com"
unset myUrl
echo $myUrl

变量类型

运行shell时,会同时存在三种变量:

  • 局部变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  • 环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  • shell变量:shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

浮生一梦君同我,都是槐安未醒人
最后更新于 2021-01-20