一、初始shell
语言
计算机语言:c语言、c++、(java php python go shell)
编译型语言 c c++ java
解释型语言 php python bash
编译型语言:编译型语言的首先将源代码编译生成机器语言,再由机器运行机器码(二进制)。像C/C++等都是编译型语言。
解释型语言:源代码不是直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。比如Python/JavaScript/Shell等都是解释型语言
二、Shell 定义
Shell 也是一种程序设计语言,它有变量,关键字,各种控制语句,有自己的语法结构,利用shell程序设计语
言可以编写功能很强、代码简短的程序。
shell是外壳的意思,就是系统的外壳,我们可以通过shell的命令来控制和操作操作系统,比如linux中的shell命令就包括ls、cd、pwd等等,总结来说shell就是一个命令解释器,他通过接收用户输入的shell命令来启动、停止程序的运行或者对计算机进行控制。
三、Shell的分类和切换
[root@linux-server ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
#默认shell: bash shell
#centos中脚本使用的默认shell 为/usr/bin/sh
查看当前正在使用的shell
[root@linux-server ~]# echo $SHELL
/bin/bash
shell的修改
vim /etc/passwd 编辑登录shell
四、使用场景
- 自动化批量系统初始化程序 (update,软件安装,时区设置,安全策略…)—初始化脚本
- 自动化批量软件部署程序 (LAMP,LNMP,Tomcat,LVS,Nginx)—自动化安装脚本
- 应用管理程序 (KVM)—批量创建虚拟机、管理虚拟机。
- 日志分析处理程序(PV, UV, 200, !200,grep/awk)----akw、sed、grep
- 自动化备份恢复程序(MySQL完全备份/增量 + Crond)-----数据备份恢复脚本
- 自动化信息采集及监控程序(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL)–监控脚本
- 配合Zabbix信息采集(收集系统/应用状态信息,CPU,Mem,Disk,Net,Apache,MySQL)
- 9*9乘法表、俄罗斯方块,打印三角形,打印圣诞树,打印五角星,运行小火车,坦克大战,排序实现
- Shell可以做任何运维的事情(一切取决于业务需求)
五、Shell 特性
- shell常见元素
文件描述符与输出重定向:
在 shell程序中,最常使用的FD (file descriptor) 大概有三个。
在标准情况下, 这些FD分别跟如下设备关联:
stdin(0): keyboard 键盘输入,并返回在前端
stdout(1): monitor 正确返回值 输出到前端
stderr(2): monitor 错误返回值 输出到前端
>a.txt
1>a.txt
2>a.txt
&>a.txt
1>&2
2>&1
一般来说, "1>" 通常可以省略成 ">".
1>&2 正确返回值传递给2输出通道 &2表示2输出通道,之前如果有定义标准错误重定向到某log文件,那么标准输出也重定向到这个log文件,如果此处错写成 1>2, 就表示把1输出重定向到文件2中.
2>&1 错误返回值传递给1输出通道, 同样&1表示1输出通道.
六、用户登录时相关的bash配置文件
全局配置文件
- /etc/profile
- /etc/profile.d/*.sh
- /etc/bashrc
个人配置文件
- ~/.bsah_profile
- ~/.bashrc
profile类的文件:
设定环境变量
运行命令或脚本
bashrc类的文件:
设定本地变量
定义命令别名
用户登录时加载bash配置文件的过程(登录式shell)
~/.bash_profile --> ~/.bashrc --> /etc/bashrc —> /etc/profile -->/etc/profile.d/*.sh
这里的优先级是影响范围最小的优先级最高
下面的文件为系统的每个用户设置环境信息Shell设置文件:
(1)/etc/profile
(系统级)启动时执行
这是系统最主要的shell设置文件,也是用户登陆时系统最先检查的文件,有关重要的环境变量都定义在此,其中包括 PATH,USER,MAIL,HOSTNAME,HISTSIZE,INPUTRC等。而在文件的最后,它会检查并执行/etc/profile.d/*.sh的脚本。
(2)~/.bash_login
(用户级)登录时执行
如果~.bash_profile文件不存在,则系统会转而读取.bash_login这个文件内容。这是用户的登陆文件,在每次用户登陆系统时,bash都会读此内容,所以通常都会将登陆后必须执行的命令放在这个文件中。
(3)~/.bash_logout
离开时执行如果想在注销shell前执行一些工作,都可以在此文件中设置。 例如:
七、bash shell 特性
补全 tab键 #yum -y install bash-completion
历史--history
别名---alias
快捷键---ctrl+c+l
前后台作业---jobs fg bg &
重定向 > >> <
管道 ---|
#命令排序执行: ; && ||
&&:逻辑与,前面执行成功,后面才执行。前面命令执行失败,后面命令也不执行
||:逻辑或,前面执行失败,后面执行,前面命令执行成功,后面不执行。
;:从左往右按顺序执行,不管前面执行成功与否,后面都执行
通配符:[] {} ? *
正则表达式 脚本
八、历史命令
查看历史命令
[root@linux-server ~]# history
调用历史命令
上下健
!关键字
!历史命令行号
!! 执行上一条命令
!$ 上一条命令的最后一个参数
esc . 上一条命令的最后一个参数
Ctrl+r 在历史命令中查找,输入关键字调出之前的命令 ####重要
别名
查看别名
[root@linux-server ~]# alias
永久设置
# vim /root/.bashrc
# source /root/.bashrc #让文件生效
小小技巧:显示历史命令执行时间
1.设置变量:
[root@linux-server ~]# vim /etc/profile #在最后添加
HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S"
[root@linux-server ~]# source /etc/profile #让设置的环境变量生效
2.再次执行history查看结果
九、Bash 部分快捷键
Ctrl+a 切换到命令行开始(跟home一样,但是home在某些unix环境下无法使用)
Ctrl+u 清除剪切光标之前的内容
Ctrl+k 清除剪切光标之后的内容
ctrl+y 粘贴刚才所剪切的字符
Ctrl+r 在历史命令中查找,输入关键字调出之前的命令
Ctrl+l 清屏
Ctrl+c 终止
Ctrl+e 切换到命令行末尾