shell脚本基本常用命令 grep echo alias别名 快捷键 history 输出重定向 管道符 通配符解释说明

一. Shell是什么

   Shell 是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的方法。
   Shell 是界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
   Shell 是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。
   Shell 是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。

二. Shell的分类

   1. Bourne Shell:从1979年起Unix就开始使用Bourne Shell,Bourne Shell的主文件名为sh。
   2. C Shell:C Shell主要在BSD版的Unix系统中使用,其语言和C语言相似而得名。

   Shell的主要语法类型有Bourne和C,这两种语法彼此不兼容。
   Bourne家族主要包括:sh、ksh、psh、zsh;
   C家族主要包括:csh、tcsh

查看当前计算机运行的shell
		echo $SHELL
查看当前计算机支持的shell 
		vi /etc/shells
进入一种shell语言环境
		shell家族的名称即可 eg : bash   或 sh   退出使用 : exit

三. 文本处理工具

grep工具 
		# grep [选项] '关键字' 文件名
		
		常见选项:
			options:
				-i:不区分大小写
				-v:查找不包含指定内容的行,反向选择
				-w:按单词搜索
				-o:打印匹配关键字
				-c:统计匹配到的次数
				-n:显示行号
				-r:逐层遍历目录查找
				-A:显示匹配行及后面多少行
				-B:显示匹配行及前面多少行
				-C:示匹配行及前后多少行
				-l:只列出匹配的文件名
				-L:列出不匹配的文件名
				-e:使用正则匹配
				-E:使用扩展正则匹配
				^key:以关键字开头
				key$:以关键字结尾
				^$:匹配空行
				--color=auto:可以将找到的关键字部分加上颜色显示
		eg:# grep --color=auto 'root' original-ks.cfg  这个只是当前有效

四. 别名 alias

	a)查看系统中的所有别名
		# alias 						
	b)起别名
		# alias 别名= '原命令'    	
		eg:alias grep='grep --color=auto' 临时生效
			可以在/etc/bashrc 文件后追加 alias grep='grep --color=auto'  保存对所有用户生效
			或 vim ~/.bashrc     ///把别名写入环境配置文件
	c)删除别名	 临时删除
		# unalias 别名     
	d)命令的生效顺序
		第一顺位执行用绝对路径或相对路径执行的命令。
		第二顺位执行别名
		第三顺位执行Bash的内部命令
		第四顺位执行按照$PATH环境变量定义的目录查找顺序找到第一个命令
			
		# echo $PATH   可以查看环境变量,外部执行bash命令都在环境变量中有定义才能执行

五. 快捷键

	ctrl + c 强制终止当前命令
	ctrl + l 清屏
	ctrl + a 光标移动到命令行首
	ctrl + e 光标移动到命令行尾
	ctrl + u 从光标所在位置删除到行首
	ctrl + z 把命令放入后台 ,但是命令并没有终止
	ctrl + r 在历史命令中搜索

六. 历史命令查询

1. 命令
	# history [选项] [历史命令保存文件]
	  选项:
		-c :清空历史命令
		-w :把缓存中的历史命令写入历史命令保存文件 ~/.bash_history
			  历史命令保存文件保存的是本次开机之前的历史命令 ,也可以通过 history -w 手动保存

2.历史命令默认保存1000条,可以在环境变量配置文件 /etc/profile中进行修改
	保存历史命令条数 : HISTSIZE=1000
3.历史命令的调用
	a)使用上、下箭头调用以前的历史命令
	b)使用  !n 		重复执行第n条历史命令
	c)使用  !! 		重复执行上一条命令
	d)使用  !字串 	重复执行最后一天以该字串开头的命令
4.命令与文件补全
	在Bash中,命令与文件补全是非常方便与常用的功能,我们在输入命令或文件时,
	按 Tab键自动补全
	
	如果不能自动补全说明有多个形同开头的命令或文件,
	此时再次按下 Tab键 就会显示与当前输入相同开头的文件或命令

七. 输出重定向

1.标准输入输出

设备 设备文件名 文件描述符 类型
键盘 /dev/stdin 0 标准输入
显示器 /dev/sdtout 1 标准输出
显示器 /dev/sdterr 2 标准错误输出

2.输出重定向

错误输出中 ‘>’ 、’>>'两边的内容必须紧密相连

类型 符号 作用
标准输出重定向 命令 > 文件 以覆盖的方式,把命令的正确输出 输出到指定的文件或设备中。
eg:# ifconfig > a.txt
命令 >> 文件 以追加的方式,把命令的正确输出 输出到指定的文件或设备中。
eg:# ifconfig > a.txt
标准错误输出重定向 错误命令 2>文件 以覆盖的方式,把命令的错误输出 输出到指定的文件或设备中。
eg:# ifconfigsdfas > a.txt
错误命令 2>>文件 以追加的方式,把命令的错误输出 输出到指定的文件或设备中。
eg:# ifconfigsdfas > a.txt
正确输出和错误输出 命令 > 文件 2>&1 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。
eg:# ifconfig > a.txt 2>&1
同时保存 命令 >>文件 2>&1 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。
eg:# ifconfig >> a.txt 2>&1
命令 &>文件 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。
eg:# ifconfig &> a.txt
命令 &>>文件 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。
eg:# ifconfig &>> a.txt
命令>>文件1 2>>文件2 把正确的输出追加到文件1中,把错误的输出追加到文件2中。
eg:# sdfasd>>a.txt 2>>b.txt

3. /dev/null ---- Linux中的’黑洞’

eg: 相当于windows 中的垃圾回收站,放进去的文件都会被销毁,
	 ls>>a.txt 2>>/dev/null    错误文件内容将会被抛弃

4. 输入重定向

# wc [选项][文件名]     wc 字符内容 :统计键盘输入的内容   按 ctrl+D 开始统计
	选项:
		-c 统计字节数
		-w 统计单词数
		-l 统计行数
	eg:
		# wc < 文件名 <===> # wc 文件名	 :把文件作为命令的输入
		# wc << 标识符     			 :统计标识符之间的内容
	eg:# wc << aaaa
			>	dfasdf
			>	asdf
			>	aaaa
		.......
		标识符把标识符之间的内容作为命令的输入

八. 管道符

  管道符是一个非常实用的linux 命令,它的意义是 将管道符前面的输出 传递到 管道符后面命令的输入 。相当于是一个层级过滤,就是把前的查询的结果 筛选后 得到二次或多次过滤的结果。

1. 多命令顺序执行

多命令执行符 格式 所用
: 命令1:命令2 多个命令顺序执行,命令之间没有任何逻辑关系
&& 命令1&&命令2 逻辑与
当命令1正确执行,则命令2才会执行
当命令1执行不正确,则命令2不会执行
|| 命令1 ||命令2 逻辑或
当命令1执行不正确,则命令2才会执行
当命令1正确执行,则命令2不会执行

2. 命令格式

	# 命令1 | 命令2     ///命令1的正确输出作为命令2的操作对象
	eg:
		# ls -l | more
		# ps -ef | grep redis

3. 通配符

通配符 作用
? 匹配一个任意字符
* 匹配0个多个任意字符 eg:# ls tty*
[] 匹配括号中的任意一个字符, eg:[abc] 匹配其中一个
[-] 匹配括号中的任意一个字符, -代表范围 eg:[a-z]
[^] 逻辑非,表示匹配不是括号内的一个字符, eg:[^0-9] 匹配一个非数字字符
eg: # ls tty[^0-9]

4. Bash中的其他特殊符号

符号 作用
‘’ 单引号。其中的内容都是文本,不可执行
“” 双引号。在双引号中的特殊符号都没有特殊的含义,但是 “$”,"`“和”"是例外,拥有 “调用变量的值”、"引用命令"和"转移符"的特殊含义。
`` 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和 ( ) 作 用 一 样 , 不 过 推 荐 使 用 ()作用一样, 不过推荐使用 ()使(),因为反引号非常容易看错。
$() 和反引号作用一样,用来引用系统命令。
# 再Shell脚本中,#开头的行代表注释
$ 用于调用变量的值,如需调用变量name的值时,需要用$name的方式得到变量的值。
\ 转移符。跟在\之后的特殊符号将失去特殊含义,变为普通字符。如$将输出"$"符号,而不是当做变量引用
	// 打印变量中的值
	eg1:
		[root@localhost dev]# aa='123456'
		[root@localhost dev]# echo $aa
		123456
	// 调用变量中对应的命令:
	eg2:
		[root@localhost test]# bb=`ls`
		[root@localhost test]# echo $bb
		a.sh

参考学习源

你可能感兴趣的:(linux,shell)