Linux学习[15]bash学习深入1---bash的功能---变量详解

文章目录

  • 前言:
  • 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
Linux学习[15]bash学习深入1---bash的功能---变量详解_第1张图片

但是这个指令的$符号后面跟的是一个变量名称,变量名称后面不可以直接接字符,如果输出PATH变量的值再加上IS
echo $PATHIS是不对的,这表示输出PATHIS变量的值。
所以针对于这种情况我们一般输出变量都需要加上{}
比如下面的echo ${PATH}IS
Linux学习[15]bash学习深入1---bash的功能---变量详解_第2张图片


变量的赋值一般是用等号赋值,赋值的时候有很多应用场景,这里列个表,方便查看。

实例 备注/说明
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也是环境变量的一种。
Linux学习[15]bash学习深入1---bash的功能---变量详解_第3张图片

Linux学习[15]bash学习深入1---bash的功能---变量详解_第4张图片
其中部分字段解释如下:

字段名 含义
HOME 使用者的主文件夹
SHELL 当前的环境使用的SHELL是哪一个程序,即是/bin/bash脚本还是其他脚本程序
HISTSIZE 与历史有关的指令,系统保存我们曾经输入过的值的数量就是由这个决定
PATH 可执行文件的搜索路径,目录与目录之间用:分隔
LANG 语系。我这里的ubuntu默认是en_US.UTF-8,不同语系对应的编码方式是不一样的。比如A编码是AaBbCc…Zz;B编码是ABCD…Zabcd…z,编码的不同就会在程序代码写法上有区别。

{变量范围}

我们自定义的变量就成为自定变量。
用C语言里面的变量类比一下,环境变量和自订变量的区别大概就是全局变量和局部变量的区别。

自定变量通过export就可以变成环境变量,就能够被子程序引用。


总结

这篇博客节选了书中关于bash变量的部分内容并结合自己的学习体验进行了记录,有些不常用的用法我这里没做一定的记录。

你可能感兴趣的:(#,Linux学习系列,bash,linux,学习)