Shell的概念
- 自动化批量系统初始化(update,软件安装,时区设置,安全,安全策略…)
- 自动化批量的软件部署(LAMP、LNMP、Tomcat、LVS、Nginx等)
- 管理应用程序(KVM、集群LVS管理扩容,MySQL,DELLR720批量RAID)
- 日志分析处理程序(pv)
- 自动化备份回复程序(MySQL完全备份/增量/+Crond)
- 自动化管理程序(批量远程修改密码,软件更新、配置更新)
- 自动化信息采集及监控程序(收集系统/应用状态信息,CPU,Mem,Disk,Net,Apache,MySQL)
- 配合Zabbix信息采集(收集系统/应用状态信息,CPU,Mem,Disk,Net,Apache,MySQL)
- 自动化扩容(增加云主机—>部署应用)
- Shell可以做任何事情,
程序语言执行:
C ------编译------(机器码二进制) 直接被CPU去执行效率高
JAVA ------编译------ 字节码 JAVA虚拟机去执行
Shell ------**解释**------(/usr/bin/bash)
Perl ------解释------(/usr/bin/perl)
expect ------**解释**------ (/usr/bin/python)
Python ------**解释**------
------编译------字节码(只能再Python虚拟机中执行)
程序是由那些组程序:逻辑 + 数据
Shell Bash解释器
Linux 解释器
/usr/bin/bash #shell解释器
/usr/bin/python #python解释器
/usr/bin/perl #perl解释器
例:#!/usr/bin/bash //#! 不是注释 而是明确指定解释器/usr/bin/bash
不同程序应使用相同的解释器去执行脚本。
执行方式
bash shell.sh #sub shell 子shell中执行
./shell.sh #sub shell 子shell中执行
source shell.sh #当前shell执行
. shell.sh #当前shell执行
切换用户shell的区别
su - user //su加横杠表示登录用户shell环境
1.login shell
su - user
/etc/profile #系统级别 登陆时执行
/etc/bashrc #系统级别 登录时执行
~/.bash_profile #用户级别 登陆时执行
~/.bashrc #用户级别 登陆时执行
2.nologin shell
su user
/etc/bashrc #系统级别 登录时执行
~/.bashrc #用户级别 登陆时执行
~/.bash_logout #用户级别离开时执行
~/.bash_history #用户级别离开时执行
一、Shell技术
- shell 特性
- shell变量
- shell条件测试
- shell运算
二、Linux支持的shell
cat /etc/shells
chsh -l
/bin/sh
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
三、GNU/bash shell特点
- 命令和文件自动补齐
- 命令历史记忆功能上下键、!number、!string、!$: 上一个命令的最后参数、!!:上一个命令、^R //!表示历史
- 别名功能 alias、unalias cp、~username/.bashrc、\cp-rf /etc/hosts.
- 快捷键^R, ^D, ^A ,^E, ^L, ^U:删除光标前, ^K:删除光标往后字符, ^S:锁屏, ^Q:解锁
- 前后台作业控制 &:后台运行, nohup:退出shell后台仍运行, ^C 结束进程, ^Z 终止进程 ,bg%1 显示上次进程, fg%1 返回上次进程,kill%3, screen,
- 输入输出重定向1,2,3 > >> 2> 2>> 2>&1 &> cat < /etc/hosts cat < file1 <<EOF
类型 | 操作符 |
---|---|
< | 从指定的文件读取数据,而不是从键盘输入 |
>> | 将输出结果追加到指定的文件 |
> | 将输出结果保存到指定的文件(覆盖原有内容) |
2> | 将错误信息保存到指定的文件(覆盖原有内容) |
2>> | 将错误信息追加到指定的文件中 |
&> | 将标准输出、标准错误的内容保存到同一个文件中 |
- 管道 | tee
ip addr | grep “inet” | grep eth0
ip addr | grep “inet” | test test | grep ehh0 覆盖
ip addr | grep “inet” | tee -a test | grep eth0 -a 追加
例:
df | grep ‘/$’
date > aaaa.txt
[root@ansible ~]# date | tee aaaa.txt //使用|tee 会显示在显示器并重定向到文件中
2020年 04月 29日 星期三 17:36:03 CST
[root@ansible ~]# cat aaaa.txt
2020年 04月 29日 星期三 17:36:03 CST
-
命令排序
; #执行时按顺序去执行
例: ping -c1 192.168.1.1; echo “shibai” ; cd /home #前面命令执行结果如何后面命令都执行。&& || #具备逻辑判断
例 : mkdir -p /var/111/222/333 && echo ok #mkdir命令执行成功,后面命令才能执行
ls /var/111/222/333/444 || mkdir -p /var/111/222/333 //前面命令返回值错误时,||后命令才执行
ping -c 114.114.114.114 &>/dev/null && echo “queren” || echo “down” 如果--------那么就------||否则注意:
command & 后台执行
commadn &> 混合重定向(标准输出1,错误输出2)
command && command2 命令排序,逻辑判断 -
shell通配符(元字符)表示的不是本意
* 匹配任意多个字符 ls in* rm-rf * rm -rf .pdf find/-inname “-eht0”
? 匹配任意一个字符 touch love loove love l7ve ; ll l?ve
[] 匹配括号中任意一个字符[avc] [a-z] [0-9] [a-zA-Z0-9] | l[lo]ve 等。
() 在子shell中执行(cd /boot;ls) (umask 077;touch file 1000)
{} 集合touch file{1. .10} 必须是两个点
#make /home/{111,222} mkdir -pv /home/{333/{aaa,bbb},444}
\ 转义符,让元字符回归本意 -
echo带颜色输出
-e //激活转义符
echo -e "\e[1;31m \e[0m" //30-36,40-47都均为颜色,\e[0m 返回值。
文字色:
\e[0m 将颜色重新置回
颜色码:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37
背景色:
Greed Background颜色码:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,洋红=45,青色=46,白色=47
文字闪动:
echo -e "\033[37;31;5mMySQL Server Stop...\033[39;49;0m"
红色数字处还有其他数字参数:0 关闭所有属性、1 设置高亮度(加粗)、4 下划线、5 闪烁、7 反显、8 消隐