【Linux】bash基础特性


1. bash初识

Shell程序是独特的程序,这个程序提供了一个界面(就那黑乎乎的命令行界面,即Linux的终端界面),用户通过这个界面访问操作系统内核的服务,从而解析用户提供的命令。而bash(Bourne Again Shell)是众多Shell的一种,也是大部分Linux系统的默认Shell。

用户
Shell
内核
底层硬件

2. bash特性

2.1 命令相关

2.1.1 命令历史:history

shell进程会保存此前用户用过的命令,利用history命令可查看或者设置命令历史相关参数。

  • history的一些常用选项:
      history [OPTIONS]
	-d:delete,删除历史命令中指定的命令;
	-c:clear,清空命令历史;
	-a:add,手动增加当前会话缓冲区的命令历史至历史文件中;
	n:number,显示最近使用的n条历史命令

bash不单可以显示出命令历史,关键是还可以调用之前用过的命令,配合Tab键使用更佳。

  • 调用历史命令:
	!#:重复执行第#条命令
	!!:重复执行上一条命令,这个比较常用
	!string:重复执行最近一次以string(可变)开头的命令,这个比较常用
	!$:调用上一条命令的最后一个参数,好吧,这个也好用

若要控制命令历史的记录方式,可在/etc/prfofile配置文件中更改HISTCONTROL环境变量,其中

  • 控制命令历史的记录方式:
	ignoredups:忽略重复的命令,连续且相同方为“重复”
	ignorespace:忽略所有以空白开头的命令
	ignoreboth:等于以上两者之和

其他history命令相关环境变量

  • history命令相关环境变量:
	HISTSIZE:命令历史记录的条数
	HISTFILE:~/.bash_history,命令历史文件
	HISTFILESIZE:命令历史文件 记录历史的条数

2.1.2 命令、路径补全:Tab

在谈及命令补全之前,首先我们得明白什么是命令。当我们发起命令的时候,请求内核将某个二进制程序运行为一个进程,此时程序由静态变为动态。命令本身也是一个可执行的程序文件,二进制格式的文件,也有可能会调用共享库文件。一般这些命令文件都保存在bin,sbin,lib这些目录中。

  • bash中的执行命令可以分为两种
	内部命令(builtin):内部命令没有具体的二进制文件,而是由内核提供;
	外部命令:bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给
			定命令名命名的文件,第一次找到即为要执行的文件。

bash命令补全的方法,当命令按一半,发现不小心忘记命令全称或完全忘记了命令名时,只要按下命令前几个字母,再按下Tab键,即会显示用户给定的字符串所对应的命令,当用户给定的字符串为开头的命令不唯一时,则再次按Tab键就会给出以字符串开头的命令列表。Tap键用好了,事半功倍。

你也可以不敲字符串,直接按Tap键,会有惊喜哦。

路径补全把用户给出的字符串当作路径开头,并在指定上级目录下搜索以指定的字符串开头的文件名,如果唯一,则直接补全,否则,再次Tab键会给出以字符串为开头的路径列表


2.1.3 命令别名:alias

命令别名类似于个性化设置,一些常用且繁琐的命令可以在不和其他命令的名称冲突的情况下,给它设置成一个相对简单的命令。

举个例子,编辑网卡配置文件的时候,可定义如下别名
alias cdnet='cd /etc/sysconfig/network-scripts/'

但是如此定义的命令别名只对当前shell(当前用户)有效,即只配置在~/.bashrc中,若想对所有用户有效,则需要定义在配置文件中,即/etc/bashrc中。


2.1.4 命令哈希:hash

linux系统下会有一个hash表,当你刚开机时这个hash表为空,每当你执行过一条命令时,hash表会记录下这条命令的路径,就相当于缓存一样。第一次执行命令shell解释器默认的会从PATH路径下寻找该命令的路径,当你第二次使用该命令时,shell解释器首先会查看hash表,没有该命令才会去PATH路径下寻找,这样可以大大提高命令运行的速度
  hash [OPTIONS] ...


2.1.5 I/O重定向

输入/输出设备(I/O device)是计算机系统中的四大基本组成(运算器、控制器、存储器、输入及输出设备)之一,其重要性不言自明。在Linux中我们访问文件的时候是通过键盘输入某个文件名,{对于我们(用户)来说是是一个文件名},然后在Linux系统中通过内核来识别文件名所对应的一个数字(文件描述符,file descripter),从而访问文件。

Linux中一切皆文件,设备也可被描述为文件。一般在Linux系统定义的标准输入(stdin,standard input,命令在执行时所要的输入数据通过它来取得)设备为键盘,对应的文件描述符为0,对应句柄位置为/proc/slef/fd/0;标准输出(stdout,standard output,命令在执行后的输出结果从该端口送出)设备为显示器,对应的文件描述符为1,对应句柄位置为/proc/slef/fd/1;标准错误输出(stderr,standard error output,命令执行时的错误信息通过该端口送出)设备为显示器,对应的文件描述符为2,对应句柄位置为/proc/slef/fd/2。

标准输入/输出可以理解为Linux系统默认的输入/输出,而I/O重定向可以改变标准输入/输出的位置。

输出重定向: 简单来讲可以把本来输出到屏幕上的"hello,world"输出到随便哪个文件等作用。
  COMMAND >NEW_POS,COMMAND >>NEW_POS

	>:覆盖重定向,目标文件汇总的原有内容会被清除
	>>:追加重定向,新内容会追加之目标文件尾部
		set -C:禁止将内容覆盖输出至已有文件中,如果需要强制覆盖,则使用:>|
		set +C:关闭覆盖已有文件的功能。2>:覆盖重定向错误输出流;2>>:追加重定向错误输出流

例子:

  1. ls /etc/ > test.0,表示将/etc/目录下的文件名覆盖输入至test.0中。

输入重定向:<,<<,输入重定向这个不常用,可起到读取文件内容等作用。

例子:

  1. cat < test.1 > test.2,这个命令表示从test.1文件中读取内容覆盖输出至test.2中;
  2. 又如tr 'a-z' 'A-Z' < /etc/fstab,表示将/etc/fstab文件中的小写字母转化为大写字母。

**注意:**重定向字符(<,<<,>,>>)后面若没文件,即先执行字符后的内容,系统会自动先创建文件。

欲知更详细内容可参考
(https://www.cnblogs.com/divent/p/5773861.html)
(https://blog.csdn.net/freeking101/article/details/81212207)


2.1.6 管道及多命令执行

管道(|)可以将一个命令的输出导向另一个命令的输入,从而让两个(或者更多命令)像流水线一样连续工作,不断地处理文本流。
  COMMAND 1|COMMAND 2|COMMAND 3...

Linux中还有其他类似的多命令执行的方式,如

每个命令之间用;隔开,其中各命令的执行结果不会影响其它命令的执行。也就是说各个命令都会执行, 但不保证每个命令都执行成功。

每个命令之间用&&隔开,若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。

每个命令之间用||隔开||是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功 一条命令为止。


2.2 文件相关

2.2.1 文件名通配:glob

glob用于实现文件名通配,显示指定条件的文件,即如果显示以a开头的所有文件,至于a后面是什么我们不管,因此这里有一个通配,常用的通配符有*、?、[](可通过查询glob的帮助文档来查看有哪些通配符,man 7 glob)

glob通配符:

	* 表示任意长度的任意字符
	? 表示任意单个字符
	[]  匹配指定范围内的任意单个字符
	[0-9]  任意单个数字
	[a-z]  任意单个字母(不区分字母的大小写)
	[a-z0-9]  任意单个字母或数字
	[^]  匹配指定范围外的任意单个字符
	[:alnum:]  表示所有的字母和数字
	[:alpha:]  表示所有的字母(不区分大小写)
	[:digit:]  表示所有数字
	[:lower:]  表示所有的小写字母
	[:punct:]  表示所有的标点符号
	[:space;]  表示所有的空白字符
	[:upper:]  表示所有的大写字母

2.3 脚本编程相关

2.3.1 变量

bash中变量可分为

本地变量:生效范围为当前shell进程,对当前shell之外的其他shell进程包括当前的shell的子shell进程均无效;

环境变量:生效范围为当前shell进程及子进程;

局部变量:生效范围为当前shell进程中某代码片段(通常指函数);

位置变量:$1,…,$n,${10}来表示,用于放脚本在脚本代码中调用通过命令行传递给他的参数;

特殊变量
$?:上个命令执行成功与否的结果
$0:表示命令本身
$#:传递给脚本参数的个数
$*:传递给脚本的所有参数
$@:引用传递给脚本的所有参数


2.4 其他

2.4.1 快捷键

bash的快捷键:

	ctrl+I  相当于clear清屏
	ctrl+a  跳转至命令开始处
	ctrl+e  跳转至命令结尾处
	ctrl+c  取消命令的执行
	ctrl+u  删除命令行首至光标所在处的所有内容
	ctrl+k  删除命令行所在处至命令行尾的所有内容

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值