【shell】shell中的变量与基本语法

希望各位不要白piao,点个赞或者刷个评论再走,还有【禁止转载】
*这篇文章就是讲解变量在shell中是什么样的(我手头的笔记比较多,只能慢慢发,如果真的有某一方面特别的需求,可以在评论中回复,如果我有相关的资料我会优先发出来)
@environment: uninx和Linux是存在差异的,不过大部分命令是差不多的,本文的例子在Iterm2+oyzsh+Mac系统下运行的,并未使用remote端服务器。不过大同小异,工作中其实也是这个样子的。

变量

按照惯例,Shell变量由全大写字母加下划线组成,有两种类型的Shell变量:

1.环境变量

环境变量可以从父进程传给子进程,因此Shell进程的环境变量可以从当前Shell进程传给fork(拆分)出来的子进程。用printenv命令可以显示当前Shell进程的环境变量。
printenv
【shell】shell中的变量与基本语法
我们之前说过sh xxxx.sh 和 source xxx.sh的区别,如果出现了一些变量是空的情况你要了解为什么没有拿到这个变量。如果不是很懂执行shell脚本的区别,看我另一篇文章如何执行shell脚本

2.本地变量

只存在于当前Shell进程(这就是本地变量和环境变量的区别),用set命令可以显示当前Shell进程中定义的所有变量(包括本地变量和环境变量)和函数。

设置本地变量(脚本语法里面会经常用到)

环境变量是任何进程都有的概念,而本地变量是Shell特有的概念。在Shell中,环境变量和本地变量的定义和用法相似。在Shell中定义或赋值一个变量:
VARNAME=value
以上就是把value的值赋值给VARNAME,注意等号两边都不能有空格,否则会被Shell解释成命令和命令行参数。

导出本地变量为环境变量

一个变量定义后仅存在于当前Shell进程,它是本地变量,用export命令可以把本地变量导出为环境变量,定义和导出环境变量通常可以一步完成:
export VARNAME=value
也可以分两步完成:
VARNAME=value
export VARNAME
@experience:应用场景也挺多的,比如你要写一个每天都运行的任务我们一般称为跑批job,那么其中一个脚本的运行结果可能称为多个下游任务所用到(下游任务就是a脚本完成后会拉起b脚本,此时b脚本就是a脚本的下游任务),这种情况下我们可以选择把这个值编程一个跑批环境的华景变量,当然这个环境要相对独立于其他的机器,大厂很多的跑批框架会有这种设计,这里了解一下它的语法就好。

删除已定义的环境变量或本地变量。

unset VARNAME
如果一个变量叫做VARNAME,用\${VARNAME}可以表示它的值,在不引起歧义的情况下也可以用\$VARNAME表示它的值。一般我建议用第一种带{}的方式进行表示,因为复杂的shell脚本掺杂sql真的不容易看,你写的东西是为了让别人看懂,所以个人建议第一种。通过以下例子比较这两种表示法的不同:
echo $SHELL
注意,在定义变量时不用$,取变量值时要用$。和C语言不同的是,Shell变量不需要明确定义类型,事实上Shell变量的值都是字符串,比如我们定义VAR=45,其实VAR的值是字符串45而非整数。Shell变量不需要先定义后使用,如果对一个没有定义的变量取值,则值为空字符串。如果用过python这个地方十分好理解。

【shell】shell中的变量与基本语法【shell】shell中的变量与基本语法 Scala没有静态 发布了21 篇原创文章 · 获赞 19 · 访问量 1856 私信 关注
上一篇:变量


下一篇:shell编程–bash变量介绍