shell/初始shell.md

272 lines
6.8 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<h1><center>初始Shell</center></h1>
------
## 一Shell概述
#### 1.计算机编程语言
计算机编程语言是程序设计的最重要的工具,它是指计算机能够接受和处理的、具有一定语法规则的语言
阶段:
机器语言
机器语言是用二进制代码表示的、计算机能直接识别和执行的一种机器指令的集合,第一代计算机语言
汇编语言
用与代码指令实际含义相近的英文缩写词、字母和数字等符号来取代指令代码
高级语言
自然语言相近并为计算机所接受和执行的计算机语言称高级语言;独立于机器面向过程或对象的语言
编译型和解释型语言:
解释型
解释性语言编写的程序不进行预先编译,以文本方式存储程序代码
执行时才翻译执行
程序每执行一次就要翻译一遍
代表语言pythonJavaScriptShell等
优缺点:跨平台能力强,易于调,执行速度慢
<img src="https://xingdian-image.oss-cn-beijing.aliyuncs.com/xingdian-image/image-20230405123821400.png" alt="image-20230405123821400" style="zoom:50%;" />
编译型
编译型语言在执行之前要先经过编译过程,编译成为一个可执行的机器语言的文件
因为翻译只做一遍,以后都不需要翻译,所以执行效率高
典型代表C语言C++
优缺点:执行效率高,缺点是跨平台能力弱,不便调试
#### 2.shell能做什么
自动化批量系统初始化程序 (update软件安装时区设置安全策略...)
自动化批量软件部署程序 (LAMPLNMPTomcatLVSNginx)
应用管理程序(KVM集群管理扩容MySQLDELLR720批量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 <<EOF
```
```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
```
#### 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
#注释
#authorblackmed
#version0.1
#功能
```
#### 2.修改权限
注意:改不改权限都可以执行
```shell
[root@xingdiancloud ~]#./scripts
[root@xingdiancloud ~]#/shelldoc/scripts
[root@xingdiancloud ~]#bash scripts
```
## 四:脚本调试
sh x script 这将执行该脚本并显示所有变量的值
sh n script 不执行脚本只是检查语法模式,将返回所有错误语法
sh v script 执行脚本前把脚本内容显示在屏幕上