(一)shell基础

(1)shell作用:

	1)自动化批量系统初始化程序(软件安装,时区设置,安全策略)
	2)自动化批量软件部署程序(LNMP,LAMP,LNTM)
	3)管理应用程序(kvm,集群管理扩容)
	4)日志分析处理程序(PV,UV)
	5)自动化备份恢复程序(mysql完全备份,增量)
	6)自动化管理程序(批量远程修改密码,软件升级,配置更新)
	7)自动化信息采集及监控程序(收集系统/应用状态信息,CPU,mem,disk,tcp status,net,nginx,mysql)
	8)配合zabbix信息采集
	9)自动化扩容(增加云主机--->业务上线)
		zabbix监控cpu 80% + python API AWS/ECS(增加/删除云主机)+shell Script(业务上线)

(2)shell执行

  • shell执行方式
	ping -c1 www.baidu.com &>/dev/null && echo "www.baidu.com is up" || echo "www.baidu.com is down"
	方式一:bash ping01.sh
	方式二:sh ping01.sh
	方式二:./ping01.sh 
	方式二:source ping01.sh 
		sh是bash的软连接   通过whish sh   ll /usr/sbin/sh查看
  • 开头语言标识
	#! /usr/bin/bash      声明使用bash解释器执行该文件
        执行方式使用bash test.sh 这种方式开头添加#! /usr/bin/bash 可以忽略
        执行方式./test.sh 需要在文件的开头声明解释器
  • 当前shell和子shell区别和执行方式
	子shell中执行的两种方式:bash和sh,不会影响当前shell
	当前shell中执行的两种方式:. /root/.bashrc和 source /root/.bashrc    执行会影响当前shell
		例:在/root/.bashrc 定义一个别名:alias wang='data'   如果使用bash /root/.bashrc 不会生效因为它是在子shell中执行不会影响当前shell;

(3)shell特性

  • 1)命令和文件自动补齐:tab键
  • 2)命令历史记忆功能:上下键丶!number丶!string丶!$丶!!丶 ctrl+R
  • 3)别名功能: alias , unalias cp , ~username/.bashrc cp
  • 4)快捷键
		crtl+c :终止当前用户的命令
		crtl+d :退出当前会话,相当于logout
		crtl+l :清屏,相当于clear命令
		crtl+a  :移动到命令行首
		crtl+e :移动到命令行尾
		crtl+u  :清除当前光标之前的命令
		crtl+k :清除当前光标之后的命令
		crtl+s :挂起,当前会话挂起,不能动
		crtl+q :解除挂起
  • 5)前后台作业控制:
		& :
		nohup :
		ctrl + c    ctrl + z 
		bg fg screen 
  • 6)输入输出重定向
		>或1> :输出重定向,把前面输出的东西输入到后边的文件中,会清除文件原有内容
		>>或1>> :追加输出重定向,把前面输出的内容追加到后边的文件尾部,不会清除文件原有内容
		0<或<:输入重定向,输入重定向用于改变命令的输入,后面指定输入内容,可以理解为把文件的内容输入到命令中进行处理
		0<<或<<:追加输入重定向,后跟字符串,用来表示"输入结束",也可用ctrl+d来结束输入
			cat >>hello.txt<<EOF
			> hello
			> EOF
		2> :错误输出重定向,把错误信息输入到后边的文件中,会删除文件原有内容
		2>> :错误输出追加重定向,把错误信息追加到后边的文件中,不会删除文件原有内容	
		
	特殊重定向的三种高级用法
		例:正确输出和错误输出都放入到同一个文件中:
			方法一:#echo 'hello,world!'  >a.txt  2>a.txt    ,可以使用追加输出重定向
			方法二:#echo 'hello,world!' >a.txt 2>&1     常用方法,不可以使用追加输出重定向
			方法三:#echo 'hello,world!'  &>a.txt   
  • 7)管道:| 把命令的结果作为后面命令的参数
  • 8)命令排序:
	;  不具备逻辑判断    &&|| 具备逻辑判断
		;  :分号,执行多个命令,不具备逻辑判断,前一个命令执行失败后一个命令还会执行 date;date
		&&  :具备逻辑判断,前一个命令执行成功返回值$? == 0 才会执行后面一个命令  ./configure && make && make install 
		||  :前一个命令执行失败(命令的返回值$?为非0),才会执行后面一个命令 ls /home/222/333/aaa/bbb || mkdir -pv /home/222/333/aaa/bbb
		
		注意:
			command &  后台执行
			command &>/dev/null 混合重定向
			command 1 && command 2  命令排序
  • 9)shell通配符(元字符)
		*	:匹配任意多个字符   ls *.log    rm -rf *  find / -name "*.log"
		?	: 匹配任意一个字符
		[]	:匹配括号中任意一个字符	[abc] [a-z] [0-9] [A-Z] [a-z0-9A-Z] [^a-z0-9A-Z]  ll /dev/sd[a-z]
			[^a-z0-9A-Z]  :取反
		()	:在子shell中执行, (umask 077;touch test100.txt)  这种不会修改当前shell的umask值
		{}	:集合 touch file{1..9}
			cp -rv /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33.old
			cp -rv /etc/sysconfig/network-scripts/{ifcfg-ens33,ifcfg-ens33.old}
			cp -rv /etc/sysconfig/network-scripts/ifcfg-ens33{,.old}
			:转移符,让元字符回归本意
			echo *
			echo *
			可以让普通字符变成特殊字符
				echo -e "a	b"   	表示tab键
				echo -e "a
b"	 
表示换行符
  • 10)echo颜色输出文本
		前景色:
			echo -e "e[1;31mThis is a red text."
			echo -e "e[1;32mThis is a green  text."    这样会把当前终端的颜色也会改变
			echo -e "e[1;32mThis is a green  text.e[0m"   只改变需要输出文本的颜色  e[0m表示重置
原文地址:https://www.cnblogs.com/lovelinux199075/p/8858054.html