1.shell的功能

(1)自动化批量初始化系统:对N台系统初始化(装系统时对系统的时区、yum源、软件包的更新、安全的设置进行初始化)

(2)自动化批量部署软件程序:(LAMP/LNMP/Tomcat/LVS/Nginx)

(3)写一些自动化的管理应用程序:(KVM虚拟化管理、集群的管理比如扩容、mysql的部署升级备份等)关键是管理命令而不是语法。

(4)日志的分析处理程序:(比如打印出当天网站的PV、UV量;top100;tcp的各个状态统计等):用到比较多的命令是grep/awk。

(5)自动化备份、恢复程序:(mysql完全备份、增量备份) Crond计划任务(定时)

(6)自动化管理程序(批量远程修改密码、配置更新)

(7)自动化信息采集及监控程序(收集每个系统/应用的状态信息:如cpu、mem、disk使用和tcp状态等、apache和mysql的健康信息等)

tcp状态:ss -an | grep :80    过滤80端口的tcp连接的状态。

(8)和其他程序搭配使用。Zabbix是用来收集各种健康状态、cpu、mem等信息(很直观)。自动化扩容(增加云服务器---->部署应用):开始是利用Zabbix进行监控报警、手动增加服务器和上线业务,现可以zabbix监控(python开发的)(cpu>80%)报警,然后调用python的api实现对云主机的增加、减少,利用shell实现业务的上线。

2.shell执行

(1)一个简单的shell程序

在ping01.sh里写下:

ping -c1 www.qfedu.com &>/dev/null && echo "ok........" || echo “not ok”

ping -c1 代表ping1次

每个命令执行完成后都有个返回值,执行成功返回0,不成功为非0.返回值变量为?比如echo $?  ($?表示获取值) echo $?表示上个命令返回的值.

&&:逻辑判断。当前面执行成功(0),后面才会执行(注:分号;把两条命令隔开,但不具备逻辑判断,用于命令的排序。)

&>/dev/nul: 不想要ping的信息,就重定向到null中去(&代表混合输出,包含标准输出和错误输出)

执行:bash ping01.sh 或者sh ping01.sh

也可以通过绝对路径或者相对路径(./ping01.sh)执行,但要执行权限。

chmod +x ping01.sh  给文件加执行权限

#!/bin/bash  定义程序用哪个解释器执行。当执行时没有明确指定解释器时会生效(比如用相对路径执行脚本)。

bash、sh、source和.执行的区别:

bash、sh是在子shell中执行。source和.在当前shell执行。当shell文件里有切换目录命令时,用./和bash执行,不会切换目录(因为这两个是在sub shell子shell中执行。重新开了个shell,当前的shell就不会变);而 . 或者source是在当前shell执行,就会切换当前的目录。(常规情况在子shell执行,但想要脚本中定义的一个变量就在当前shell中生效,就用.或者source。比如在/root/.bashrc下修改别名,重启也会生效,当通过source /root/.bashrc执行,就可以使用刚才定义的别名)

(2)程序语言执行

程序语言执行时是不一样的。c程序写完后要编译,然后变成机器码(cpu可以执行的),所以c最快。java写完后也要编码,但没有c快,因为编译完后是字节码(只能被java的虚拟机执行),cpu不能直接识别。java移植性好,任何平台只要有jdk虚拟机就能执行,但c的话和cpu的指令集有关(x86复杂指令集、Power精简指令集)(gcc编译默认编译是当前平台的)。python有两种执行:解释执行和编译执行(编译成字节码:python虚拟机执行)

程序由逻辑数据组成。程序执行方式有两种:编译和解释型。shell不需要事先编译,执行时才去考虑逻辑关系(解释)。c语言在执行时逻辑已经考虑好了,直接拿代码执行,所以快。

3.bash文件中执行其他程序的代码

一个脚本里既有shell代码,又有python代码。在python那段代码前后写上EOF重定向。

#!/bin/bash

ping -c1 www.qfedu.com &>/dev/null && echo "ok........"|| echo "not ok"

/usr/bin/python <<-EOF

print("hello")

EOF

echo 'hello bash'

将python代码重定向给python执行。

例子:

/usr/bin/cat <<-EOF

EOF

也是让cat执行中间的代码。(这个EOF可以是任何标识。通用 的是EOF)

python文件中不能识别shell脚本。

4.shell基础

内容:特性、变量、条件测试、数值运算、流程控制和循环

1.login shell和nologin shell区别:

su是切换用户。当su - yq 是login shell登陆shell,切换到用户yq的目录。而没有加-的su yq,叫nologin shell,没有加载新用户的shell环境,还是root的目录,但没有访问权限。

shell相关的文件:系统级别的/etc/profile、/etc/hashrc和用户级别的家目录下的~/.bash-profile、~/.bashrc、~/.bash_logout和~/.bash_history。前4个是在登陆shell时执行。后面两个是在离开shell执行。

login shell登陆时执行4个文件,nologin shell登陆时执行/etc/hashrc~/.bashrc,不执行profile文件。

rmp -qc bash 查看bash的配置文件

所以要加-

2.bash shell特点

(1)命令和文件的自动补齐 tab键

能补齐是因为安装了bash-com软件

rpm -qa | grep bash-completion

(2)历史记忆功能

上下键、!number(执行给定行号的历史命令)、!string(找到最近一个以string开头的命令) 、!$(代表上一个命令 的最后一个参数)、!!(上一个命令。脚本没有上下键)、

(3)别名功能

alias(查看当前shell的别名)、unalias取消别名。或者执行时在别名前加\跳过别名

~/.bashrc中定义别名(永久的)

(4)快捷键

ctrl+r:搜索一个历史命令

ctrl+d:退出shell 相当于exit或者logout

ctrl+a、ctrl+e:命令的编辑(ctrl+a将光标移动到最前面、ctrl+e:删除命令)

ctrl+s、ctrl+q:s是锁住屏幕(输命令没反应),q是退出锁住的状态

(5)前后台作业控制

&:后台作业。比如sleep 3000 &  把睡3000秒放到后台作业。此时grep aux|grep sleep可以看到进程

ctrl+z:把正在做的作业放到后台

screen:先装一个yum -y install screen。连上终端先输入screen -S 会话名(定义会话名称)。然后输入其他命令。退出程序后,再重新进入可以screen -list查看到之前会话名的和会话名的数字。然后输入screen -r 数字就可以回到退出前状态,识别上次会话(连到远程的shell的首选

ctrl+c:只能杀掉前台进程(不能杀后台)。进程执行顺序:父进程fork一个子进程,子进程会占终端,父进程会sleep睡觉,只有子进程结束,通知父进程资源回收,释放掉所有资源,父进程就会回到终端。比如sleep 80对于shell来讲是个子进程,因此父进程就没办法工作,因此就将其放到后台去(加&或者按ctrl+z)。

jobs:查看后台进程

bg或者bg+作业号:查看后台进程或者让某进程到后台工作

fg或者fg+作业号:回到前台

例子:vim /etc/hosts做到一般,按ctrl+z将其放到后台,此时进入终端,执行其他命令,然后再按fg,就又将vim从后台调入前台,继续执行vim操作。

kill %3给当前终端作业号为3的发信号。没有%就是杀死进程号为3的进程。因此%不能省

(6)重定向

每个进程打开一个文件,就有一个文件描述符fd。(0代表输入的文件(默认是键盘)、1代表输出的文件(默认是屏幕)、2代表错误的文件)。

输出重定向:> 覆盖  >>追加

2>、2>> 错误输出

2>&1:标准错误输出重定向到标准输出   &>:混合输出

cat < /etc/hosts > /etc/hosts1相当于拷贝

cat<<EOF 把输入的内容给cat执行

cat <<EOF > file2 将多行内容输入到file2文件中

(7)管道

一个命令的输出做下一个命令的输入

ip addr | grep ‘inet’ | grep eth0

tee:复制一份到文件里

ip addr | grep ‘inet’ | tee test.txt |grep eth0   #覆盖

ip addr | grep ‘inet’ | tee -a test.txt |grep eth0   #追加

date>a.txt 重定向到文件,但终端不显示了

date | tee a.txt 会在终端显示,并且把显示输入到文件中

(8)命令排序

分号; 不具备逻辑判断,一行输入多行命令。前面失败,后面照常执行

&& : 前面成功后面才执行如./configure && make && make install

|| 具备逻辑判断。前面失败,就执行后面的命令;前面成功,后面的命令不执行

如ping -c1 10.10.10.2 &> /dev/null && echo ‘ok’ || echo ‘no’  ping成功执行ok,失败执行no

true永远返回为真。echo $?查看上条命令的返回值

注意:

command &     后台执行

command &> /dev/null   混合输出(标准输出1和错误输出2)

command && command2  命令排序,逻辑判断。

(9)shell通配符(元字符)

元字符就是符号表示的不是本意的符号。  不同于正则(正则是前面)

* 任意多个字符 ls *.txt或者find / -iname ‘*-eth0’

? 任意一个字符

[] 匹配括号中的任意一个字符

() 在子shell中执行。例如(umask 077; touch yq.txt)开一个子shell去执行,否则umask会修改当前shell的权限设置。

注:umask默认是002。用户创建文件的权限默认是666,创建目录的默认权限是777。但是由于umask会修改权限,即减少相应的数字,则最终文件权限是664,目录权限是775。可以通过umask + 数字 修改。

{} 集合 如touch file{1..9}

\ 转义符   \可以将换行的功能转义掉,就可以换行。只转义后面的第一个字符

如echo -e ‘a\tb’  a和b之间有个tab键 echo -e是处理特殊字符

(10)echo颜色输出

echo -e '\e[1;31mThis is a red text.\e[0m'

\e[1; 是固定写法。

31m-37m是字体的不同的7个颜色

\e[0m 是将颜色恢复成正常颜色(颜色的重置)。不写这个,后面终端命令都会变成前面的颜色。

注意文本和前面颜色的命令是紧挨着的。

背景颜色:41m-47m

echo -e '\e[1;41mThis is a red text.\e[0m'

注意:要有-e才能识别特殊字符

printf格式化输出,相比echo好。

shell编程(一):功能、执行、基础的更多相关文章

  1. shell编程中如何执行oracle语句

    shell编程中如果向oracle中插入数据之类的,需要先把执行语句放到文件中,然后再@这个文件执行 有如下俩种方式供参考: SQL=`sqlplus user/pwd@orains << ...

  2. shell编程企业级实战

    如何才能学好Shell编程 为什么要学习shell编程 Shell是Linux底层核心 Linux运维工作常用工具 自动化运维必备基础课程 学好shell编程所需Linux基础 熟练使用vim编辑器 ...

  3. Linux(8):linux三剑客sed和awk & Shell 编程(1)

    linux 三剑客 之 sed # sed 是什么? # sed : 字符流编辑器 Stream Editor: sed 擅长 替换.取行等 # sed 的功能与版本: 处理纯文本文件.日志.配置文件 ...

  4. 初识shell编程

    1.shell编程之为什么学.怎么学 为什么学shell编程 Linux系统批量管理 提升工作效率,减少重复工作 学好shell编程所需要的基础知识 熟悉使用vim编辑器 熟悉SSH终端 熟练掌握Li ...

  5. ? 原创: 铲子哥 搜狗测试 今天 shell编程的时候,往往不会把所有功能都写在一个脚本中,这样不太好维护,需要多个脚本文件协同工作。那么问题来了,在一个脚本中怎么调用其他的脚本呢?有三种方式,分别是fork、source和exec。 1. fork 即通过sh 脚本名进行执行脚本的方式。下面通过一个简单的例子来讲解下它的特性。 创建father.sh,内容如下: #!/bin/bas

    ? 原创: 铲子哥 搜狗测试 今天 shell编程的时候,往往不会把所有功能都写在一个脚本中,这样不太好维护,需要多个脚本文件协同工作.那么问题来了,在一个脚本中怎么调用其他的脚本呢?有三种方式,分别 ...

  6. Linux学习笔记(17) Shell编程之基础

    1. 正则表达式 (1) 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep.awk.sed等命令可以支持正则表达式:通配符用来匹配符合条件的文件名,通配符是完全匹配.ls.find ...

  7. Shell编程菜鸟基础入门笔记

    Shell编程基础入门     1.shell格式:例 shell脚本开发习惯 1.指定解释器 #!/bin/bash 2.脚本开头加版权等信息如:#DATE:时间,#author(作者)#mail: ...

  8. linux —— shell 编程(整体框架与基础笔记)

    导读 关于shell编程基础的学习,网上有很多资源,如果在校图书馆应该也有一些教程,所以这里对于零碎的基础不做详细记录,而只是对一些常用的概念.命令与操作做一个简要的记录,以备方便查找. (本文所有语 ...

  9. 【转】Shell编程基础篇-上

    [转]Shell编程基础篇-上 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应 ...

  10. shell编程基础(转载)

    Shell编程基础 原作者 Leal:请参阅页面底部的编者列表. 授权许可: 创作共享署名协议 GNU 自由文档许可证 注意:本文仍然在持续的修订之中,且错漏之处可能较多.如果能够阅读英语的话,可以考 ...

随机推荐

  1. Node.js中间件的使用

    1.中间件 为主要的业务逻辑服务:接收到请求,以及做出响应 应用级中间件.路由级中间件.内置中间件.第三方中间件.错误处理中间件 (1)路由级中间件 路由器的使用 (2)应用级中间件 也称为自定义中间 ...

  2. django提供二进制流数据文件的下载

    基于djnago框架的二进制流数据传输(提供较大文件的下载) (1)数据源: 高质量图片.视频.音频.文件.数据库数据等.如果是数据库文件,需要先读取相应的数据,然后写入表格在传输到前端以供下载! ( ...

  3. logback-spring.xml配置

    logback-spring.xml配置 <?xml version="1.0" encoding="UTF-8"?> <configurat ...

  4. BZOJ4260异或和

    4260: Codechef REBXOR Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 918  Solved: 420[Submit][Statu ...

  5. SpringBoot瘦身

    1.介绍 本教程中,我们将研究如何使用spring-boot-thin-launcher项目来将Spring Boot项目瘦身. Spring Boot出了名的把所有依赖打包成单个可执行的Fat JA ...

  6. Istio ServiceEntry 引入外部服务

    概念及示例 使用服务入口Service Entry来添加一个入口到 Istio 内部维护的服务注册中心.添加了服务入口后,Envoy 代理可以向服务发送流量,就好像它是网格内部的服务一样.配置服务入口 ...

  7. Istio 1.6架构及性能

    Istio 架构 Istio 服务网格从逻辑上分为数据平面和控制平面. 数据平面 由一组智能代理(Envoy)组成,被部署为 sidecar.这些代理负责协调和控制微服务之间的所有网络通信.他们还收集 ...

  8. Ubuntu虚拟机的安装

    1.在VMware中新建虚拟机 注意W10的现在强制升级VMware所以大家,安装低版本的时候提示,升级就区官网下载一个新版本的即可. 这边大家填写自己的就好,要记住自己填写的! 这边我们等一会即可. ...

  9. 关于 npm 包管理器最常用的内容都在这儿了

    Nodejs的诞生,给前端开发世界带来了翻天覆地的变化. 前端工程化,各种工具,以及向后端的能力扩展. 车子离不开轮子,node(前后端)开发离不开npm这个包管理工具,在这总结下常用配套工具: np ...

  10. 线程的同步机制:同步代码块&同步方法

    解决存在的线程安全问题:打印车票时出现重票,错票 使用同步代码块的解决方案 TestWindow2 package com.aff.thread; /* 使用实现Runnable接口的方式,售票 存在 ...