(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执行
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中执行的两种方式: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 :解除挂起
& :
nohup :
ctrl + c ctrl + z
bg fg screen
>或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 命令排序
* :匹配任意多个字符 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\tb" \t表示tab键
echo -e "a\nb" \n表示换行符
前景色:
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表示重置