【Slog】shell编程基础——特殊字符&变量
作为一门编程语言,关键词和变量是逃不掉的。如果一个字符不仅具有字面意义,而且具有元意(meta-meaning),就称它为特殊字符。特殊字符同命令和关键词(keywords)一样,是bash脚本的组成部分。
以下为本文的目录结构(非链接跳转)
特殊字符
仅有常用特殊字符
#井号相关特殊字符
# —— 注释
符号 | 简述 |
---|
# | 注释符号,注意与#!(shabang)的区别 |
#别看了,这就是一行注释,是不会被你编译运行的
$# —— 参数个数
#!/bin/bash
echo $#
如上图所示
当只跟随一个a字母的时候,echo $#将输出1。
当跟随了a、b、c三个字母的时候,echo $#将输出3。
$@ —— 显示参数
#!/bin/bash
echo $@
; —— 命令分隔
上图中使用了echo -n来取消自动换行,记得最后一个使用echo,不然前面的[xxx@xxx xxx]$出现在一行上
;; —— 双分号,case条件语句终止
. —— 等价source
符号 | 简述 |
---|
. | 句点,等价于source。bash的内建命令 |
. —— 正则表达式的句点,匹配符
符号 | 简述 |
---|
. | 正则表达式中的句点,匹配符,匹配任意单个字符 |
" " —— 部分引用
符号 | 简述 |
---|
“ ” | 双引号,部分引用,上一节echo里边介绍过 |
' ' —— 全引用
符号 | 简述 |
---|
‘ ’ | 单引号,全引用,上一节echo里边介绍过 |
| —— 正则表达式中的或
& —— 后台执行
&& —— 返零执行
ls && echo "ok"
|| —— 返非零执行
! —— 取反
$ —— 美元符号
\ —— 转义符
变量
变量(variable)在编程语言中用来表示数据。它本身只是一个标记,指向数据在计算机内存中的一个或一组地址,在该地址下存储下了与该变量相对应的值。变量通常出现在算术运算,数量操作及字符串解析中。
Shell中的变量和变量的命名有其自己的规则
变量类型
运行shell时,会同时存在三种变量:
- 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
- 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
- shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
变量赋值
shell中变量赋值最大的特点为,其赋值符号=的左右两侧不能够有空格。
变量命名规则
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
- 中间不能有空格,可以使用下划线(_)。建议使用“驼峰命名法”
- 不能使用标点符号
- 不能使用bash里的关键字(可用help命令查看保留关键字)
使用变量
其实变量的使用,已经在之前的文章和上文提到和展现过了。使用$符号来引用变量,如下图
其中需要注意echo后用单引号或者双引号的区别:
- 单引号为全引用,即输出字符的字面意思即可
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
- 双引号为部分引用,$、!等需要转义使用
删除变量
删除不想要或者不需要的变量,如下图
unset a
可以看见打印出来仅有空格没有任何输出,说明没有该变量及其对应的值了
只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
如果尝试改变myHeart这个只读变量,其将会报错。myHeart不变,嘿嘿~~
#!/bin/bash
2
3 myHeart="you"
4 readonly myHeart
5 myHeart="other people"
本小节结束,待更新。。。
参考资料
- 实验楼课程——高级 Bash 脚本编程指南
- 《Linux命令行与shell脚本编程大全(第三版)》 Richard Blum & Christine Bresnahan
- 《Linux Shell脚本攻略(第二版)》 [印] Shantanu Tushar / [印] Sarath Lakshman
- Advanced Bash-Scripting Guide Mendel Cooper
- 菜鸟教程——shell教程