Shell编程实战
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编程实战的更多相关文章
- shell编程实战总结
最近复习一下shell,顺便高级进阶一下,之前写脚本能简单尽量简单来,发现好多高深的东西还是没有理解,因此在这里记录一下整个过程并做相应的总结. 通过上代码的方式来介绍,后续可能会调整相应的排版 1. ...
- 18,Shell编程实战
为什么要学习Shell编程 Shell脚本语言是实现Linux/Unix系统管理及自动化运维所必须的重要工具,Linux系统的底层以及基础应用软件的核心大都涉及Shell脚本的内容. 一个合格的L ...
- Shell编程实战 1.1 监控思路架构介绍
监控思路,架构介绍 需求:使用shell定制各种个性化的告警工具,但需要统一化管理,规范化管理. 思路:指定一个脚本包,包含主程序,子程序,配置文件,邮件引擎,输出日志等. 主程序:作为脚本的入口,是 ...
- shell编程企业级实战
如何才能学好Shell编程 为什么要学习shell编程 Shell是Linux底层核心 Linux运维工作常用工具 自动化运维必备基础课程 学好shell编程所需Linux基础 熟练使用vim编辑器 ...
- Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程
Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程 教程简介: 本教程共71节,主要介绍了shell的相关知识教程,如shell编程需要的基础知识储备.shell脚本概念介 ...
- 跟着老男孩一步步学习Shell高级编程实战
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/1264627 本sh ...
- shell编程企业级实战(2)
Vim配置文件.vimrc vim配置文件 if 条件语句 if是最常见的条件判断语句 例1:如果不存在/backup目录就创建. [root@web-01 /server/tools]# vim 0 ...
- (转)跟着老男孩一步步学习Shell高级编程实战
原文:http://oldboy.blog.51cto.com/2561410/1264627/ 跟着老男孩一步步学习Shell高级编程实战 原创作品,允许转载,转载时请务必以超链接形式标明文章 原 ...
- shell编程系列26--大型脚本工具开发实战
shell编程系列26--大型脚本工具开发实战 大型脚本工具开发实战 拆分脚本功能,抽象函数 .function get_all_group 返回进程组列表字符串 .function get_all_ ...
随机推荐
- SpringMVC,SpringBoot使用ajax传递对象集合/数组到后台
假设有一个bean名叫TestPOJO. 1.使用ajax从前台传递一个对象数组/集合到后台. 前台ajax写法: var testPOJO=new Array(); //这里组装testPOJO数组 ...
- JAVA学习过程的基础笔记
1.JDK的安装与环境变量的设置与测试2.STS简单使用3.CMD控制器的使用4.JAVA的编译与反编译的执行过程5.一,变量与变量的使用 1.变量是在程序运行中其值可以改变的量,java程序的一个基 ...
- Flutter安装之后cmd运行错误解决
当把Flutter环境变量配置之后,打开cmd输入:flutter 出现如下错误: 'MySQL' is not recognized as an internal or external comma ...
- Error: EACCES: permission denied, mkdir '......node-sass/build'错误解决方案
安装node-sass时出现一下错误: gyp ERR! configure error gyp ERR! stack Error: EACCES: permission denied, mkdir ...
- shell 获得后台进程返回值
获得后台进程返回值我们用“&”把进程放入后台以后,如果需要了解进程的执行情况,可以使用wait函数.默认情况下wait会等待任意子进程结束但是不会返回子进程的返回值.而以子进程的pid作为参数 ...
- Go语言学习之13 日志管理平台开发
主要内容: 1. ElasticSearch介绍与使用2. kibana介绍与使用 1. ElasticSearch安装 详见上节内容2. kibana安装 (1) 下载ES,下载地址:https:/ ...
- Effective java 系列之更优雅的关闭资源-try-with-resources
背景: 在Java编程过程中,如果打开了外部资源(文件.数据库连接.网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们.因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制,如果我们不在 ...
- 运维案例 | Exchange2010数据库损坏的紧急修复思路
关注嘉为科技,获取运维新知 Exchange后端数据库故障,一般都会是比较严重的紧急故障,因为这会直接影响到大面积用户的正常使用,而且涉及到用户数据.一旦遇到这种级别的故障,管理员往往都是在非常紧 ...
- 关于PHP的mkdir函数
问题:dedecms5.7 php5.6 我想项目根目录下的uploads文件夹下动态创建一个文件夹/uploads/imgs $path = '/uploads/imgs'; mkdir($path ...
- Linux下的crontab定时执行任务命令详解(参考:https://www.cnblogs.com/longjshz/p/5779215.html)
在Linux中,周期执行的任务一般由cron这个守护进程来处理[ps -ef | grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行以及调用时间. cron的配置文件成为 ...