更新 'Shell-MD/初始shell.md'

main
diandian 1 year ago
parent 01bbde3bb4
commit 698824b1d1

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

Loading…
Cancel
Save