初始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 执行脚本前把脚本内容显示在屏幕上