Shell编程实战

 

为什么要学习Shell编程

Shell脚本语言是实现Linux/Unix系统管理及自动化运维所必须的重要工具,Linux系统的底层以及基础应用软件的核心大都涉及Shell脚本的内容。

一个合格的Linux系统管理员都必须熟练编写Shell脚本语言,从而提升运维人员的工作效率,减少不必要的重复性工作。

学习Shell所需的基础知识

熟练使用VIm编辑器,熟悉SSH终端等配置

在Linux下开发shell脚本用的最多的就是vim编辑器,熟练使用vim可以使得shell脚本开发事半功倍!

有一定的Linux命令基础,熟练掌握80个命令以上

shell和其他脚本语言不同,如python,Shell缺少可以直接使用的外部函数库,因此Linux系统的命令就可以当做Shell的函数库!

熟悉常见Linux服务部署,优化,分析与排错

学习Shell直接的目的是在工作中对系统以及服务进行自动化管理,因此如果不熟悉服务操作,使用shell也就没有意义了

什么是Shell

Shell存在于操作系统的最外层,负责与用户直接对话,把用户的输入解释给操作系统,处理操作系统的输出结果,然后反馈给用户。

Shell是一个命令解释器,它的作用是解释并执行用户输入的命令和程序等,用户每输入一条命令,Shell解释器就执行一条,存在一种交互的方式。

从开机准备输入用户名和密码,到登录成功,所有的操作都是Shell解释并执行的。

什么是Shell脚本

当命令或者程序语句不是在命令行中执行,而是通过一个程序文件来执行时,这个程序就称作Shell脚本。

一个简单的Shell脚本

清除/var/log下的messages日志文件

把所有命令放入一个文件,堆积起来后就是一个脚本文件!注意文件的可执行权限,与用户身份

#清除脚本日志
cd /var/log
cat /dev/null > messages
echo "Logs cleaned up . done"

Shell脚本语言的种类

Shell脚本语言是弱类型语言(无须定义变量的类型即可使用)
在Linux中有两大Shell,一是Bourne shell,二是C shell
我们需要知道的就是标准的Bourne Again shell(bash)所取代
查看CentOS 7系统的Shell

其他的脚本语言

php
Perl
Python

语言选择

Shell脚本语言优势在于处理系统底层的业务,基于linux命令处理也是最快的,常用语开发自动化安装,监控报警,软件启动等脚本。

第一个Shell脚本与hello world

脚本开头

一个规范的脚本文件会在第一行指出由哪个程序来执行脚本的内容,必须位于第一行!!!如果你不加默认也会交给bash解释,良好的编程习惯,最好加上开头解释器语言标识
#!/bin/bash
#!/usr/bin/env python

执行Shell脚本的方式

bash 脚本名
sh 脚本名
此方法是脚本没有可执行权限时,或者文件头没指定解释器时用的方法 path/scriptName
./scriptName
此方法需要脚本有可执行权限,chmod +x scriptName source scriptName
. scriptName
加载并执行脚本文件中的命令和语句
[root@oldboy_python /tmp ::]#sh test.sh
chaoge nb
[root@oldboy_python /tmp ::]#cat test.sh
#!/bin/bash
echo 'chaoge nb'
[root@oldboy_python /tmp ::]#. test.sh
chaoge nb
[root@oldboy_python /tmp ::]#source test.sh
chaoge nb
#添加可执行权限给test.sh
chmod +x test.sh
./test.sh

变量

环境变量一般指的是export内置命令导出的变量,用于定义SHell的运行环境。
Shell通过环境变量来确定命令提示符,也就是超哥前面说的PS1变量
环境变量可以在命令行中设置和创建,但是用户退出命令行时变量值就会丢失,因此可以写入/etc/profile文件中,每次用户登录时,变量都会被初始化!
环境变量名字均大写,用env查看

设置登录的提示

[root@oldboy_python ~ ::]#cat /etc/motd
'welcome chaoge bakcome~~~~~~~~~'

yudanL:~ yuchao$ ssh root@192.168.11.11
Last failed login: Wed Aug 29 11:20:20 CST 2018 from 111.231.199.24 on ssh:notty
There were 25 failed login attempts since the last successful login.
Last login: Wed Aug 29 10:45:51 2018 from 223.72.74.11
'welcome chaoge bakcome~~~~~~~~~`'

定义变量

变量定义的注意点

  • 变量名和等号之间不能有空格
  • 命名只能用英文字母,数字,下划线,首个字符不能用数字
  • 不能用标点符号
  • 不能用关键字
name='chaoge'
echo $name
echo ${name} #帮助解释器识别变量的边界
#变量重新赋值
name='chaogenb'

设置只读变量

[root@oldboy_python ~ ::]#readonly name
[root@oldboy_python ~ ::]#name='chaogenb3'
-bash: name: 只读变量

删除变量

unset name

变量类型

  • 局部变量 在脚本或命令中定义,仅在当前shell有效
  • 环境变量 所有的程序,shell程序都能访问环境变量
  • shell变量 特殊变量 既有环境变量 又有局部变量

字符串

字符串可以用单引号,也可以双引号,也可以没引号

[root@oldboy_python ~ ::]#addr='shahe'
[root@oldboy_python ~ ::]#echo $addr
shahe

单引号的任何字符串都会原样输出,单引号字符串中的变量无效

单引号字符串不能出现单一的单引号,转义符也不可用,可用作字符串拼接

双引号

双引号里可以用变量

双引号可以有转义符

[root@oldboy_python ~ ::]#addr='changpingshahe'
[root@oldboy_python ~ ::]#name='yuchao'
[root@oldboy_python ~ ::]#message="Hello,${name},Your addr is \"${addr}\" "
[root@oldboy_python ~ ::]#echo $message
Hello,yuchao,Your addr is "changpingshahe"

获取字符串长度

[root@oldboy_python ~ ::]#str='abc'
[root@oldboy_python ~ ::]#echo ${#str}

切片操作

左闭又开规则

[root@oldboy_python ~ ::]#str='I am chaoge,hello world!'
#取出0和10索引的字符
[root@oldboy_python ~ ::]#echo ${str::}
I am chaoge

查找字符索引

[root@oldboy_python ~ ::]#str='I am chaoge,hello world!'
[root@oldboy_python ~ ::]#echo `expr index "$str" e`

 

Shell编程实战的更多相关文章

  1. shell编程实战总结

    最近复习一下shell,顺便高级进阶一下,之前写脚本能简单尽量简单来,发现好多高深的东西还是没有理解,因此在这里记录一下整个过程并做相应的总结. 通过上代码的方式来介绍,后续可能会调整相应的排版 1. ...

  2. 18,Shell编程实战

      为什么要学习Shell编程 Shell脚本语言是实现Linux/Unix系统管理及自动化运维所必须的重要工具,Linux系统的底层以及基础应用软件的核心大都涉及Shell脚本的内容. 一个合格的L ...

  3. Shell编程实战 1.1 监控思路架构介绍

    监控思路,架构介绍 需求:使用shell定制各种个性化的告警工具,但需要统一化管理,规范化管理. 思路:指定一个脚本包,包含主程序,子程序,配置文件,邮件引擎,输出日志等. 主程序:作为脚本的入口,是 ...

  4. shell编程企业级实战

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

  5. Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程

    Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程 教程简介: 本教程共71节,主要介绍了shell的相关知识教程,如shell编程需要的基础知识储备.shell脚本概念介 ...

  6. 跟着老男孩一步步学习Shell高级编程实战

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/1264627 本sh ...

  7. shell编程企业级实战(2)

    Vim配置文件.vimrc vim配置文件 if 条件语句 if是最常见的条件判断语句 例1:如果不存在/backup目录就创建. [root@web-01 /server/tools]# vim 0 ...

  8. (转)跟着老男孩一步步学习Shell高级编程实战

    原文:http://oldboy.blog.51cto.com/2561410/1264627/  跟着老男孩一步步学习Shell高级编程实战 原创作品,允许转载,转载时请务必以超链接形式标明文章 原 ...

  9. shell编程系列26--大型脚本工具开发实战

    shell编程系列26--大型脚本工具开发实战 大型脚本工具开发实战 拆分脚本功能,抽象函数 .function get_all_group 返回进程组列表字符串 .function get_all_ ...

随机推荐

  1. ORACLE——RMAN 参数解读

    查看默认rman配置参数 oracle用户下登录rman:rman target / 查看所有配置参数详情:show all show all的第一行:using target database co ...

  2. Tomcat在Window控制台下启动时乱码的两种解决办法

    在命令提示符中启动Tomcat时,日志窗口出现乱码: 乱码的原因肯定是日志解码错误引起的,因此就有一系列问题: 1.这个窗口的文本编码是什么? 窗口的文本编码查看:右击窗口>选项 可以看到窗口的 ...

  3. Introducation of Servlet filter(servlet过滤器介绍 )

    本文章向大家介绍Servlet Filter,主要包括 Servlet Filter使用实例.应用技巧.基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下. 过滤器是一个可以转换 ...

  4. 机器学习总结(八)决策树ID3,C4.5算法,CART算法

    本文主要总结决策树中的ID3,C4.5和CART算法,各种算法的特点,并对比了各种算法的不同点. 决策树:是一种基本的分类和回归方法.在分类问题中,是基于特征对实例进行分类.既可以认为是if-then ...

  5. qt连接数据库Sqlite

    #include <QCoreApplication> #include <QDebug> #include <QSqlDatabase> #include < ...

  6. 关于matplotlib绘制直方图偏移的问题

    在使用pyplot绘制直方图的时候我发现了一个问题,在给函数.hist()传参的时候,如果传入的组数不是刚刚好(就是说这个组数如果是使用(最大值-最小值)/组距计算出来,而这个数字不是整除得来而是取整 ...

  7. JS高程关于ajax的学习笔记

    1.ajax介绍 ajax技术可以实现浏览器向服务器请求数据时不需要重新加载页面,就可以从服务器中获取需要的数据. ajax技术的核心是XMLHttpRequest对象(简称XHR),XHR对象为向服 ...

  8. 【转载】TCP /IP协议详解

    首先,TCP/IP不是一个协议,而是一个协议族的统称. 里面包括了IP协议,IMCP协议,TCP协议,以及http.ftp.pop3协议等等. TCP/IP协议分层 提到协议分层,我们很容易联想到IS ...

  9. npm版本安装问题

    问题一 描述 运行npm install之后,前端页面console控制台报错,invalid props. 排查 1. 排除了代码问题,完全一样的代码,其他人的运行无误. 2.猜想可能是版本号问题, ...

  10. Vue-admin工作整理(十五):Ajax-跨域问题

    跨域的定义: 解决方法: 1.前端通过配置来解决跨域问题:自定义的vue.config.js配置文件来进行跨域处理:就是只要存在跨域现象 都会代理到一个指定的地址上 devServer: { prox ...