shell基础及Bash的基本功能是本站提供的视频讲解笔记,是慕课网的教程,为什么要学习shell,是因为有shell可以很轻松的远程控制Linux主机,只有掌握了shell才能够很好的配合学习Linux课程。
	
shell基础:
shell基础:
	一、shell概述
	1、shell :
	◆是一个命令行解释器,为用户提供给呢了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以启动、挂起、停止甚至编写一些程序。
	◆还是一个功能强大的编程语言,易编写,易调试,灵活性较强。shell是解释执行的脚本语言,在shell中可以直接条用Linux系统命令。
	
	
	
	 

	2、shell分类:
	Bourne Shell :1979年起Unix就开始使用,它的主文件名为sh。
	C shell :主要在BSD版本的Unix系统中使用,其语法和C语言相类似而得名。
	shell的两种主要语法类型彼此不相兼容。Bourne Shell 主要包括sh ksh bash psh zsh ,其中bash是现在使用的标准shell,查看使用的shell版本命令:echo $SHELL  ; C主要包括csh tcsh;
	Bash : Bash与sh兼容,现在使用的Linux就是Bash作为用户的基本shell
	3、Linux支持的shell
	用命令打开文件查看:vi /etc/shells
	可以看到支持 sh bash tcsh csh ,输入任意一个即可进入该shell模式,退出用exit命令
	二、脚本执行方式
	1、echo输出命令
	   echo [选项] [输出内容]         选项:-e :支持反斜线控制的字符转换,具体如下
	   控制字符                    作用
	   \a                      输出警告音
	   \b                      退格键,也就是向左删除键
	   \n                      换行符
	   \r                       回车键
	   \t                       制表符,也就是Tab键
	   \v                      垂直制表符
	   \0nnn                   按照八进制ASCLL码表输出字符,其中0为数字0,nnn是三位八进制数
	   \xhh                    按照16进制ASCLL码表输出字符,hh是两位16进制数
	   例子:echo -e  "\x68\t\x65\t\x6c\n\x6c\t\x6f\t"  #按照16进制ASCLL码输出内容
	   注意:输出的内容有空格,所有内容之间需要加引号。
	   echo输出颜色
	   30m=黑色  31m=红色  32m=绿色  33m=黄色  34m=蓝色  35m= 洋红  36m=青色   37m=白色  例如:echo -e "\e[1;31m 娶人就要娶美女 \e[0m "    \e 代表标准颜色   [1; 代表开启颜色选项  \e[0m  代表关闭颜色和选项
	2、第一个脚本(脚本创建)
	# vi hello.sh
	创建系统脚本
	#!/bin/bash           
	    加#代表后续内容为注释,但这句话不是;这里声明是Linux标准脚本 ,而且不能省略                
	#the first program
	这句话是注释,一般好习惯都需要加注释
	echo -e "\e[1;34m 天上掉下个林妹妹 ! \e[0m"
	输出打印脚本
	:wq
	保存退出
	3、脚本执行(两种方式)
	◆赋予执行权限,直接运行
	 →chmod 755 hello.sh         #赋予执行权限
	 →./hello.sh                 #执行./当前目录下的脚本文件(也可以为绝对路径)
	◆通过Bash调用执行脚本
	 →bash hello.sh              #用bash来直接执行脚本文件
	三、Bash的基本功能
	1、命令别名(更好适应用户使用习惯,有退出即无效也有用久生效)与快捷键
	   ⑴、查看与设定别名命令(暂时生效):
	       alias                      #查看系统中所有的命令别名
	       alias 别名='原命令'        #设定命令别名
	   ⑵、别名用久生效与删除别名(打开配置文件并添加,重新登陆后用久生效)
	       vi ~/.bashrc               #写入环境变量配置文件,这个~/.bashrc 是root用户文件位置,配置文件有很多,后面再补充。也可以直接调用source .bashrc文件,不用重新登陆就生效。
	       unalias 别名               #删除别名,临时删除。用久删除和添加一样。
	   ⑶、命令生效顺序
	       第一位:执行用绝对或相对路径执行的命令
	       第二位:执行别名
	       第三位:执行Bash的内部命令
	       第四位:执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令
	   ⑷、常用快捷键(ctrl+选项)
	       ctrl+c       强制终止当前命令
	       ctrl+l       清屏,同clear 
	       ctrl+a       光标移动到命令行首
	       ctrl+e       光标移动到命令行尾
	       ctrl+u       从光标所在位置删除到行首
	       ctrl+z       把命令放入后台执行
	       ctrl+r       在历史命令中搜索
	2、历史命令(将使用过的命令进行保存,方便日后使用)
	   ⑴、历史命令
	       history [选项] [历史命令保存文件](已经有的文件名可以忽略不写)
	       选项: -c:清空历史命令  -w:把缓存中的历史命令写入保存 ~/.bash_history
	   历史命令默认会保存1000条,可以在配置文件/etc/profile中进行修改
	   HISTSIZE=1000  历史命令建议不进行清空,可以查看出错或者查看黑客活动。
	   ⑵、历史命令的调用
	       ◆、上下箭头调用以前的历史命令
	       ◆、使用"!n"重复执行第n条历史命令
	       ◆、使用"!!"重复执行上一条命令
	       ◆、"!字串"重复执行最后一条以该字串开头的命令,如 !ls
	   ⑶、命令与文件的补全
	       在Bash中,按Tab键自动补全命令与文件。命令补全依赖echo $PATH,文件补全依赖目录。当命令出错时,按键没有任何反应。
	3、输出重定向
	   ⑴、标准输入输出
	    设备      设备文件名     文件描述符        类型
	   键盘      /dev/stidn          0            标准输入
	      显示器     /dev/sdtout         1            标准输出
	      显示器     /dev/sdterr         2            标准错误输出
	   ⑵、输出重定向(把原来输出到显示器的重定向输出到文件)
	 输出重定向类型   命令模式   命令用法
	 标准正确输出    命令> 文件名 以覆盖方式把命令的正确输出输出到指定文件或设备中
	 标准正确输出   命令>> 文件名 以追加方式把命令的正确输出输出到指定文件或设备中
	 标准错误输出  错误命令 2>文件 以覆盖方式把命令的错误输出输出到指定文件或设备
	 标准错误输出  错误命令 2>>文件 以追加方式把命令的错误输出输出到指定文件或设备
	       重定向意义:在无人值守的命令执行过程中,把输出保存到文件中,方便查阅
	       例如:ifconfig > test.log      #重定向到文件(正确输出左右都有空格)
	             cat test.log             #查阅文件
	             datecang 2>>test.log    #重定向错误命令到文件(注意2后面没有空格)
	正确输   命令 > 文件 2>&1  以覆盖方式把命令的正确和错误输出输出保存到同一文件
	出和错   命令 >> 文件 2>&1 以追加方式把命令的正确和错误输出输出保存到同一文件
	
	
	
	

		误输出   命令 &>文件       以覆盖方式把命令的正确和错误输出输出保存到同一文件
	
		同时间   命令 &>>文件      以追加方式把命令的正确和错误输出输出保存到同一文件
	
		         注释:最上面两个命令和上面两个命令效果是一致的
	
		         例如:ls xiaodianying &>>test3.log  ls xiaodianying >> test.log 2>&1
	
		         ls &>/dev/null  /dev/null是系统黑洞文件,保存进去就会消失,视作垃圾袋
	
		保存     命令 >> 文件1 2>>文件2  正确输出追加到文件1,错误输出追加到文件2
	
		         例如:cat xdy >> access.log 2>>error.log
	
		     ⑶、输入重定向
	
		     wc键盘输入统计命令(默认全部统计)
	
		     语法:wc [选项] [文件名]
	
		     选项:-c 统计字节数
	
		           -w 统计单词数
	
		           -l 统计行数
	
		     例如:# wc  然后输入一堆文字保存(CTRL+D),就会显示行数、字节数、单词数
	
		     wc统计命令输入重定向
	
		     ◆命令 < 文件把文件作为命令输入      例如:wc < access.log
	
		     ◆命令 << 标识符                     例如:wc << abc
	
		     ...                                    当输入的内容里面出现abc
	
		     标识符把标识符之间内容作为命令的输入   就会统计之间的行数、字节、字符数
	
		4、多命令顺序执行
	
		 ⑴、多命令执行符      格式                        作用
	
		         ;        命令1; 命令2      多命令顺序执行,命令之间没有任何逻辑联系
	
		        &&      命令1 && 命令2    逻辑与,当命令1正确执行,命令2才会执行;当命令1执行不正确,则命令2不会执行
	
		         ||     命令1 || 命令2     逻辑或,当命令1执行不正确,则命令2才会执行;当命令1正确执行,则命令2不会执行
	
		   例如: date  ;  tar -zcvf etc.tar.gz /tec  ; date 
	
		          ls && echo yes
	
		          ls && echo yes || echo no      如果ls报错,就打印no,正确执行打印yes
	
		     注意:分号 ; 执行的命令比较灵活,运用也不需要考虑命令执行对错,而且就算前面命令出错,也不会影响到后面的命令继续执行。&& 两个命令之间有简单的逻辑关系
	
		 ⑵、管道符(比逻辑与和逻辑或应用更为广泛)
	
		 命令格式: 命令1 | 命令2         #命令1的正确输出作为命令2的操作对象
	
		 more 文件名(对象)                       #分屏查看文件内容
	
		 ls -l /etc | more                 #将/etc里面的详细内容结果用分屏显示
	
		 ll -a/etc/ | more
	
		 netstat -an | grep ESTABLISHED    #查询系统所有的网络连接作为结果去查询匹配字符串ESTABLISHED结果的行,ESTABLISHED(正向连接)代表一个网络客户端  192.168.0.156:22  前面为IP,22为端口
	
		netstat -an | grep ESTABLISHED | wc -l    #[双管道符]将上面匹配结果进行行数统计
	
		       ⑶、通配符(和正则表达式中将的一致)
	
		      通配符            作用
	
		        ?          匹配一个任意字符
	
		        *          匹配0个或者多个任意字符,即匹配任何内容
	
		       []          匹配括号中任意一个字符,[abc],匹配abc中任意一个
	
		       [-]         匹配括号中任意一个字符,-代表一个范围,如[a-z]
	
		       [^]         逻辑非,表示匹配不是括号中內的字符,如[^0-9]匹配非数字的字符
	
		       例子:
	
		       ls dzp [0-9]               结果:dzp3  dzp2
	
		       ls dzp [0-9] [0-9]         结果:dzp34
	
		       ls dzp [^0-9]              结果:dzpb
	
		       ls dzp [^0-9]*             结果:dzpblos dzpcangls
	
		5、shell中特殊符号
	
		   符号                       作用
	
		    '  '      单引号中的所有特殊符号,都没有特殊含义。如$、反引号`
	
		    " "       双引号中的所有特殊符号,都没有特殊含义。$、`、\、例外,分别表示调用变量的值、引用命令、转义符
	
		    ` `        反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和$()作用一样,不过推荐使用$(),因为反引号非常容易看错
	
		    $()        引用系统命令
	
		    #         #开头代表注释
	
		    $         用于调用变量的值,如果需要调用变量name的值时,需要用$name的方式得到变量的值
	
		    \         转义符,在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出$符号,而不当做变量引用。
	
		  注释:单引号里面都认为是字符串,包括一些特殊符号。
	
		        双引号里面$、`、\、例外,分别表示调用变量的值、引用命令、转义符
	
		        echo `ls`   echo $(ls)

 
        