shell是解释型语言
c、java是编译型语言
编译型语言:运行编译型语言是相对于解释型语言存在的,编译型语言的首先将源代码编译生成机器语言,再由机器运行机 器码(二进制)。
解释型语言:相对于编译型语言存在的,源代码不是直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码 进行解释运行。
Shell 也是一种程序设计语言,它有变量,关键字,各种控制语句,有自己的语法结构。
shell语言是指unix操作系统的命令语言,同时又是该命令语言的解释程序的简称
shell本身是一个c语言编写的程序,他是用户使用unix/linux的桥梁,用户的大部分工作都是通过shell完成的
shell即是一种命令语言,又是一种程序设计语言。
作为命令语言,它交互式地解释和执行用户输入的命令
作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制和结构,包含循环和分支
他虽然不是unix/linux系统内核的一部分,但他调用了系统核心的大部分功能来执行程序,以建立文件并以并行的方式协调各个程序之间的运行
shell可以做任何事,一切取决于业务需求
/bin/sh
/bin/bash
/sbin/nologin //不允许登录
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
1. 自动化批量系统初始化程序 (update,软件安装,时区设置,安全策略)
2. 自动化批量软件部署程序 (LAMP,LNMP,Tomcat,LVS,Nginx)
3. 应用管理程序 (KVM,集群管理扩容,MySQL,DELLR720批量RAID)
4. 日志分析处理程序(PV, UV, 200, !200, top 100, grep/awk)
5. 自动化备份恢复程序(MySQL完全备份/增量 + Crond)
6. 自动化管理程序(批量远程修改密码,软件升级,配置更新)
7. 自动化信息采集及监控程序(收集系统/应用状态信息CPU,Mem,Disk,Net,TCPStatus,Apache,MySQL)
8. 配合Zabbix信息采集(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL)
9. 自动化扩容(增加云主机——>业务上线)zabbix监控CPU 80%+|-50% Python API AWS/EC2(增加/删除云主机) + Shell Script(业务上线)
10. 打印三角形,打印圣诞树,打印五角星,排序实现
11. Shell可以做任何运维的事情(一切取决于业务需求)
在shell中,最常使用的 FD (file descriptor) 大概有三个, 分别是:
0: Standard Input (STDIN) //标准输入
1: Standard Output (STDOUT) //标准正确输出
2: Standard Error Output (STDERR) //标准错误输出
全局配置文件
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
个人配置文件
~/.bash_profile
~/.bashrc
登录式shell加载配置文件过程:~/.bash_profile --> ~/.bashrc --> /etc/bashrc --> /etc/profile --> /etc/profile.d/*.sh
非登录式shell加载配置文件过程:~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
文件为系统的每个用户设置环境信息Shell设置文件:
/etc/profile(系统级)启动时执行
这是系统最主要的shell设置文件,也是用户登陆时系统最先检查的文件,有关重要的环境变量都定义在此,其中包括 PATH,USER,LOGNAME,MAIL,HOSTNAME,HISTSIZE,INPUTRC等。而在文件的最后,它会检查并执 行/etc/profile.d/*.sh的脚本。
~/.bash_profile(用户级)离开时执行
这个文件是每位用户的bash环境设置文件,它存在与于用户的主目录中,当系统执行/etc/profile 后,就会接着读取此 文件内的设置值。在此文件中会定义USERNAME,BASH_ENV和PATH等环境变量,但是此处的PATH除了包含系统的$PATH变 量外加入用户的“bin”目录路径.
~/.bashrc(用户级)离开时执行
接下来系统会检查~.bashrc文件,这个文件和前两个文件(/etc/profile 和~.bash_profile)最大的不同是,每次 执行bash时,~.bashrc都会被再次读取,也就是变量会再次地设置,而/etc/profile,~./bash_profile只有在登陆 时才读取。就是因为要经常的读取,所以~/.bashrc文件只定义一些终端机设置以及shell提示符号等功能,而不是定义环 境变量。
~/.bash_login(用户级)离开时执行
如果~.bash_profile文件不存在,则系统会转而读取~.bash_login这个文件内容。这是用户的登陆文件,在每次用户登 陆系统时,bash都会读此内容,所以通常都会将登陆后必须执行的命令放在这个文件中。
~/.bash_logout 离开时执行 如果想在注销shell前执行一些工作,都可以在此文件中设置。
~/.bash_history(用户级) 这个文件会记录用户先前使用的历史命令。
su其他用户时候分为两种情况
带 -l 参数,如:su -l username,则 bash 是 login 的,它将顺序读取以下配置文件:/etc/bash.bashrc,/etc/profile 和~/.bash_profile。完全切换用户
没有带 -l 参数,则 bash 是 non-login 的,它将顺序读取:/etc/bash.bashrc 和 ~/.bashrc,非完全切换用户
Ctrl+a 切换到命令行开始
Ctrl+e 切换到命令行末尾
Ctrl+r 在历史命令中查找,输入关键字调出之前的命令
在Shell命令中,通常会使用通配符表达式来匹配一些文件*,?,[],{}
?:匹配任意一个字符
*:匹配任意多个字符
[]:匹配[]中的任意单一字符
{}:匹配{}中其一字符串
; && ||
; 命令分割,在一行中执行多条语句
&& 一行中执行多条语句,前成功后面再执行
|| 一行中执行多条语句,前面不成功,后面再执行
vim xxx.sh //sh代表这个文件是个shell脚本,sh后缀有高亮显示。
执行脚本方式
sh 脚本.sh
bash 脚本.sh
./脚本.sh //需要执行权限
. 脚本.sh
source 脚本.sh
sh执行方式和bash执行方式想同
.执行方式和source执行方式相同
sh和source的区别:
sh:当使用sh来执行脚本时,它会创建一个新的子进程来执行脚本,并且脚本中的变量和环境设置通常不会影响当前的shell环境
source:使用source或.来执行脚本文件时,脚本中的命令会在当前Shell环境中执行,并且脚本可以修改当前Shell的变量和环境设置。