Shell语法
Shell变量
运行shell时,会同时存在三种变量:
1) 局部变量
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2) 环境变量
所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3) shell变量
shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
局部变量
定义
定义变量时,变量名不加美元符号($)!!!
如:
1 | variableName="value" |
注意,变量名和等号之间不能有空格
变量名的命名须遵循如下规则:
- 首个字符必须为字母(a-z,A-Z)。
- 中间不能有空格,可以使用下划线(_)。
- 不能使用标点符号。
- 不能使用bash里的关键字(可用help命令查看保留关键字)
使用
使用一个定义过的变量要在变量名前面加美元符号($),如
1 | your_name="mozhiyan" |
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界
推荐给所有变量加上花括号,这是个好的编程习惯。
已定义过的变量可以重新定义:
1 | aaa="my aaa" |
只读变量
使用readonly
命令可以将变量定义为只读变量,只读变量的值不能被改变。
删除变量
使用unset
命令可以删除变量。
shell变量
shell变量即特殊变量
特殊变量列表
运行实例:
1 |
|
$*和$@的区别
1 | $* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。 |
环境变量
bash shell用一个称作环境变量
的特性来存储有关shell会话和工作环境的信息。
它允许我们在内存中储存数据,以便运行在shell上的程序和脚本访问。
在bash shell中,环境变量分为两类:
- 全局变量
- 局部变量
全局环境变量
全局变量不仅对shell会话可见,对所有shell创建的子进程也可见;
局部变量仅对他们创建的shell可见。
查看全局变量用printenv
命令:
如只要显示单个环境变量的值,可用echo
命令,当引用环境变量时,必须在环境变量的名称前放置一个$
符号
局部环境变量
即上文的局部变量!!!
查看局部变量的列表有些复杂,Linux并没有一个命令只显示局部变量。set
命令会显示为某个特定进程设置的所有环境变量,包括全局变量。
除去全局变量剩下的就是局部变量了 = =
设置全局变量
创建全局变量的方法是先创建一个局部变量,然后再将它通过export
命令导入到全局变量中。
设置PATH环境变量
PATH环境变量是Linux系统上造成最多问题的变量。它定义了命令行输入命令的搜索路径,如果找不到命令,它会产生一个错误。
PATH中的目录之间使用 :
分隔,如果想要添加新的目录到现有的PATH环境变量,无需重头定义,只需要像这样即可:
1 | $ PATH=$PATH:/home/user/test |
也可以这样添加
1 | $ PATH=$PATH:. |
这个单点符代表将当前目录添加到PATH变量中去。
Shell替换
特殊字符替换
如果表达式中包含特殊字符,Shell 将会进行替换。例如,在双引号中使用变量就是一种替换,转义字符也是一种替换。
1 |
|
命令替换
命令替换是指Shell可以先执行命令,将输出结果暂时保存,在适当的地方输出。
命令替换的语法:
1 | `command` |
1 |
|
输出
变量替换
变量替换可以根据变量的状态(是否为空、是否定义等)来改变它的值
1 |
|