bash的基础特性:


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

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

命令行展开 ~:自动展开为用户的家目录,或指定的用户的家目录; {}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径: 例如:/tmp/{a,b} 相当于 /tmp/a /tmp/b


问题1:如何创建/tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a, /tmp/x/y1/b  ?
				~]# mkdir -pv /tmp/x/{y1/{a,b},y2}

问题2:如何创建a_c,a_d,b_c,b_d;

		~]# mkdir {a,b}_{c,d} -v
			mkdir: created directory `a_c'
			mkdir: created directory `a_d'
			mkdir: created directory `b_c'
			mkdir: created directory `b_d'

bash的命令执行状态结果

			bash通过状态返回值来输出此结果;
			成功:0
			失败:1-255
	命令执行完成之后,其状态返回值保存于bash的特殊变量$?中;
			~]# pwd
			/root
		~]# echo $?
				0

		命令正常执行时,有的还会有命令返回值;
				根据命令及其功能不同,结果各不相同;


		引用命令的执行结果:
			$(COMMAND)
			或’COMMAND‘
		Bash的基于特性:引用
			强引用:‘’
			弱引用:“”
			命令引用:‘’

	实例:	
			[root@localhost tmp]# ls
			a  hello
		
		[root@localhost tmp]# mkdir $(date +%H-%M-%S-%T)
		[root@localhost tmp]# ls
		20-51-40-20:51:40  a  hello
			Bash基础特性:快捷键
					Ctrl+a:跳转至命令行行首
					Ctrl+e:跳转至命令行行尾	
					Ctrl+u:删除行首至光标所在处之间的所有字符;
					Ctrl+k:删除光标所在处至行尾的所有字符;
					Ctrl+l:清屏,相当于clear

基础特性之 文件名通配

globbing:文件名通配

匹配模式:元字符
	* :匹配任意长度的任意字符
		 Pa* ,  *pa* , *pa , *p*a*
	? :匹配任意单个字符
			Pa?
	[] :匹配指定范围内的任意单个字符
				有几种特殊格式:
				[a-z],[A-Z],[0-9],[a-z0-9]
				[[:upper:]] :所有大写字母
				[[:lower:]]:所有小写字母
				[[:alpha:]]:所有字母
   			    [[:digit:]]:所有数字
				[[:alnum:]]:所有数字和字母
				[[:space:]]:所有空白字符
				[[:punct:]]:所有标点符号
				[^]: 匹配指定范围外的任意单个字符
				[^[:upper:]]
				[^0-9]
				[^[:alnum:]]

实例:

练习1:显示/var目录下所有以L开头,以一个小写字母结尾,且中间出现一位任意字符的文件或目录; 练习2:显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录; 练习3:显示/etc目录下,以非字母开头,后面跟一个字母及其它任意长度任意字符的文件或目录; 练习4:复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/itxuezhe.com目录; 练习5:复制/usr/share/man目录下,所有以man开头,后跟一个数字结尾的文件或目录至/tmp/man/目录下; 练习6: 复制/etc目录下,所有以.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/conf.d/目录下;

		练习1:~]# ls -d /var/l?[[:lower:]]
		/var/lib  /var/log

		练习2:~]# ls -d /etc/[0-9]*[^0-9]
		/etc/3ab23y

		练习3:~]# ls -d /etc/[^a-z][a-z]*
		/etc/8eabc

		练习4:~]# mkdir /tmp/maedu.com
		~]# cp -r /etc/m*[^0-9] /tmp/maedu.com/

		练习5:~]# mkdir /tmp/man
		~]# cp -r /usr/share/man/man[0-9] /tmp/man

		练习6:~]# cp -r /etc/[mnrp]*.conf /tmp/conf.d/
		~]# ls /tmp/conf.d/man_db.conf  named.conf   

Bash 特性之:命令 hash 缓存命令此前命令的查找结果:key-value Key:搜索键 Value:值

		hash 命令:
					hash -d COMMAND:删除
					hash -r:清空

Bash 的特性之:变量 程序:指令+数据 指令:由程序忘记提供: 数据:IO 设备,文件,管道,变量

				程序:算法+数据结构
				
				变量名+指向的内存空间
				
				变量赋值 name=value 值
				变量类型:存储格式,表示数据范围,参与的运算
			
			编程语言:
						强类型变量
						弱类型变量	
									bash 把所有变量统统视作字符型;
									bash 中的变量无需事先声明;相当于,把声明和赋值过程同时实现;
	
											 声明:类型,变量名
					
					变量替换:把变量名出现的位置替换为其所指向的内存空间中数据;
					变量引用:${var_name}, $var_name
					变量名的命名规范:变量名只能包含数字,字母和下划线,而且不能以数字开头;
					变量名:见名知义,命名机制遵循某种法则;不能够使用特殊字符;
					
		实例:
		
				~]# name=huyuwj
					~]# echo $name
						huyuwj
				
				~]# var_name=huyuwj
					~]# echo $var_name
					huyuwj

bash 变量类型: 本地变量:作用域仅为当前 shell 进程 环境变量:作用域为当前 shell 进程及其子进程; 局部变量:作用域仅为某代码片段(函数上下文)

		位置参数变量:当执行脚本的 shell 进程传递的参数;
		特殊变量:shell 内置的有特殊功用的变量;
								$?:
								0:成功
				   			1-255:失败

				本地变量:
							变量赋值:name=value
							[root@itxuezhe ~]# name=value

							变量引用:echo ${name}, echo $name
							[root@itxuezhe ~]# echo $name
													
							“” :变量名会替换为其值
							‘’ :变量名不会替换为其值

							查看变量:set
							撤销变量:unset name
			  			注意:此处非变量引用
													
										~]# animal=sheep
										~]# echo "there are some $animals"
										there are some
										~]# echo "there are some ${animal}s"
										there are some sheeps

						环境变量:
										变量赋值:
										(1)Export name=value
										(2)name=value
										 export=name
										
										(3)declare -x name=value
										(4)name=value
										Declare -x name


						变量引用:${name}, $name
						注意:bash 内嵌了许多环境变量(通常为全大写字符),用于定义 bash 的工作环境;
									PATH,HISTFILE,HISTSIZE,HISTFILESIZE,HISTCONTROL,SHELL,HOME,
									UID,PWD,OLDPWD


						查看环境变量:export, declare -x, printenv, env
						撤销环境变量:unset name
						
						只读变量:
						(1) declare -r name
						(2) readonly name
						只读变量无法重新赋值,并且不支持撤销;存活数据为当前 shell 进程的生命周期。



					Bash 特性之多命令执行:
					~]#COMMAND1;COMMAND2;COMMAND3;…

						逻辑运算:
						运算数:真 或 假
										与:只有两个都为真,结果才为真,否则为假;
										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 必须执行;
		
		
				实例:
						[root@itxuezhe tmp]# id $username || useradd $username

						
						演示:
								~]# touch /tmp/test.etc && ls /etc/ > /tmp/test.etc
								~]#COMMAND1 || COMMAND2
								COMMAND1 为真,则 COMMAND2 不会再执行;
								否则 COMMAND1 为假,则 COMMAND2 必须执行;

					演示:
								~]# id user1
								id: user1:无此用户
								~]# id user1 || useradd user1
								id: user1: no such user
								~]# id user1
								uid=1017(user1) gid=1017(user1) 组=1017(user1)