Linux BASH基础特性

文章目录

  • bash基础特性之:命令历史
  • globbing:文件名通配(整体文件名匹配,而非部分)
  • bash的特性之:变量
  • bash特性之多命令执行:

bash基础特性之:命令历史

**history命令**

shell进程会在其会话中保存之前用户提交执行过的命令
# history
	定制history的功能,可通过环境变量实现
		$HISTSIZE:shell进程可保留的命令历史的条数,默认为1000条
		$HISTFILE:持久保存命令历史的文件
				注意:命令历史文件不会保存本次登录shell后所执行的命令,每次退出时都会自动的将内存中的命令写入至命令历史文件中去
				history命令显示出来的命令是包含命令历史文件中及内存中的所有命令
				cat命令历史文件仅显示上次登出以前的所有命令
		$HISTFILESIZE:定义命令历史文件最多保留多少条历史命令
		注意:当历史命令及历史命令文件达到最大值,将新的命令加入进去且将之前的第一个命令以此删除,以此类推

	格式:history [-c] [-d 偏移量] [n]
	 			或 history -anrw [文件名]
	 			或 history -ps 参数[参数]
	 			-c:清空命令历史,仅删除内存中的历史命令,不会删除命令历史文件中的命令
	 			-d:删除指定命令
	 			-r:将命令历史文件中的内容读取至内存命令历史中
	 			-w:把历史文件中的命令追加至历史文件中
	 			#:history #,#为数字,表示显示最近#条命令

**调用命令历史列表中的命令:**

	!#:再一次执行历史列表中的第#条命令
	!!:再一次执行上一次命令
	!STRING:再一次执行命令历史列表中最近一个以STRING开头的命令 STRING:字符串
		注意:命令的重复执行有时候需要依赖幂等性,幂等性就是重复N次效果是相同的,不能出错


**调用上一条命令的最后一个参数:**

	快捷键:ESC , .
	字符串:!$

**控制命令历史记录的方式:**

	环境变量:HISTCONTROL
		其取值可以有三个:
			默认:ignoredups:忽略重复的命令
						lgnorespace:忽略以空白字符开头的命令
						ignoreboth:以上两者同时生效
			修改变量的值:
				NAME="VALUE"
				注意:仅对当前shell有效

 **命令的执行状态结果:**
	bash通过状态返回值来输出此结果
		成功:0
		失败:1-255
		命令执行完成之后,其状态返回值会保存于bash的特殊变量$?中;
		命令正常执行时,有的还会有命令返回值;根据命令及其功能不同,结果各不相同

**引用命令的执行结果:**
	$(COMMAND)
	`COMMAND`
	建议使用$(COMMAND)

**引用:强引用;弱引用**
	强引用:' '
	弱引用:" "


**快捷键:**
	ctrl+a:跳转至命令行行首
	ctrl+e:跳转至命令行行尾
	ctrl+u:删除行首至光标所在处之间的所有字符
	ctrl+k:删除光标所在处至行尾的所有字符
	ctrl+l:相当于clear;清屏

**命令补全:**
	shell程序在接收到用户执行命令的请求,分析完成之后,最左侧的字符串会被当作命令
	查找机制:
		首先查找别名,如果没有就下一步
		查找内部命令,如果没有就下一步
		根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名
	给定的打头字符串如果能唯一标识某命令的程序文件,则直接补全,否则
	如果不能唯一标识某命令程序文件,再击一次tab键,会给出列表

**路径补全:**
	在给定的起始路径下,以对应路径下打的打头字串逐一匹配起始路径下的每个文件
	tab:
		如果能唯一标识,则直接补全
		否则,再一次tab,则给出列表

**命令行展开:**
	~:自动展开为用户的家目录,或指定的用户的家目录
	{ }:可承载一个以逗号分隔的路径列表,并将其展开为多个路径
	
	问题一:如何创建/tmp/x/y1  /tmp/x/y2  /tmp/x/y1/a  /tmp/x/y1/b ?
		mkdir -pv /tmp/x{y1/{a,b},y2}
	问题二:如何创建a_c  a_d  b_c  b_d
		mkdir -pv {a,b}_{c,d}


**命令的状态执行结果:**
	bash通过状态返回值来输出此结果
		成功:0
		失败:1-255
		命令执行完成之后,其状态返回值会保存于bash的特殊变量 $? 中
		命令正常执行时,有的还会有命令返回值
			根据命令及其功能不同,结果各不相同

**引用命令的执行结果:**
	$(COMMAND)
	`COMMAND`
	建议使用 $(COMMAND)

**引用:强引用,弱引**
	强引用:' '
	弱引用:" "


**快捷键:**
	Ctrl+a:跳转至命令行行首
	Ctrl+e:跳转至命令行行尾
	ctrl+u:删除行首至光标所在处之间的所有字符
	Ctrl+k:删除光标所在处至行尾的所有字符
	Ctrl+l:清屏;相当于clear

globbing:文件名通配(整体文件名匹配,而非部分)

匹配模式:元字符
*:匹配任意长度的任意字符
?:匹配任意单个字符;注意:任意单个字符是必须得有一个字符
[ ]:匹配指定范围内的任意单个字符
	例如:[abcd]、[123ok]
	有几种特殊格式:
		[a-z]、[A-Z]、[0-9]、[a-z0-9]、[abclsk]
		注意:范围内的字符不区分大小写,比如上边前两个,只有专门的指定范围才区分大小写
[[:upper:]]:任意单个大写字母
[[:lower:]]:任意单个小写字母
[[:alpha:]]:所有字母,相当于[a-z]、[A-Z]
[[:digit:]]:所有任意单个数字
[[:alnum:]]:所有任意单个的字母或数字
[[:space:]]:任意单个空白字符
[[:punct:]]:任意单个标点符号
[^]:匹配指定范围外的任意单个字符
	例如:[^[:upper:]]:匹配大写字母以外任意单个字符和数字,只要不是大写字母就行
	[^0-9]:匹配任意字符除0-9数字

bash的特性之:变量

程序由指令和数据组成 指令由程序文件提供 数据:IO设备、文件

程序:算法+数据结构

变量名+指向的内存空间=变量

变量赋值:NAME=VALUE
	
变量类型:存储格式、表示数据范围、参与的运算

编程语言:强类型变量、弱类型变量
bash shell默认把所有变量统统视作为字符类型、不支持浮点类型、bash中的变量无需事先声明;相当于,把声明和		赋值过程同时实现
声明:类型、变量名

变量替换:把变量名出现的位置替换为其所指向的内存空间中的数据
变量引用:${VAR_NAME}、$VAR_NAME
变量名命名规则:变量名只能包含数字、字母和下划线,且不能以数字开头;见名之意,命名机制遵循某种法则,	不能使用程序的保留字,例如if、else
bash变量类型:
本地变量:作用域仅为当前shell进程
环境变量:作用域仅为当前shell进程及其子进程
局部变量:作用域仅为某代码片段(函数上下文)
位置参数变量:向执行脚本的shell进程传递的参数
特殊变量:shell内置的有特殊功用的变量
变量赋值:
	本地变量:
		变量赋值:NAME=VALUE
		变量引用:${NAME},$NAME
		" " :双引号是弱引用;变量名会替换为其值
		' ' :单引号是强引用;变量名不会替换为其值
		查看变量:# set 命令
		撤销变量:# unset NAME
			注意:此处非变量引用
	环境变量:
		变量赋值:
			(1)# export NAME=VALUE
			(2)# NAME=VALUE 
					 # export NAME
			(3)# declare -x NAME=VARLUE
			(4)# NAME=VALUE
					 # declare -x NAME
			变量引用:${NAME},$NAME
			注意:bash内嵌了许多环境变量(通常为大写字符),用于定义bash的工作环境
			例如:PATH/HISTFILE/HISTSIZE/HISTFILESIZE/HISTCONTROL/SHELL/HOME/UID/PWD
			查看环境变量:
				export,declare -x,printenv,env
			撤销环境变量:# unset NAME
	只读变量:
		(1)declare -r NAME
		(2)readonly NAME
		 只读变量无法重新赋值,并且不支持撤销;存活时间为当前shell进程的生命周期,随shell进程终止而终止

bash特性之多命令执行:

# COMMAND1;COMMAND2;COMMAND3;COMMANDN;COMMAND;...

逻辑运算:
	运算数:真或假
					真:true,yes,on,1
					假:false,no,off,0
	与运算:&&
				1 && 1 = 1
				1 && 0 = 0
				0 && 1 = 0
				0 && 0 = 0
	或运算:||
			 	1 || 1 = 1
			 	1 || 0 = 1
			 	0 || 1 = 1
			 	0 || 0 = 0
	非运算:!
				! 1 = 0
				! 0 = 1
	短路法则:
			# COMMAND1 && COMMAND2
			COMMAND1为“假”,则COMMAND2不会执行
			否则,COMMAND1为“真”,则COMMAND2必须执行
			
			# COMMAND1 || COMMAND2 
			COMMAND1为“真”,则COMMAND2不会再执行
			否则,COMMAND1为“假”,则COMMAND2必须执行

你可能感兴趣的:(Linux)