文章目录
- 前言:
- 1. bash功能
- 2. 变量
- 2.1 变量赋值
- 2.2 unset取消变量
- 2.3 环境变量
- 总结
前言:
之前在学树莓派相关内容的时候,对bash脚本的简单上手做了一个总结,并且归纳到下面三个博客。
当时参考的书为《从树莓派开始玩转linux》,后面这个linux学习系列相关是基于《鸟哥的linux私房菜基础学习篇》。后者比前者更加详细,因此接下来几篇博客算是对之前的3,4,5
三篇的补充。
Linux学习[3]—shell脚本之bash脚本—变量赋值引用&数学运算&简易脚本编写
Linux学习[4]—shell脚本之bash脚本—简单函数与调用
Linux学习[5]—shell脚本之bash脚本—判断&选择&循环
1. bash功能
我们在linux控制台中,按↑ ↓
的时候,就可以在之前输入过的指令中进行切换,这是由于bash具有命令编修能力,即history功能。
我们如果要进入/home/abcdefghijklmn/
这个目录,我们我们其实只需要输入/home/abcd+[tab]
,那么后面的目录名称就会自动补全。如果目录有多个abcd开头的,你可能需要按几次tab键,把所有可以补全的备选项列出来,然后再输入几个字符,按tab补全。
这个补全的功能其实也是bash强大功能的一种。
我们通过ls -al
列出当前目录下的所有文件的详细信息,包含隐藏文件。这个命令的本体是ls
,后面跟了两个选项-a,-l
。我们完全可以把这一个整体命名为lm,例如:alias lm='ls -al'
。这样设置以后,后面的输入lm之后,就相当于输入了ls -al。这个指令比较短,可能看不出来有什么好的,但是如果涉及到一些长长的指令,并且后期还需要经常用到话,取个别名效果还是非常显著的。
我们运行某一个程序的时候,如果中途想停止,使用ctrl+c即可停止。这是bash控制功能的体现。
我之前写的简单的bash脚本,其实就是shell scripts的一种,也是bash的程序化脚本功能。
后面bash涉及到一些管线命令,那么万用字符就能起到非常大的作用。其实我们平常接触到的很多代码都有万用字符的体现,比如*
表示任意0~无穷个字符。
bash的一些小技巧:
1.比如我们用cd
指令进入到一个非常非常多层的目录中去,往往一行写起来比较密整体也比较乱。那我们可以通过\+[enter]
的方式,进行换行输入。
下面的效果就等效于cd xxxxxxxxxx/yyyy-xilinx-5.24/gcc-linux-ar
,当然可以多分几行,这样显得更加规整一些。
2.另外,当你所需要下达的指令特别长,或者是你输入了一串错误的指令时,你想要快速的将这串指令整个删除掉,一般来说,我们都是按下删除键的。
组合键 | 功能 |
---|---|
[ctrl]+u/[ctrl]+k | 分别是从光标处向前删除指令串 ([ctrl]+u) 及向后删除指令串 ([ctrl]+k) |
[ctrl]+a/[ctrl]+e | 分别是让光标移动到整个指令串的最前面 ([ctrl]+a) 或最后面 ([ctrl]+e) |
2. 变量
2.1 变量赋值
用echo来输出变量,变量前加一个$
来取得变量的值。
例如我们常用的指令:echo $PATH
但是这个指令的$符号后面跟的是一个变量名称,变量名称后面不可以直接接字符,如果输出PATH变量的值再加上IS
用echo $PATHIS
是不对的,这表示输出PATHIS
变量的值。
所以针对于这种情况我们一般输出变量都需要加上{}
。
比如下面的echo ${PATH}IS
变量的赋值一般是用等号赋值,赋值的时候有很多应用场景,这里列个表,方便查看。
实例 | 备注/说明 |
---|---|
myname=edwinwzy | 给变量myname 赋值edwinwzy |
错误示例: myname = edwinwzy | 等号两边不能直接接空白字符 |
错误示例: 1myname=edwinwzy | 变量名称只能是英文字母与数字,但是开头字符不能是数字 |
myname=edwinwzy\$ | 这里给myname赋值edwinwzy$,但是$ 为特殊字符,所以需要用\ 来进行转换,将其转为一般字符 |
myname=$(uname -r) | 我们也可以把一个指令的输出内容作为变量的值,用$ 来取值 |
PATH=${PATH}:/home/bin | 我们在linux中对环境变量进行添加的时候,可以采用这样的赋值方式进行累加,即在原有的PATH加上后面的内容。 |
export myname | 变量赋值之后我们可以通过export使得变量变成环境变量,这样别的bahs脚本就可以使用这个变量 |
2.2 unset取消变量
对于一些变量如果设置错了,不想用了,可以使用unset来取消。
一般用法就是unset 变量名
例如:unset myname
2.3 环境变量
环境变量我个人的理解就是在你在终端输入一个命令,系统能够知道你这个指令对应的是用的什么功能。
比如自己手动装一个交叉编译链的工具,那么GCC和GDB其实都要手动添加到环境变量PATH (可执行文件的搜索路径)中去的,这样你在控制台输入gcc -v的时候,系统才会知道你想查看gcc的版本。
查看环境变量用到的指令是env
例如我们可以在虚拟机里面输入env
来查看当前的shell环境的所有变量与其内容。
下面是输入env之后的内容截取部分,可以看到PATH也是环境变量的一种。
其中部分字段解释如下:
字段名 | 含义 |
---|---|
HOME | 使用者的主文件夹 |
SHELL | 当前的环境使用的SHELL是哪一个程序,即是/bin/bash脚本还是其他脚本程序 |
HISTSIZE | 与历史有关的指令,系统保存我们曾经输入过的值的数量就是由这个决定 |
PATH | 可执行文件的搜索路径,目录与目录之间用: 分隔 |
LANG | 语系。我这里的ubuntu默认是en_US.UTF-8,不同语系对应的编码方式是不一样的。比如A编码是AaBbCc…Zz;B编码是ABCD…Zabcd…z,编码的不同就会在程序代码写法上有区别。 |
{变量范围}
我们自定义的变量就成为自定变量。
用C语言里面的变量类比一下,环境变量和自订变量的区别大概就是全局变量和局部变量的区别。
自定变量通过export就可以变成环境变量,就能够被子程序引用。
总结
这篇博客节选了书中关于bash变量的部分内容并结合自己的学习体验进行了记录,有些不常用的用法我这里没做一定的记录。