原文地址:https://mp.weixin.qq.com/s/RSfrvmk7OF2ytwsmp7fGOw
事物最外面的一层我们称之为壳(Shell),例如贝壳、地壳。壳是事物与观察者信息交流的媒介,观察者通过壳可以直观地感受、描述事物。计算机同样是如此,普通用户无法直接操作计算机的内核,也需要借助Shell这个媒介来与计算机内核进行交互。不同的操作系统拥有不同的Shell,对于Windows系统,图形界面的Windows即是其shell;而对于Linux系统,其Shell称之为Bash。
——初识Bash
Bash内置的用户属性变量多属于环境变量,类似于全局变量,例如PATH、HOME、MAIL等,环境变量只能通过修改用户配置文件(/.bashrc或/.bash_profile)来进行修改。环境变量通常以大写字符来表示,可以使用echo$命令来显示变量,示例如下:
我们可以使用env命令来查看系统默认的环境变量:
其中有些环境变量比较常用,例如RANDOM变量是常用的随机数生成变量(0~32767),示例如下:
此外,环境变量PATH非常有用,可以添加常用软件的绝对路径来方便软件的调用;环境变量?(是的,就是一个问号)为上一个执行的命令所传回的值,一般成功执行,传回0,发生错误,就会回传错误代码。
用户可以根据自己需要自定义变量,属于局部变量,使用“=”进行赋值(等号两边不能有空格),变量名由数字和字母组成且以字母开头,赋值内容若包含空格等特殊字符需加双引号,双引号内也可以引用其他变量,特殊字符可以使用反斜杠“\”来转义。可以使用echo命令来显示变量,示例如下:
可以使用declare来声明变量为数值(-i)类型,例如生成个位数的随机数:
如果不事先声明,赋值会默认是字符串:
取消已经赋值的变量可以使用unset命令,示例如下:
一般一个变量只能在一个子程序中运行,export命令可以将变量变为环境变量,从而可以在其它子程序中运行,示例如下:
使用set命令可以查看当前环境所有变量(包含环境变量和自定义变量):
如果要实现计算机与用户的交互,让用户用键盘来输入变量内容,可以使用read命令,示例如下:
还可以设定提示字符以及限定输入时间:
数组也即向量,可以通过变量名与index的方式赋值,示例如下:
还可以通过“@”作为index提取所有变量:
还可以直接通过括号来进行赋值,不同元素间空格隔开:
注意,默认的index是从0开始的!
在赋值的时候,可以直接使用“$”或“${}”来引用变量和数组,可以使用“$()”引用命令结果,使用,示例如下:
变量可以直接累加:
可以通过“#”来从左到右删除变量内容,通过“%”来从右到左删除变量内容,除标记字符外其他字符可以通过“*”(多个字符)或“?”(单个字符)来指代:
可以通过“/”将旧字符串替换为新的字符串:
假如标记字符存在于多处,“#”为删除最短字符,“##”为删除最长字符,同样适用于“%”和“/”,示例如下:
通过shell脚本,也可以引用其他软件和脚本的运行结果来进行变量赋值与运算:
在变量运算的时候,可以通过declare命令声明变量类型,不同类型变量类型例如字符串和数值,其运算规则不同,具体如下所示:
其他参数选项如下所示:
-a:声明为数组;-x:相当于命令export;-r:声明为只读变量。
在Bash中,任何命令(包括管道命令)加上反单引号``之后都可以直接作为变量引用,其值为命令运行结果,可以为变量赋值,例如我们列出目录下所有txt文档并将其储存在变量txt里面:
这一点对于以后的Shell脚本编写非常有用。下面我们可以列出某文件的文件名以及其行数:
利用这种用法可以很方便的计算序列数目。
Linux平台的大多数文件均是ASCII的纯文本文件,在Linux中Vi/Vim是强大的文本处理工具,Vim可以看成Vi的升级版。Vim有三种模式:一般模式、编辑模式、命令行模式。使用vim创建或打开已有文本文件,示例如下:
此时即进入一般模式,这时候可以进行删除、复制等操作(最好不要复制),但是无法输入内容:
当按键盘上“a”、“i”键,下方显示“INSERT”,开始进入编辑模式:
可以使用键盘输入,也可以从其它文件(txt、word、excel等)中直接复制粘贴过去:
编辑完毕后,按“Esc”键退出编辑模式,又进入一般模式。当输入“:”、“/”“?”是便会移动到最下方的命令行进入命令行模式。输入:wq命令按回车键保存并退出。如果保存还未命名的文件,:wq空格后输入文件名(若已命名则是另存为),若是不想保存修改,则输入:q!命令。
在一般模式里,x/X为向后/前删除一个字符,yy、dd为复制、删除光标所在行,p为将复制内容粘贴到光标下一行。在命令行模式里,Vim有很强大的文本处理功能,可以对文本进行批量处理,具体如下。
输入“/+内容”或者“?+内容”来搜索想查找的内容:
按键“n”或者“N”(即Shift+n)可以向下或向上查找内容。在命令行进行查找替换。查找第2行到第4行的第一个is并替换为ia,其命令为:2,4s/is/ia/:
其中s为替换的意思,若是第三行全部is替换为ia,则为:2,4s/is/ia/g:
若是最后一行行号可以用“$”来表示,若是删除,也可以实现:
此外,输入:set nu/nonu可以设置显示/不现实行号: