【home88一必发】Dos烧录脚本,shell脚本入门

by admin on 2019年2月19日

Dos命令从前更改的太不难,今后参预判断是还是不是进入fasboot方式和判断Android镜像是或不是存在;代码已经竭尽简化成这么,dos命令效率依然相比不佳用的,用了一清晨的刻钟。。。

壹 、基础概念

编程语言有低级语言和高等语言两类。
尖端语言也有编译型和平化解释型的区分,编译型语言有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的测试。此外,再有的海外作品中近日也读到了一部分有关文化,所以写成一篇博文做一下统计。

home88一必发,     
为了便于我们每一个人的求学,那里将送交Linux
Shell高级技术五篇连串博客的目录以供我们在急需时参考和搜索。

  1 @echo off
  2 
  3 
  4 
  5 
  6 ::路径注意增加\
  7 @set flashpath=Z:\DT380\LINUX\android\out\target\product\msm8953_64\
  8 @set Dynamic_library_Path=Z:\msm8909\out\target\product\msm8909\obj\lib\sensors.msm8909.so
  9 @set Sensors_conf=Z:\DT380\LINUX\android\vendor\qcom\proprietary\sensors\dsps\reg_defaults\sensor_def_qcomdev.conf
 10 @set boot_image=%flashpath%boot.img
 11 @set mbn_image=%flashpath%emmc_appsboot.mbn
 12 @set userdata_image=%flashpath%userdata.img
 13 @set system_image=%flashpath%system.img
 14 @set persist_image=%flashpath%persist.img
 15 @set ramdisk_image=%flashpath%ramdisk.img
 16 @set recover_image=%flashpath%recovery.img
 17 @set cache_image=%flashpath%cache.img
 18 @set Dynamic_library=%Dynamic_library_Path%
 19 @set Dynamic_library_Board_Path=/system/lib/
 20 
 21 ::初始化,下面便是判断是否有文件
 22 @set Image_Index=0
 23 @set Image_Current-path=0
 24 @set Image_Length=7
 25 @set Image[0]-path=%boot_image%
 26 @set Image[1]-path=%mbn_image%
 27 @set Image[2]-path=%system_image%
 28 @set Image[3]-path=%persist_image%
 29 @set Image[4]-path=%ramdisk_image%
 30 @set Image[5]-path=%recover_image%
 31 @set Image[6]-path=%cache_image%
 32 @set Image[7]-path=%Dynamic_library%
 33 ::初始化
 34 
 35 :LoopStart
 36 
 37 ::清空字符串
 38 @set Image_Current-path=0
 39 
 40 if %Image_Index% equ %Image_Length% goto BeginRun
 41 
 42 for /f "usebackq tokens=1,2,3 delims==-" %%a in (`set Image[%Image_Index%]`) do (
 43     set Image_Current-%%b=%%c
 44 )
 45 
 46 if exist %Image_Current-path% (
 47     @echo 该路径%Image_Current-path%存在......
 48     @echo.
 49 ) else (
 50     @echo %Image_Current-path%
 51     @echo 请确定该文件文件是否存在?如果不存在,请确定路径,打开脚本重新设置。10秒后关闭....
 52     @ping -n 10 127.0.0.1>nul
 53     exit
 54 )
 55 
 56 @set /a Image_Index=%Image_Index%+1
 57 
 58 goto LoopStart
 59 
 60 :BeginRun
 61 @echo 检查Android镜像文件已经完成,请继续下一步......
 62 @echo.
 63 
 64 @echo 0、同时烧录emmc_appsboot.mbn和boot.img
 65 @echo 1、烧录boot.img
 66 @echo 2、烧录aboot.img
 67 @echo 3、烧录persist.img
 68 @echo 4、烧录ramdisk.img
 69 @echo 5、烧录recovery.img
 70 @echo 6、烧录system.img
 71 @echo 7、烧录cache.img
 72 @echo 8、烧录所有镜像
 73 @echo 9、重新推进sensor.so
 74 ::@echo 10、烧录并更新adsp架构下的sensor文件
 75 
 76 @set /p option=请先设置路径后,再输入要烧录的选项:
 77 
 78 
 79 if "%option%" == "9" (
 80 adb root
 81 adb wait-for-device
 82 adb remount
 83 @echo 重新推进sensor........
 84 adb push %Dynamic_library% %Dynamic_library_Board_Path%
 85 adb reboot
 86 @echo 正在重启...... 5秒后关闭....
 87 @ping -n 5 127.0.0.1>nul
 88 
 89 exit
 90 )
 91 
 92 
 93 ::判断是否进入fastboot模式
 94 fastboot devices>1.txt
 95 set /p message=<1.txt
 96 del 1.txt
 97 if not defined message (
 98     echo 正处于adb mode模式.....
 99     adb wait-for-device
100     adb reboot-bootloader
101 ) else ( 
102     echo 正处于fastboot mode模式.....
103 )
104 
105 
106 @echo.
107 
108 if "%option%" == "0" (
109 @echo 同时烧录emmc_appsboot.mbn和boot.img........
110 fastboot flash boot %boot_image%
111 fastboot flash aboot %mbn_image%
112 )
113 
114 if "%option%" == "1" (
115 @echo 烧录boot.img........
116 fastboot flash boot %boot_image%
117 )
118 
119 if "%option%" == "2" (
120 @echo 烧录aboot.img........
121 fastboot flash aboot %mbn_image%
122 )
123 
124 if "%option%" == "3" (
125 @echo 烧录persist.img..........
126 fastboot flash persist %persist_image%
127 )
128 
129 if "%option%" == "4" (
130 @echo 烧录ramdisk.img..........
131 fastboot flash ramdisk %ramdisk_image%
132 )
133 
134 if "%option%" == "5" (
135 @echo 烧录recovery.img...........
136 fastboot flash recovery %recover_image%
137 )
138 
139 if "%option%" == "6" (
140 @echo 烧录system.img........
141 fastboot flash system %system_image%
142 )
143 
144 if "%option%" == "7" (
145 @echo 烧录cache.img...........
146 fastboot flash cache %cache_image%
147 )
148 
149 if "%option%" == "8" (
150 @echo 烧录所有镜像.............
151 fastboot flash boot %boot_image%
152 fastboot flash aboot %mbn_image%
153 fastboot flash persist %persist_image%
154 fastboot flash ramdisk %ramdisk_image%
155 fastboot flash recovery %recover_image%
156 fastboot flash system %system_image%
157 fastboot flash cache %cache_image%
158 fastboot flash userdata %userdata_image%
159 )
160 
161 
162 
163 
164 fastboot reboot
165 @echo 正在重启 请稍后......
166 adb wait-for-device
167 adb root
168 adb wait-for-device
169 
170 
171 @ping -n 5 127.0.0.1>nul
172 adb shell dmesg > kmesg.log
173 @echo kernel log已经导出.....
174 
175 
176 
177 @echo [烧录成功,暂停5秒自动关闭]
178 @ping -n 5 127.0.0.1>nul

贰 、变量: 命名的蕴藏空间

多少的储存格局有:

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

变量类型:
【home88一必发】Dos烧录脚本,shell脚本入门。作用:

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

类型:

字符    
数值:整型,浮点数

编程语言的变量又有强类型和弱类型的界别

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

 

Linux
Shell高级技术(一)

壹 、将输入音讯转换为大写字符后再举行标准化判断
贰 、为调试音讯设置输出级别
③ 、判断参数是或不是为数字
四 、判断整数变量的奇偶性
伍 、将Shell命令赋值给内定变量,以有限协助脚本的移植性
陆 、获取当前光阴距纪元时间(一九六六年九月十四日)所通过的天命

 

逻辑运算

与: 
    1 && 1 = 1    
    1 && 0 = 0   
    0 && 1 = 0
    0 && 0 = 0
或: 
    1 || 1 = 1
    1 || 0 = 1
    0 || 1 = 1
    0 || 0 = 0
非:
    !1 = 0
    !0 = 1
异或:相同为假,不同为真 
短路运算:
    短路与:
        第一个为0,结果必为0   
        第一个为1,第二个必须要参与运算
    短路或:
        第一个为1,结果必为1
        第一个为0,第二个必须参与运算

home88一必发 1

1. 关于Admin Ping Command?

出于查阅官方文档中从不有关Admin Ping
Command的叙述和介绍。因而,谷歌了不少页面,把大家的阐释做2个民用知道统计如下:

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

ping命令实际上是提供了一种高度消耗命令接口,那种接口用于去判断八个锲而不舍连接是或不是存活,或许远端MySQL是或不是存活。

当远端MySQL
Server接收到这种尤其方式的授命后,不做越多的语法解析和实施布置优化,直接再次回到结果。

Admin Ping Command有怎样用?

在行使链接池方法连接MySQL的时候,那些命令就突显相当有效。因为链接池再把贰个空闲链接句柄给到客户端的时候并不知道这几个链接是不是如故存活(即没有过期或许被Server
主动kill)。链接池须求用1个指令去看清并触及重连。而那时Ping
Command无疑是代价最小的。即使有同学团结用java代码去贯彻MySQL链接池的话,链接存活判断使用Admin
Ping Command是最佳选项。

【home88一必发】Dos烧录脚本,shell脚本入门。怎么调用Admin Ping Command?

各种MySQL client/connector 落成Ping
Command的方法都差距等。Java的行使办法见:

Perl的使用办法简便的说就是 $dbh->ping();
详见:

 

Linux
Shell高级技术(二)

⑦ 、非直接引用变量
⑧ 、在循环中使用管道的技能
⑨ 、自链接脚本
⑩ 、Here文档的运用技巧
十① 、获取进度的周转时长(单位:
分钟)
十贰 、模拟简单的top命令

 

③ 、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,_
_:上一个命令的最后一个字符串

home88一必发 2

  • 变量命名法则:

    ① 、不大概运用程序中的保留字,如if、for
    ② 、只好利用数字、字母及下划线,且不可能以数字初步
    ③ 、最好见名知义

只读变量:

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

岗位变量:

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

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

home88一必发 3

home88一必发 4

image

home88一必发 5

home88一必发 6

home88一必发 7

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九千0次进行时间: 6.03 秒

Admin PING九万次施行时间:3.45秒

看得出后者品质整整高出 74%
,对于链接池那种对响应时间必要极高的落到实处的话,财富的节约万分可观。

 

参考资料:

 

 

 

 

 

 

 

Linux
Shell高级技术(三)

十③ 、格式化输出内定用户的近年来运维进程
十肆 、用脚本完结which命令的基本功用
十⑤ 、验证输入新闻是不是合法
十⑥ 、整数验证
十7、判断钦赐的年度是还是不是为闰年
十八 、将单列显示转换为多列突显

 

四 、bash的布署文件

按生效范围划分:存在两类
    全局配置:
        /etc/profile
            /etc/profile.d/*.sh
        /etc/bashrc    
    个人配置:
        ~/.bash_profile
        ~/.bashrc
按功能划分:存在两类
    profile类:为交互式登录的shell提供配置
        全局:/etc/profile,/etc/profile.d/*.sh
        个人:~/.bash_profile
        功用:
            (1)用于定义环境变量
            (2)运行命令和脚本

    bashrc类:为非交互式登录的shell提供配置
        全局:/etc/bashrc
        个人:~/.bashrc
        功用:
            (1)定义命令别名
            (2)定义本地变量
    修改文件后生效:
       1、重启shell进程
       2、source ~/.bashrc
          . ~/.bashrc  
bash退出任务
    保存在~/.bash_logout 文件中(用户)
    在退出登录shell 时运行
    用于
        创建自动备份
        清除临时文件

shell登录:
    交互式登录:
        直接通过终端输入账号密码;
        使用“su -UserName”或“su -l UserName”切换的用户
        读取文件的顺序:
            /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
    非交互式登录:
        su UserName
        图形界面下打开终端
        执行脚本
        文件读取顺序:
            ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh 
编辑配置文件定义的新配置的生效方式:
    (1)重新启动shell进程
    (2)使用source或.命令进程   

Linux
Shell高级技术(四)

十⑨ 、将文件的输出格式化为指定的急剧
二十 、监控指定目录下磁盘使用空间过大的用户
二十① 、编写二个更具可读性的df命令输出脚本
二十二 、编写3个用来添加新用户的脚本
二十叁 、kill钦定用户或钦点终端的用户进度
二十④ 、判断用户输入(是/否)的便捷措施

内部使用的相应内容有dos命令for循环的使用:

五 、bash中开展算数运算

+,-,*,/,%,...
实现算数运算:
    (1)let var=算数表达式
        sum1=3;sum2=4;let sum=$sum1+sum2
    (2)var=$(算术表达式)
    (3)var=$((算术表达式))
    (4)var=$(expr arg1 arg2 arg3...) expr命令,参数之间用空格隔开 
        sum=$(expr $num1 \* $num2)
            *在某些场景下需要转义
    (5)declare -i var = 数值
    (6)echo '算术表达式' | bc

bash有内置的随机数生成器:$RANDOM
    echo $[$RANDOM%60]  对60取模,即生成0-59之间的某个数
    echo $[$RANDOM%60+1]   取1-60之间的某数

home88一必发 8

增强型赋值:
    +=,-=,*=,/=,%=
    count+=1  <==> count=count+1
自增,自减:
    let var+=1 <==> let var++
    let var-=1 <==> let var--

home88一必发 9

练习:  

1、编写脚本sumid.sh,计算/etc/passwd文件中的第10个用户和第20个用户的id之和
    #! /bin/bash
    user10="`head -n $2 $1 | tail -n 1|cut -d: -f3`"
    user20="`head -n $3 $1 | tail -n 1|cut -d: -f3`"
    let sum=$user10+$user20
    echo "user id sum is $sum"

home88一必发 10

2、编写脚本/sumspace.sh,传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和  

    #!/bin/bash
    spaceline1=`grep "^[[:space:]]*$" $1 | wc -l`
    spaceline2=`grep "^[[:space:]]*$" $2 | wc -l`
    echo "The sum of space line:$[spaceline1+spaceline2]"

home88一必发 11

3、生成脚本模板
    #!/bin/bash
    [ $# -gt 1 ] &&{ echo "the args is error";exit;}
    [ $# == 0 ] && read -s -p "please input script name: " name || name="$1"
    echo "#!/bin/bash
    # filename "$name"
    # author:danran 
    # time is `date +%F`" >"$name"
    chmod +x "$name"
    vim "$name"

4、编写脚本,统计/etc、/usr、/var目录中有多少个一级子目录和文件
    #!/bin/bash
    # danran
    # time is Mon Jun  5 13:09:12 CST 2017
    line1=`ls $1 | wc -l`
    line2=`ls $2 | wc -l`
    line3=`ls $3 | wc -l`
    let sum=$line1+$line2+$line3
    echo $sum

Linux
Shell高级技术(五)

二十5、通过FTP下载钦点的公文
二十⑥ 、文件锁定
二十⑦ 、用小文件覆盖全体磁盘
二十捌 、计算当前系统中不一样运走势形的进度数量
二十⑨ 、浮点数验证
三⑩ 、统计英文小说中种种单词出现的功能

参考博客:

陆 、条件测试

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

home88一必发 12

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:用于字符串比较时的用到的操作数都应使用引号   

home88一必发 13

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

先判断文件是或不是为链接文件,在认清文件的项目,因为测试链接文件时是检测链接原文件,故应先判断是不是为链接文件

home88一必发 14

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

home88一必发 15

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

home88一必发 16

home88一必发 17

组合条件测试:
    逻辑运算:
        第一种方式:
            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"

Linux
Shell经典实例分析–Oracle运转脚本(上)

 

柒 、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`"

home88一必发 18

Linux
Shell经典实例分析–Oracle运维脚本(下)

Bat数组使用的情景:

八、read

动用read 来把输入值分配给三个或多少个shell 变量

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

read
从专业输入中读取值,给各样单词分配2个变量,全数剩余单词都被分配给最后四个变量,三个字符使用重定向赋值多个变量时,使用>>>多少个重定向方可

home88一必发 19

home88一必发 20

home88一必发 21

  • bash怎么样举行命令行

把命令行分成单个命令词
展开别名
举办大括号的扬言({})
开展波浪符申明(~)
指令替换$() 和 “)
重复把命令行分成命令词
开展文件通配(* 、? 、[abc] 等等)
准备I/0 重导向(< 、>)
运营命令

幸免扩充:

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

加引号来严防增加

• 单引号(’ )幸免全部扩充
• 双引号(” )也幸免全数增加,然则以下境况各异:

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

 

本身自个儿收拾的For
f中的tokens和delims怎么用?直接拉上百度知道,整理得到的。就不管链接了,贴上本人的有道云笔记链接就行了:

 

bat脚本回车命令是echo.

 

批处理语句判断变量是不是为空的主意:

 

总结:脚本好恶心!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图