You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

6.8 KiB

初始Shell

作者:行癫(盗版必究)


Shell概述

1.计算机编程语言

计算机编程语言是程序设计的最重要的工具,它是指计算机能够接受和处理的、具有一定语法规则的语言

阶段:

机器语言

机器语言是用二进制代码表示的、计算机能直接识别和执行的一种机器指令的集合,第一代计算机语言

汇编语言

用与代码指令实际含义相近的英文缩写词、字母和数字等符号来取代指令代码

高级语言

自然语言相近并为计算机所接受和执行的计算机语言称高级语言;独立于机器面向过程或对象的语言

编译型和解释型语言:

解释型

解释性语言编写的程序不进行预先编译,以文本方式存储程序代码

执行时才翻译执行

程序每执行一次就要翻译一遍

代表语言pythonJavaScriptShell等

优缺点:跨平台能力强,易于调,执行速度慢

image-20230405123821400

编译型

编译型语言在执行之前要先经过编译过程,编译成为一个可执行的机器语言的文件

因为翻译只做一遍,以后都不需要翻译,所以执行效率高

典型代表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

[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

[root@xingdiancloud ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

二.GUN Bash特性

1.命令和文件自动补齐

下载bash-completion 补全工具

[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 %工作号:将后台中的命令调至前台继续运行

案例:

[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.输入输出重定向

0,1,2  > >> 2> 2>> 2>&1 &>        cat < /etc/hosts         cat <<EOF
[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.管道

[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.命令排序

; 无论前面是否执行成功,分号后的命令都会继续执行

&& 前面执行成功,后面的才继续执行

|| 前面命令不成功,后面的命令也会继续

[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}

\ 转义符,让元字符回归本意

[root@xingdiancloud ~]# echo *		
[root@xingdiancloud ~]# echo \*
[root@xingdiancloud ~]# touch xing\ dian

三:编写脚本

创建bash脚本 以.sh结尾的文件 .py结尾的文件是python的脚本

1.创建脚本文件

#!/bin/bash                #!/usr/bin/env bash
指定命令解释器:第一行的专门解释命令解释器
注释 :以#开有的都不生效
编写bash指令集合
#!/bin/bash
#注释
#authorblackmed
#version0.1
#功能

2.修改权限

注意:改不改权限都可以执行

[root@xingdiancloud ~]#./scripts
[root@xingdiancloud ~]#/shelldoc/scripts
[root@xingdiancloud ~]#bash scripts

四:脚本调试

sh x script 这将执行该脚本并显示所有变量的值

sh n script 不执行脚本只是检查语法模式,将返回所有错误语法

sh v script 执行脚本前把脚本内容显示在屏幕上