Dos烧录脚本

2019-12-06 23:47栏目:操作系统
TAG:

 

三、bash中的变量的门类

依据变量的生效范围为正式:

本地变量:生效范围为当前shell进程,对当前shell之外的其他的shell进程无效,包括当前shell的子shell进程均无效;    
环境变量:生效范围为当前shell进程及其子进程;    
局部变量:生效范围为当前shell进程中某代码片段(通常指函数);  
位置变量:$1,$2,...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数;    
特殊变量:$?,$0,$*,$@,$#,$$    

地面变量:

变量赋值:name=“value”
    可以使用单引号:
        value:
            (1)可以是直接赋值:name=“filename”
            (2)变量引用:name=“$username”
            (3)命令引用:name=`COMMAND`,name=$(COMMAND)
变量引用:$(name),$name
    "":弱引用,其中的变量引用会被替换为变量值;
    '':强引用,其中的变量引用不会被替换为变量值,而保持原字符串;
显示已定义的所有变量:
    set
撤销变量:
    unset name

情形变量:

变量声明、赋值
    export name=VALUE
    declare -x name=VALUE
变量引用:$name,$(name)
显示所有环境变量:
    export
    env
    printenv
    declear -x
撤销变量:
    unset name
bash中有很多内置的环境变量,PATH,SHELL,UID,HISTSIZE,PWD,OLD,HISTFILE,PS1,_
_:上一个命令的最后一个字符串

图片 1

  • 变量命名法则:

    1、不可能采纳程序中的保留字,如if、for
    2、只好动用数字、字母及下划线,且无法以数字起首
    3、最棒见名知义

只读变量:

设置只读变量:
    readonly name
    declare -r name 
查看只读变量:
    readonly -p 

地点变量:

在脚本代码中调用通过命令行传递给脚本的参数:
    $1,$2,....:对应调用第1,第2....个参数,$10以上的应使用括号${10} ,${12}  
        shift [n] 调换位置,n不能大于参数的个数
    $0:调用命名本身
    $*:传递给脚本的所有参数,将所有参数作为一个整体字符传递
    $@:传递给脚本的所有参数,每一个参数独立传递,与$*只有在使用“”引起来时才有区别
    $#:传递给脚本的参数个数   
    set --:清空所有位置变量参数

特殊变量:$?,$0,$*,$@,$#,$$
    $?:返回状态码
    $$:返回当前进程的进程编号

图片 2

图片 3

image

图片 4

图片 5

图片 6

2. Admin Ping Command的习性优势测验

看了地点的牵线,大家自然有相当多疑问。举例,用ping比用select 1到底快多少?如何在Server端监控?下文将透超过实际际测验风华正茂一剖析。

何以在MySQL Server端观看见Admin Ping Command?

其实MySQL有二个专程的流速计来总括ping命令。通过show global status like 'Com_admin_commands' 就可以看见从Server运行后合计收取到的ping命令次数

Admin Ping Command的性质优势有多大?

下边通过一个粗略的perl测量试验脚本,来侦查常用的 select 1 和 ping命令之间的习性差别。脚本分别重复施行十万次ping和select 1,通过time相比两个之间的总实践时间的反差。脚本如下:

use strict;
use warnings;
use utf8;
use DBI;
use IO::Socket;
use FileHandle;


my $CONFIG_SERVER_IP  ='192.168.26.167';
my $CONFIG_SERVER_DB='test';
my $CONFIG_SERVER_PORT='3310';
my $CONFIG_SERVER_USER='root';
my $CONFIG_SERVER_PASS='password';
my $dbh = DBI->connect("DBI:mysql:$CONFIG_SERVER_DB;host=$CONFIG_SERVER_IP;port=$CONFIG_SERVER_PORT", $CONFIG_SERVER_USER, $CONFIG_SERVER_PASS,{RaiseError => 1}) || die "Could not connect to database: $DBI::errstr";


for(my $i=0;$i<100000;$i++){
    #my $result=$dbh->do('/* ping */select 1');
    my $result=$dbh->ping;
}

实行结果:

select 1:

real    0m5.968s
user    0m1.235s
sys    0m1.175s

real    0m6.003s
user    0m1.195s
sys    0m1.236s

real    0m6.155s
user    0m1.225s
sys    0m1.237s

Admin Ping:

real    0m3.426s
user    0m0.604s
sys    0m1.115s

real    0m3.483s
user    0m0.681s
sys    0m1.081s

real    0m3.467s
user    0m0.614s
sys    0m1.136s

取平均值后,

SELECT 1十万次进行时间: 6.03 秒

Admin PING十万次推行时间:3.45秒

看得出前者品质整整高出 74% ,对于链接池这种对响适那时候间供给超高的兑现的话,能源的节约非凡可观。

 

参照他事他说加以考查资料:

 

 

 

 

 

 

 

参照博客:

大器晚成、功底概念

编制程序语言有低等语言和高档语言两类。
高端语言也会有编译型和解释型的分别,编写翻译型语言有C,C++,jave;解释型语言有shell,perl,python
shell脚本是豆蔻梢头种含有证明或指令,并切合一定格式的公文文件
shell作为意气风发种进度式解释型的编制程序语言,它的为主组织构造有:

数据存储:变量、数组
表达式
语句:if while case

shell脚本的格式有:

#!SHEBANG    
CONFIGURATION_VARIABLES     
FUNCTION_DEFINITIONS    
MAIN_CODE

shell脚本格式必要首行必需是shebang机制 ,shebang也是指明文件调用的解释器类型

#!/bin/bash     
#!/usr/bin/python    
#!/usr/bin/perl      
  • 创建shell脚本

首先步:使用文本编辑器来创制文本文件

第一行必须包括shell 声明序列:#!    
    #!/bin/bash
添加注释
    注释以# 开头

其次步运转脚本:

给予执行权限,通过具体的文件路径指明文件执行。    
直接运行解释器,将脚本作为解释器程序的参数运行。
  • 剧本调节和测量试验
检测脚本中的语法错误
    bash -n /path/to/some_script
调试分布执行
    bash -x /path/to/some_script
  • 试行脚本

      /root/danran.sh    绝对路径,可以作用于子进程
      .  /danran.sh   相对路径,可以作用于子进程
      bash /root/danran.sh   可以作用于子进
      source /root/danran.sh   不会打开子进程,仅仅作用于当前进程 
    

前言:

近年在线上确诊QPS猛升的长河中深刻拓宽了下Admin Ping Command的测量试验。其他,再有的国外小说中目前也读到了有个别相关知识,所以写成大器晚成篇博文做一下总括。

Dos命令从前修正的太轻巧,今后投入判别是或不是步向fasboot方式和决断Android镜疑似否留存;代码已经竭尽简化成那样,dos命令效率依然相比较不佳用的,用了一中午的时刻。。。

七、bash自定义退出状态码

exit [n]:自定义退出状态码为n
    Note:脚本中一旦遇到exit命令,脚本会立即终止,终止退出状态取决于exit命令后面的数字n。
Note:如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行最后一条命令的状态码。
进程使用退出状态来报告成功或失败
     0 代表成功,1 -255 代表失败
    $?  变量保存最近的命令退出状态

练习:编写脚本/root/bin/argsnum.sh,接受一个文件路径作为参数;
    如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出;
    如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数
        #!/bin/bash
        [ $# -lt 1 ] && (echo "please input a arge" && exit ) || echo "`grep "^$" $1  | wc -l`"

图片 7

 

 

二、变量: 命名的仓库储存空间

数据的蕴藏形式有:

字符:   
数值:整型,浮点型 

变量类型:
作用:

1、定义数据存储格式
2、定义参与的运算    
3、表示的数据范围

类型:

字符    
数值:整型,浮点数

编制程序语言的变量又有强类型和弱类型的区分

强类型:jave,C++
    变量不经过强制转换,它永远是这个数据类型,不允许隐式的类型转换,故需要定义数据类型
弱类型:bash
   变量会有隐式转换,故不需要指定数据类型,所有要存储的数据都当做字符进行,不支持浮点数

1. 关于Admin Ping Command?

是因为查阅官方文档中未有关于Admin Ping Command的陈述和介绍。由此,Google了成都百货上千页面,把大家的演说做一个私有知道计算如下:

怎么是Admin Ping Command(后文简单的称呼ping命令)? 

ping命令实际上是提供了豆蔻梢头种中度消耗命令接口,这种接口用于去推断多个长久连接是或不是存活,也许远端MySQL是不是存活。

当远端MySQL Server接受到这种不相同常常方式的通令后,不做更加的多的语法剖判和实施安排优化,直接回到结果。

Admin Ping Command有啥样用?

在行使链接池方法连接MySQL的时候,这一个命令就凸显极度常有效。因为链接池再把贰个空闲链接句柄给到顾客端的时候并不知道那个链接是否依旧存活(即没有过期大概被Server 主动kill)。链接池供给用一个限令去判别并触及重连。而此刻Ping Command无疑是代价最小的。借使有同学团结用java代码去贯彻MySQL链接池的话,链接存活判别使用Admin Ping Command是极品选项。

怎么调用Admin Ping Command?

各样MySQL client/connector 达成Ping Command的点子都不等同。Java的运用方式见:

Perl的使用格局简来讲之正是 $dbh->ping(卡塔尔(قطر‎; 详见:

 

汇总:脚本好恶心!

八、read

动用read 来把输入值分配给一个或五个shell 变量

-p 指定要显示的提示 
    eg:read -p "danran" file 
-s 静默输入,一般用于密码
-n N  指定输入的字符长度N
-d ‘ 字符’ 输入结束符
-t N  TIMEOUT 为N秒,当等待时机超过N秒时自动退出

read 从正规输入中读取值,给每一个单词分配二个变量,全体剩余单词都被分配给最终三个变量,四个字符使用重定向赋值三个变量时,使用>>>多少个重定向方可

图片 8

图片 9

图片 10

  • bash怎么样实行命令行

把命令行分成单个命令词
扩充小名
进展大括号的声明({})
扩充波浪符申明(~)
命令替换$(卡塔尔 和 ``)
重新把命令行分成命令词
实行文件通配(* 、? 、[abc] 等等)
准备I/0 重导向(< 、>)
运转命令

防止扩张:

反斜线( )会使随后的字符按原意解释

加引号来预防扩充

• 单引号(’ )幸免全数增加
• 双引号(” )也幸免全体扩大,不过以下情形例外:

$ (美元符号) - 变量扩展
` (反引号) - 命令替换
 (反斜线) - 禁止单个字符扩展
! (叹号) - 历史命令替换

批管理语句判断变量是或不是为空的办法:

六、条件测量检验

判断某需求是否满足,需要由测试机制来完成;
Nnote:专用的测试表达式需要由测试命令辅助完成测试过程;
评估布尔声明,以便用在条件性执行中
    若真,则返回0
    若假,则返回1
测试命令:
    [:内部命令
    [[:shell关键字
测试命令:
    test EXPRESSION
    [ EXPRESSION ]
    [[ EXPRESSION ]]
    Note:EXPRESSION前后必须有空白字符

图片 11

bash的测试类型:
    数值测试
        -gt:大于
        -ge:大于等于
        -eq:等于
        -ne:不等于
        -lt:小于
        -le:小于等于
    字符串测试
        ==/=:等于
        >:大于
        <:小于
        !=:不等于
        ~=:左侧字符是否能被右侧的PATTERN所匹配
            Note:一般用于[[ ]]中
        -z “STRING” 测试字符串是否为空,空为真,不空为假
        -n “STRING” 测试字符串是否不空,不空为真,空为假  
        eg  [ -z "$name" ]
            [[ $name ~= ^a ]]  匹配$name是否a开头
        -v VAR 检查变量VAR是否设置
            eg:[ -v var ]   
        Note:用于字符串比较时的用到的操作数都应使用引号   

图片 12

    文件测试
        存在性测试:
            -a:FILE   同-e
            -e:FILE:文件存在性测试,存在为真
        存在性及类别测试:
            -b FILE:是否存在且为块设备文件
            -c FILE:是否存在且为字符设备文件
            -d FILE:是否存在且为目录文件
            -f FILE:是否存在且为普通文件
            -S FILE:存在且为套接字文件
            -L FILE 或 -h FILE:存在且为链接文件
            -p FILE:是否存在且为命名管道文件  

先推断文件是不是为链接文件,在认清文件的门类,因为测验链接文件时是检验链接原著件,故应先推断是不是为链接文件

图片 13

        文件权限测试:(当前用户)判断文件权限时,首先判断文件是否存在
            -r:文件是否存在且可读
            -w:文件是否存在且可写
            -x:文件是否存在且可执行
        文件特殊权限测试:
            -g FILE:文件存在且拥有guid权限,suid对脚本无效,脚本不是二进制文件
            -u FILE:文件存在且拥有suid权限
            -k FILE:是否存在且拥有sticky权限
        文件大小测试:
            -s FILE:文件是否存在且非空
        文件打开性测试:
            -t fd:fd表示文件描述符是否已经打开且与某终端相关
            -N FILE:文件自从上一次打开读取之后是否被修改过
            -O FILE:当前有效用户是否为文件属主
            -G FILE:当前有效用户是否为文件属组  

图片 14

        双目测试:
            FILE1 -ef FILE2:FILE1与FILE2是否指向同一个设备上的相同inode,即硬链接
            FILE1 -nt FILE2:FILE1 是否新于FILE2
            FILE1 -ot FILE2:FILE1 是否旧于FILE2     

图片 15

图片 16

组合条件测试:
    逻辑运算:
        第一种方式:
            COMMAND1 && COMMAND2    短路与
            COMMAND1 || COMMAND2    短路或
            ! COMMAND               非
        第二种方式:
            [ EXPRESSION1 -a EXPRESSION2 ]   与
            [ EXPRESSION1 -o EXPRESSION2 ]   或
            !EXPRESSION                     非
            必须使用测试命令进行
        [ -f /bin/cat -a -x /bin/cat ] && echo "true"
        [ ! -r /app/a -a ! -w /app/a ] && echo true <==> [ ! ( -r /app/a -o -w /app/a ) ] && echo "true"
练习:
    1、编写脚本/root/bin/excute.sh,判断参数文件是否为sh后缀的普通文件,如果是,添加所有人可执行权限否则提示用户非脚本文件
        #!/bin/bash
        [ $# == 0 ] && read -p "please input fimename" name || name=$1
        [ -f $name ] && [[ "$name" =~ .sh$ ]] && chmod a+x $name || echo "$name not scripts file"     
    2、编写脚本/bin/per.sh,判断当前用户对指定的参数文件,是否不可读并且不可写
        #!/bin/bash
        [ ! -r $1 -a ! -w $1 ] && echo "$1 file not read and not write"
    3、编写脚本/root/bin/checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满
        #!/bin/bash
        inode=`df -i | grep "^/dev/sd*" | tr -s ' ' '%'| cut -d'%' -f5| sort -r | head -n 1`
        disk=`df | grep "^/dev/sd*" | tr -s ' ' '%'| cut -d'%' -f5| sort -r | head -n 1`
        [ $inode -gt 80 ] && echo "danran"
        [ $disk -gt 80 ] && echo "dan"

版权声明:本文由bob体育app发布于操作系统,转载请注明出处:Dos烧录脚本