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. 二、YARN

    一.YARN 介绍 yarn 是下一代 MapReduce,即 MRv2,是在第一代 MapReduce 基础上演变而来的,主要是为了解决原始 Hadoop 扩展性较差,不支持多计算框架而提出的,通俗 ...

  2. SpringBoot+SpringCloud面试题整理

    什么是SpringBoot?1.用来简化spring初始搭建和开发过程使用特定的方式进行配置(properties或者yml文件)2.创建独立的spring引用程序main方法运行3.嵌入Tomcat ...

  3. mysql 的大文本存储TEXT & BLOB

    TEXT & BLOB 一般在保存少量字符串的时候,我们会选择 CHAR 或者 VARCHAR:而在保存较大文本时,通常会选择使用 TEXT 或者 BLOB,二者之间的主要差别是 BLOB 能 ...

  4. Life In Changsha College- 第四次冲刺

    第四次冲刺任务 整体功能实现. 用户故事 用户打开“生活在长大”的界面,选择登录 已注册过则输入用户名和密码直接登录 未注册用户则可选择注册功能,注册成功后登录 登录成功则弹出提示框 进行留言 系统结 ...

  5. 【PyTorch】深度学习与PyTorch资料链接整理

    欢迎来到我的博客! 以下链接均是日常学习,偶然得之,并加以收集整理,感兴趣的朋友可以多多访问和学习.如果以下内容对你有所帮助,不妨转载和分享.(Update on 5,November,2019) 1 ...

  6. [JavaWeb基础] 024.Socket编程之简单的聊天程序

    1.Socket的简介 1)什么是Socket 网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket ...

  7. Java IO(十二) 字符流 Writer 和 Reader

    Java IO(十二) 字符流 Reader和 Writer 一.介绍 涉及到文件(如果是纯文本文件形式)操作时,Java除了提供 FIle(文件和目录路径名的抽象表示形式) 和 FileDescri ...

  8. 用pandas处理数据遇到的坑

    1.使用pandas.read_csv(filePath)方法来读取csv文件时,可能会出现这种错误:ParserError:Error tokenizing data.C error:Expecte ...

  9. Vue 哈希换histroy

    这个需要后端支持一下 前端配置在router下的index.js配置如下: import Vue from 'vue' import Router from 'vue-router' import I ...

  10. 初步理解 MySQL数据库

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1. 索引是做什么的? 索引用于快速找出在某个列中有一特定值的行.不使用索引,MYSQL必须从第1条记录 ...