了解什么是shell吗?
知道如何查询当前系统支持的shell版本吗?
了解如何判断某个指令是否是bash的内置指令吗?
了解Linux的变量吗,知道如何定义与删除变量吗,知道如何赋值吗,知道如何获取变量的内容吗?
知道如何为变量设置类型吗,了解宣告与阵列等概念吗?
知道如何通过键盘输入为变量赋值吗?
了解如何查询环境变量吗?
知道如何将自定义的变量转换为环境变量吗?
了解变量的有效范围吗?
知道如何设置别名以及取消别名吗?
1.shell基础
Linux一般默认的shell为bash
我们知道,管理整个计算机硬件的其实是操作系统的核心(kernel),这个核心是需要被保护的!所以我们一般使用者只能通过shell来跟核心沟通,以让核心来执行我们想要执行的工作。
Linux有多少shell呢,为什么我们要使用bash?下面来了解以下
1.硬件、核心与shell
总结一下:只要能够操作用户程序的接口都能够称为壳程序。狭隘的壳程序指的是命令行方面的软件,包括本章介绍的bash。广义的壳程序包括图形接口的软件!因为图形接口其实也能够操作各种应用程序来调用核心工作啊!
2.系统的合法shell与/etc/shells功能
1.查看当前Linux中的包含的shell
/etc/shells文件包含了当前Linux系统可以使用的shell(一般有多个版本)。
根据结果可知:当前系统包含2种shell。
虽然各家的shell功能差不多,但是语法还是有一定的区别的,这里推荐使用bash。
了解了shell的版本,接下来了解一下用户何时会获得shell呢,以及获得的shell是哪种版本的呢?
2.shell获得的时机与版本
当用户登录的时候,系统就会分配一个shell给用户,而这个登录取得的shell就记录在/etc/passwd这个文件内!这个文件内容是啥?看下图:
如上图所示:在每一行的最后一个数据,就是你登录后可以取得的默认的shell。root与自己注册的用户(zxp_user等)都是bash。
3.bash shell的功能
1.bash优点
《1》指令偏修能力
bash能记录下用户使用过的指令,只要在命令行上按“上下键”就能够找到前/后一个输入的指令。默认的指令记忆功能可达到1000个。
那么这些指令被记录在哪里呢?在你的主目录(执行 cd ~进入你的主目录)中的.bash_history文件内。
注意:.bash_history文件记录的是前一次登录以前执行过的指令,而现在登录所执行的指令都暂存于内存中,当你登出系统后,该次操作的诸多指令才会记录到.bash_history文件中。
《2》指令与文件补全
《3》指令别名设置功能
设置别名指令:alias
上图中讲述了如何设置别名,下面了解一下如何取消别名,指令如下:
指令:unalias lm //取消别名lm
《4》程序化脚本
《5》万用字符
* 就是万用字符,* 代表0或多个字符。
下面介绍常用的万用字符:
2.查询指令是否为bash的内置指令
指令:type
当我需要知道使用的指令来自哪里(非bash提供的与bash提供的)时,就可以使用type指令查看。
4.shell变量功能
1.变量的可变性与方便性
举例说明变量的可变性与方便性:
2.影响bash环境操作的变量
其实就是环境变量,比如PATH、HOME、MAIL、SHELL等。
3.变量的取值与创建
注意:echo的功能不仅仅只是定义变量与获取变量的内容;echo还有很多其他的功能。
1.获取变量内容
指令:echo $variable //使用echo获取变量内容,变量名前必须加上美元符号$。
实例如下
2.创建变量以及设置内容
指令:echo $myname //如果这个变量不存在,那么就创建一个变量(内容为空);存在就显示变量内容
指令:myname=zxp //将字符串“zxp”赋值给变量myname
3.删除变量
指令:unset //删除变量或函数
4.变量键盘读取、阵列与宣告
《1》键盘读取
指令:read //变量键盘读取
该指令可以读取来自键盘输入的变量。
read之后不加任何参数,直接加上变量名,那么下面就会出现一个空白行等待你的输入。
《2》宣告
就是声明变量类型。
declare与typeset是一样的功能,就是在“宣告变量类型”。如果使用declare后面没有接任何参数,那么bash就会将所有变量名与内容统统显示出来,就像是set一样。下面看一下declare指令语法:
因此,当你需要非字符串类型的变量是,你就得进行宣告了,即声明变量的类型。
《3》阵列
阵列就是数组。
如何创建一个数组呢?首先使用echo指令创建一个变量,使用declare指令声明变量的类型,之后为数组变量的元素赋值,最后使用declare指令查询变量类型和内容。
指令如下:
echo $myArray //创建变量myArray
declare -a myArray //声明变量的类型为数组(即阵列)
myArray[]=zhangsan //为数组第一个元素赋值
myArray[]=lisi //为第二个元素赋值
declare -p myArray //显示变量myArray的类型与内容
5.变量内容的删除、取代与替换
注意是内容的删除、取代与替换,注意不是变量的删除。
变量除了可以直接she设置来修改原来的内容之外,还可以通过其他方式进行修改。如下所示:
1.变量内容的删除与取代
6.与文件系统及程序的显示关系
指令:ulimit
该指令的作用究竟是干嘛呢?我们想象一下:
接下来了解一下ulimit指令的用法:
已将了解了该指令的用法,那么现在实践一下:
总结一下:你如果想让使用者创建的文件不要太大时,可以使用ulimit指令限制使用者创建文件的大小,利用 ulimit -f 指令就可以设置。
6.bash语法总结
4.环境变量
查询环境变量:env
查询环境变量与自定义变量:set
5.bash shell的操作环境
1.路径与指令搜索顺序
2.bash的环境配置文件
在介绍bash的环境配置文件之前,必须先了解login shell与non-login shell。
我们经常会使用non-login shell的情况:在终端使用“su 用户名”切换用户。
如果你想要使用su命令以login shell的方式切换用户那么该怎么办:使用命令“su - 用户名”。
这两种登录方式下取得bash读取的配置文件不尽相同,接下来了解login shell与non-login shell读取的配置文件:
《1》login shell读取的配置文件
会读取两个配置文件
那么下面聊一下profile这个配置文件,通过cat查看文件内容发现会设置以下变量: