diff --git a/Shell-MD/初始shell.md b/Shell-MD/初始shell.md index 9480b9f..cfb1ddb 100644 --- a/Shell-MD/初始shell.md +++ b/Shell-MD/初始shell.md @@ -1,289 +1,271 @@ -

初始Shell

- -作者:行癫(盗版必究) - ------- - -## 一:Shell概述 - -#### 1.计算机编程语言 - -​ 计算机编程语言是程序设计的最重要的工具,它是指计算机能够接受和处理的、具有一定语法规则的语言 - -阶段: - -​ 机器语言 - -​ 机器语言是用二进制代码表示的、计算机能直接识别和执行的一种机器指令的集合,第一代计算机语言 - -​ 汇编语言 - -​ 用与代码指令实际含义相近的英文缩写词、字母和数字等符号来取代指令代码 - -​ 高级语言 - -​ 自然语言相近并为计算机所接受和执行的计算机语言称高级语言;独立于机器面向过程或对象的语言 - -分类: - -​ 命令式语言 - -​ C、C++、Basic、Ada、Java、C#、Shell、Python等,各种脚本语言也被看作是此种类型 - -​ 函数式语言 - -​ 基于数学函数概念的值映射的λ算子可计算模型;Lisp、Haskell、ML、Scheme 、F#等 - -​ 逻辑式语言 - -​ 基于一组已知规则的形式逻辑系统;最著名的逻辑式语言是 Prolog - -​ 面向对象语言 - -​ 现代语言中的大多数都提供面向对象的支持,纯面向对象语言是 Smalltalk - -编译型和解释型语言: - -​ 解释型 - -​ 解释性语言编写的程序不进行预先编译,以文本方式存储程序代码 - -​ 执行时才翻译执行 - -​ 程序每执行一次就要翻译一遍 - -​ 代表语言:python,JavaScript,Shell等 - -​ 优缺点:跨平台能力强,易于调,执行速度慢 - -image-20230405123821400 - -​ 编译型 - -​ 编译型语言在执行之前要先经过编译过程,编译成为一个可执行的机器语言的文件 - -​ 因为翻译只做一遍,以后都不需要翻译,所以执行效率高 - -​ 典型代表:C语言,C++ - -​ 优缺点:执行效率高,缺点是跨平台能力弱,不便调试 - -#### 2.shell能做什么 - -​ 自动化批量系统初始化程序 (update,软件安装,时区设置,安全策略...) - -​ 自动化批量软件部署程序 (LAMP,LNMP,Tomcat,LVS,Nginx) - -​ 应用管理程序(KVM,集群管理扩容,MySQL,DELLR720批量RAID) - -​ 日志分析处理程序(PV, UV, 200, !200, top 100, grep/awk) - -​ 自动化备份恢复程序(MySQL完全备份/增量 + Crond) - -​ 自动化管理程序(批量远程修改密码,软件升级,配置更新) - -​ 自动化信息采集及监控程序(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL) - -​ 配合Zabbix信息采集(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL) - -​ 自动化扩容(增加云主机——>业务上线) - -​ Shell可以做任何事(一切取决于业务需求) - -#### 3.shell定义 - -​ Shell 是命令解释器,用于与操作系统交互,用来完成各种任务,如文件操作、系统管理、网络管理等 - -​ Shell 是一种程序设计语言,他有变量,有自己的语法结构等,shell程序设计语言可以编写功能很强、代码简短的程序 - -#### 4.获取当前支持的Shell - -```shell -[root@xingdiancloud ~]# cat /etc/shells -/bin/sh -/bin/bash -/usr/bin/sh -/usr/bin/bash -/bin/tcsh -/bin/csh -[root@xingdiancloud ~]# chsh -l -/bin/sh -/bin/bash -/usr/bin/sh -/usr/bin/bash -/bin/tcsh -/bin/csh -``` - -​ strem9: - -```shell -[root@xingdiancloud ~]# cat /etc/shells -/bin/sh -/bin/bash -/usr/bin/sh -/usr/bin/bash -``` - -## 二.GUN Bash特性 - -#### 1.命令和文件自动补齐 - -​ 下载bash-completion 补全工具 - -```shell -[root@xingdiancloud ~]# yum install bash-completion -y -``` - -#### 2.命令历史记忆功能 - -​ 上下键调用历史命令 - -​ 获取历史命令的命令:history - -​ 获取某一条历史命令:!number 直接执行对应序号的命令 - -​ 快捷键调用历史命令:Ctrl+r 输入关键字调出之前的命令 - -#### 3.快捷键 - -​ Ctrl+a 切换到命令行开始 - -​ Ctrl+e 切换到命令行末尾 - -​ Ctrl+u 清除剪切光标之前的内容 - -​ Ctrl+k 清除剪切光标之后的内容 - -​ Ctrl+y 粘贴刚才锁删除的字符 - -​ Ctrl+左右键 快速移动光标 - -#### 4.前后台作业控制 - -​ &:后台运行 - -​ nohup:正在运行一个进程,退出帐户时该进程不会结束 - -​ ^C:终止 - -​ ^Z:暂停 - -​ jobs:查看后台进行 - -​ bg %工作号:将一个在后台暂停的命令,变成继续执行 - -​ fg %工作号:将后台中的命令调至前台继续运行 - -案例: - -```shell -[root@xingdiancloud ~]# sleep 1000 & -[1] 7761 -[root@xingdiancloud ~]# jobs -[1]+ Running sleep 1000 & -[root@xingdiancloud ~]# jobs -[1]+ Running sleep 1000 & -[root@xingdiancloud ~]# kill -19 %1 - -[1]+ Stopped sleep 1000 -[root@xingdiancloud ~]# jobs -[1]+ Stopped sleep 1000 -[root@xingdiancloud ~]# bg %1 -[1]+ sleep 1000 & -``` - -#### 5.输入输出重定向 - -```shell -0,1,2 > >> 2> 2>> 2>&1 &> cat < /etc/hosts cat < /proc/self/fd/2 -lrwxrwxrwx 1 root root 15 Sep 1 2015 /dev/stdin -> /proc/self/fd/0 -lrwxrwxrwx 1 root root 15 Sep 1 2015 /dev/stdout -> /proc/self/fd/1 -``` - -#### 6.管道 - -```shell -[root@xingdiancloud ~]# ip addr |grep 'inet ' |grep eth0 -[root@xingdiancloud ~]# ip addr |grep 'inet ' |tee test |grep eth0 覆盖 -[root@xingdiancloud ~]# ip addr |grep 'inet ' |tee -a test |grep eth0 -a 追加 -``` - -#### 7.命令排序 - -​ ; 无论前面是否执行成功,分号后的命令都会继续执行 - -​ && 前面执行成功,后面的才继续执行 - -​ || 前面命令不成功,后面的命令也会继续 - -```shell -[root@xingdiancloud ~]# ./configure && make && make install (命令返回值 echo $?) -[root@xingdiancloud ~]# mkdir /var/111/222/333 && echo ok -[root@xingdiancloud ~]# mkdir -p /var/111/222/333 && echo ok -[root@xingdiancloud ~]# ls /home/111/222/333/444 || mkdir -p /home/111/222/333/444 -``` - -#### 8.shell通配符 - -​ * 匹配任意多个字符 ls in* - -​ ? 匹配任意一个字符 ll l?ve - -​ [] 匹配括号中任意一个字符 [a-z] - -​ () 在子shell中执行 (umask 077; touch file1000) - -​ {} 集合 touch file{1..9} - -​ \ 转义符,让元字符回归本意 - -```shell -[root@xingdiancloud ~]# echo * -[root@xingdiancloud ~]# echo \* -[root@xingdiancloud ~]# touch xing\ dian -``` - -## 三:编写脚本 - -​ 创建bash脚本: 以.sh结尾的文件 .py结尾的文件是python的脚本 - -#### 1.创建脚本文件 - -```shell -#!/bin/bash #!/usr/bin/env bash -指定命令解释器:第一行的专门解释命令解释器 -注释 :以#开有的都不生效 -编写bash指令集合 -``` - -```shell -#!/bin/bash -#注释 -#author:blackmed -#version:0.1 -#功能 -``` - -#### 2.修改权限 - -​ 注意:改不改权限都可以执行 - -```shell -[root@xingdiancloud ~]#./scripts -[root@xingdiancloud ~]#/shelldoc/scripts -[root@xingdiancloud ~]#bash scripts -``` - -## 四:脚本调试 - -​ sh –x script 这将执行该脚本并显示所有变量的值 - -​ sh –n script 不执行脚本只是检查语法模式,将返回所有错误语法 - -​ sh –v script 执行脚本前把脚本内容显示在屏幕上 +

初始Shell

+ +作者:行癫(盗版必究) + +------ + +## 一:Shell概述 + +#### 1.计算机编程语言 + +​ 计算机编程语言是程序设计的最重要的工具,它是指计算机能够接受和处理的、具有一定语法规则的语言 + +阶段: + +​ 机器语言 + +​ 机器语言是用二进制代码表示的、计算机能直接识别和执行的一种机器指令的集合,第一代计算机语言 + +​ 汇编语言 + +​ 用与代码指令实际含义相近的英文缩写词、字母和数字等符号来取代指令代码 + +​ 高级语言 + +​ 自然语言相近并为计算机所接受和执行的计算机语言称高级语言;独立于机器面向过程或对象的语言 + +编译型和解释型语言: + +​ 解释型 + +​ 解释性语言编写的程序不进行预先编译,以文本方式存储程序代码 + +​ 执行时才翻译执行 + +​ 程序每执行一次就要翻译一遍 + +​ 代表语言:python,JavaScript,Shell等 + +​ 优缺点:跨平台能力强,易于调,执行速度慢 + +image-20230405123821400 + +​ 编译型 + +​ 编译型语言在执行之前要先经过编译过程,编译成为一个可执行的机器语言的文件 + +​ 因为翻译只做一遍,以后都不需要翻译,所以执行效率高 + +​ 典型代表:C语言,C++ + +​ 优缺点:执行效率高,缺点是跨平台能力弱,不便调试 + +#### 2.shell能做什么 + +​ 自动化批量系统初始化程序 (update,软件安装,时区设置,安全策略...) + +​ 自动化批量软件部署程序 (LAMP,LNMP,Tomcat,LVS,Nginx) + +​ 应用管理程序(KVM,集群管理扩容,MySQL,DELLR720批量RAID) + +​ 日志分析处理程序(PV, UV, 200, !200, top 100, grep/awk) + +​ 自动化备份恢复程序(MySQL完全备份/增量 + Crond) + +​ 自动化管理程序(批量远程修改密码,软件升级,配置更新) + +​ 自动化信息采集及监控程序(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL) + +​ 配合Zabbix信息采集(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL) + +​ 自动化扩容(增加云主机——>业务上线) + +​ Shell可以做任何事(一切取决于业务需求) + +#### 3.shell定义 + +​ Shell 是命令解释器,用于与操作系统交互,用来完成各种任务,如文件操作、系统管理、网络管理等 + +​ Shell 是一种程序设计语言,他有变量,有自己的语法结构等,shell程序设计语言可以编写功能很强、代码简短的程序 + +#### 4.获取当前支持的Shell + +```shell +[root@xingdiancloud ~]# cat /etc/shells +/bin/sh +/bin/bash +/usr/bin/sh +/usr/bin/bash +/bin/tcsh +/bin/csh +[root@xingdiancloud ~]# chsh -l +/bin/sh +/bin/bash +/usr/bin/sh +/usr/bin/bash +/bin/tcsh +/bin/csh +``` + +​ strem9: + +```shell +[root@xingdiancloud ~]# cat /etc/shells +/bin/sh +/bin/bash +/usr/bin/sh +/usr/bin/bash +``` + +## 二.GUN Bash特性 + +#### 1.命令和文件自动补齐 + +​ 下载bash-completion 补全工具 + +```shell +[root@xingdiancloud ~]# yum install bash-completion -y +``` + +#### 2.命令历史记忆功能 + +​ 上下键调用历史命令 + +​ 获取历史命令的命令:history + +​ 获取某一条历史命令:!number 直接执行对应序号的命令 + +​ 快捷键调用历史命令:Ctrl+r 输入关键字调出之前的命令 + +#### 3.快捷键 + +​ Ctrl+a 切换到命令行开始 + +​ Ctrl+e 切换到命令行末尾 + +​ Ctrl+u 清除剪切光标之前的内容 + +​ Ctrl+k 清除剪切光标之后的内容 + +​ Ctrl+y 粘贴刚才锁删除的字符 + +​ Ctrl+左右键 快速移动光标 + +#### 4.前后台作业控制 + +​ &:后台运行 + +​ nohup:正在运行一个进程,退出帐户时该进程不会结束 + +​ ^C:终止 + +​ ^Z:暂停 + +​ jobs:查看后台进行 + +​ bg %工作号:将一个在后台暂停的命令,变成继续执行 + +​ fg %工作号:将后台中的命令调至前台继续运行 + +案例: + +```shell +[root@xingdiancloud ~]# sleep 1000 & +[1] 7761 +[root@xingdiancloud ~]# jobs +[1]+ Running sleep 1000 & +[root@xingdiancloud ~]# jobs +[1]+ Running sleep 1000 & +[root@xingdiancloud ~]# kill -19 %1 + +[1]+ Stopped sleep 1000 +[root@xingdiancloud ~]# jobs +[1]+ Stopped sleep 1000 +[root@xingdiancloud ~]# bg %1 +[1]+ sleep 1000 & +``` + +#### 5.输入输出重定向 + +```shell +0,1,2 > >> 2> 2>> 2>&1 &> cat < /etc/hosts cat < /proc/self/fd/2 +lrwxrwxrwx 1 root root 15 Sep 1 2015 /dev/stdin -> /proc/self/fd/0 +lrwxrwxrwx 1 root root 15 Sep 1 2015 /dev/stdout -> /proc/self/fd/1 +``` + +#### 6.管道 + +```shell +[root@xingdiancloud ~]# ip addr |grep 'inet ' |grep eth0 +[root@xingdiancloud ~]# ip addr |grep 'inet ' |tee test |grep eth0 覆盖 +[root@xingdiancloud ~]# ip addr |grep 'inet ' |tee -a test |grep eth0 -a 追加 +``` + +#### 7.命令排序 + +​ ; 无论前面是否执行成功,分号后的命令都会继续执行 + +​ && 前面执行成功,后面的才继续执行 + +​ || 前面命令不成功,后面的命令也会继续 + +```shell +[root@xingdiancloud ~]# ./configure && make && make install (命令返回值 echo $?) +[root@xingdiancloud ~]# mkdir /var/111/222/333 && echo ok +[root@xingdiancloud ~]# mkdir -p /var/111/222/333 && echo ok +[root@xingdiancloud ~]# ls /home/111/222/333/444 || mkdir -p /home/111/222/333/444 +``` + +#### 8.shell通配符 + +​ * 匹配任意多个字符 ls in* + +​ ? 匹配任意一个字符 ll l?ve + +​ [] 匹配括号中任意一个字符 [a-z] + +​ () 在子shell中执行 (umask 077; touch file1000) + +​ {} 集合 touch file{1..9} + +​ \ 转义符,让元字符回归本意 + +```shell +[root@xingdiancloud ~]# echo * +[root@xingdiancloud ~]# echo \* +[root@xingdiancloud ~]# touch xing\ dian +``` + +## 三:编写脚本 + +​ 创建bash脚本: 以.sh结尾的文件 .py结尾的文件是python的脚本 + +#### 1.创建脚本文件 + +```shell +#!/bin/bash #!/usr/bin/env bash +指定命令解释器:第一行的专门解释命令解释器 +注释 :以#开有的都不生效 +编写bash指令集合 +``` + +```shell +#!/bin/bash +#注释 +#author:blackmed +#version:0.1 +#功能 +``` + +#### 2.修改权限 + +​ 注意:改不改权限都可以执行 + +```shell +[root@xingdiancloud ~]#./scripts +[root@xingdiancloud ~]#/shelldoc/scripts +[root@xingdiancloud ~]#bash scripts +``` + +## 四:脚本调试 + +​ sh –x script 这将执行该脚本并显示所有变量的值 + +​ sh –n script 不执行脚本只是检查语法模式,将返回所有错误语法 + +​ sh –v script 执行脚本前把脚本内容显示在屏幕上