条件测试与比较(详解)

Linux 同时被 2 个专栏收录
120 篇文章 0 订阅

1.在shell脚本中的各种条件结构和流程控制都要进行各种的测试,然后根据测试的结果执行不同的操作,有时也会和if语句结合,来完成测试判断,以减少程序的运行错误。

 

也就是说,当我们在写一个脚本,里面没有任何的判断,就写了一些很普通的命令,那么在我们运行脚本的时候,当遇到了错误,也会一直的执行下去,这样就导致了我们脚本执行的结果是错误的。 这时候我们就会用到我们的条件测试比较。

 

那么在执行条件测试中通常会返回 “真”或者“假”就像我们执行一条成功的命令,那么执行完这条命令 我们echo$? 如果它返回的是0 那么就是真的返回的状态是非0那么就是假的 也就是错的。

 

那么在bash编程里要条件测试,那么就会有条件测试常用的语法形式,如下:

语法1test <测试条件>

语法2[<测试条件>]

语法3[[<测试条件>]]

语法4((<测试条件>))

注意:在语法1和语法2中的[]是一样的,语法3为扩展的test命令,语法4中的(())常用于计算

&& || >< 等操作符可以应用在[[]]中但是不可以用在[]号中 []一般用于-a –o –gt这些整数比较

但是对于数值运算我们还是用(())最好

 

一、test条件测试的简单实例

 

[root@shell-yankerp src]# test -f qq && echo "yes" || echo "no"
yes
[root@shell-yankerp src]#

 

 

解释:在以上命令中-f的意思代表qq是否是个普通文件,如果是那么就输出yes,否则输出no,那么在我当前路径qq却是是一个普通文件,那么就输出yes

例2:

 

[root@shell-yankerp ~]# mkdir /tmp/yankerp
[root@shell-yankerp ~]# test -f /tmp/yankerp/ && echo "yes" || echo "no"
no
[root@shell-yankerp ~]#

 

 

我们创建了一个yankerp目录,它确实不是文件,它是一个目录,所以输出no

二、test空格注意:

 

test   -f    文件名    &&     echo   “yes”     ||   echo   “no”

在这里我用了很大的空格分开,为了方便能够看清

例1: 注意空格

那么我们把file文件给删掉再次测试

 

解释:如果file文件是一个普通的文件,那么输出yes否则输出no,在上图中我们都把file文件删除了,它都没有这个东西,那么肯定就是输出no了

 

 

 

例2:在test命令中有一个-z的选项(测试字符串长度是否为0)如下:


以上图中输出了no 因为zhangsan它不是0个字符啊 那么就肯定输出no

 

 

 

 

 

 

 

在这里我们用了空格,什么都没有,那么它就等于0就是对的 所以输出yes

 

那么我们可以使用变量来测试如下:

 

 

 

在这里a的变量值就是一个空白,那么就是等于0所以下面的条件就是真的

到这里我们的test基本的一些语法操作已经结束了。

三、[]中括号测试语法实例

其实在上面已经说了[]和test是一样的 自我认为[]就是test测试如下:

 

 

 

在-f前面和后面都是有空格的file文件的后面也要有空格 ~~~注意!!!

解释:如果file文件是一个普通文件 那么就输出yes否则输出no

练习如下:

 

[root@shell-yankerp src]# touch file
[root@shell-yankerp src]# touch /tmp/yankerp/qq.txt
[root@shell-yankerp src]# [ -f file ] && echo "yes" || echo "no"
yes
[root@shell-yankerp src]# [ -f /tmp/yankerp/qq.txt ] && echo "yes" || echo "no"    
yes
[root@shell-yankerp src]# [ -f /tmp/yankerp/ ] && echo "yes" || echo "no"      
no
[root@shell-yankerp src]#

四、[[]]条件测试实例
例1:

 

 

[root@shell-yankerp src]# touch file
[root@shell-yankerp src]# [[ -f file ]] && echo "yes" || echo "no"
yes
[root@shell-yankerp src]#

 

解释:如果file是一个普通文件,那么就输出yes否则输出no,感觉是不是[]和[[]]差不多了多少啊,就多了一个[]号,其实不是这样的~

注意:在[]号中不可以用&&  ||   ><等操作符,但是在[[]]中可以用&&|| >< 那么在[]号中只能用-a  –o –gt(用于整数!)

 

在上面我们已经介绍了测试常用的语法,接下来介绍常用的文件测试操作符(注意是文件操作符)

-d   :文件为目录文件那就是真的

-f    :上面已经说了 如果文件是普通文件那么就是真的

-e    : 这个其实很简单了,只要是个文件,不管他是什么文件都是真的 

-r   :文件存在,但是文件可以读那么就是真的

-w  : 文件存在,但是文件有写入权限,那么就是真的

-x   : 文件存在,则文件可以执行,那么就是真的

-s    : 文件存在,并且文件大小不为0那么就是真的,-z如果文件等于0那么就是真的

-L   :  文件存在且为链接文件则为真

f1 -nt f2 :文件1比文件2新那么就是真的,条件成立 

f1 -ot f2  :文件1比文件2旧,那么就是真的,条件成立。这个是根据文件的修改时间来计算

以上就是常用的文件测试操作符

看到以上这些东西,不要慌张,慢慢记~~~大哭

一、文件测试表达式实例:

 

[root@shell-yankerp src]# [ -f file ] && echo "yes" || echo "no"  #测试文件是否为普通文件
no            #输出了NO
[root@shell-yankerp src]# touch  file      #创建了一个普通文件
[root@shell-yankerp src]# [ -f file ] && echo "yes" || echo "no"    #再次测试
yes              #输出yes
[root@shell-yankerp src]

2、目录文件实践

 

 

[root@shell-yankerp ~]# mkdir /tmp/file   #创建一个file目录
[root@shell-yankerp ~]# touch /tmp/file/yankerp        #在file目录下创建yankerp文件
[root@shell-yankerp ~]# [ -f /tmp/file/yankerp ] && echo "yes" || echo "no"     #如果它是一个普通文件那么输出yes
yes            #输出结果
[root@shell-yankerp ~]# [ -d /tmp/file/yankerp ] && echo "yes" || echo "no"     #如果他是一个目录
no              #输出no 因为yankerp它是文件 但不是目录
[root@shell-yankerp ~]# [ -d /tmp/file/ ] && echo "yes" || echo "no"      #如果file是文件而且是目录那么输出yes       
yes
[root@shell-yankerp ~]# [ -e /tmp/file/yankerp ] && echo "yes" || echo "no"#不管你是普通文件目录只要是文件就yes
yes
[root@shell-yankerp ~]# 

测试文件属性实例

 

 

[root@shell-yankerp src]# ll
总用量 0
-rw-r--r--. 1 root root 0 2月   2 06:48 file
[root@shell-yankerp src]# [ -r file ] && echo "yes" || echo "no"
yes
[root@shell-yankerp src]# [ -w file ] && echo "yes" || echo "no" 
yes
[root@shell-yankerp src]# [ -x file ] && echo "yes" || echo "no" 
no
[root@shell-yankerp src]# 

3、测试Shell变量实例

 

 

[root@shell-yankerp ~]# a=/tmp/yankerp/qq.txt                 
[root@shell-yankerp ~]# [ -f "$a" ] && echo "yes" || echo "No"
yes
[root@shell-yankerp ~]# [ -d "$a" ] && echo "yes" || echo "no" 
no
[root@shell-yankerp ~]# [ -e "$a" ] && echo "yes" || echo "no" 
yes

4、对于单个目录或者文件进行测试

 

 

[root@shell-yankerp ~]# [ -e aaaa.sh ] && echo "yes" || echo "no"
yes
[root@shell-yankerp ~]# [ -f aaaa.sh ] && echo "yes" || echo "no" 
yes
[root@shell-yankerp ~]# [ -d aaaa.sh ] && echo "yes" || echo "no" 
no
[root@shell-yankerp ~]# [ -r aaaa.sh ] && echo "yes" || echo "no"            
yes
[root@shell-yankerp ~]# [ -w aaaa.sh ] && echo "yes" || echo "no" 
yes
[root@shell-yankerp ~]# [ -x aaaa.sh ] && echo "yes" || echo "no" 
no
[root@shell-yankerp ~]# [ -s aaaa.sh ] && echo "yes" || echo "no" 
yes
[root@shell-yankerp ~]# ll aaaa.sh 
-rw-r--r--. 1 root root 229 2月   2 09:08 aaaa.sh
[root@shell-yankerp ~]# 

注意:这里有一个很特殊的变量如下:

 

 

[root@shell-yankerp ~]# echo $zhangsan   #echo一个变量 但是它的输出结果是空的

[root@shell-yankerp ~]# [ -f $zhangsan ] && echo "yes" || echo "no"   如果$zhangsan是一个普通文件 那就输出yes
yes
[root@shell-yankerp ~]# 

但是我们发现$zhangsan都没有值 但是它却输出了yes...这明显是错的啊,这时候我们需要加""号 如下

 

 

[root@shell-yankerp ~]# echo $zhangsan

[root@shell-yankerp ~]# [ -f "$zhangsan" ] && echo "yes" || echo "no"
no
[root@shell-yankerp ~]#

在真正的有变量有值加双引号和单引号时没有区别的!! 但是当变量名没有对应的值时候我们就需要加双引号

 

特殊条件测试表达式如下:

 

[ -f aaaa.sh ] && {
     echo "xxxxxxx"
}

[[ -f aaaa.sh ]] && {
     echo "xxxxxxx"
}

test -f aaaa.sh && {
     echo "xxxxxx"
}

以上就是关于文件操作符的一些应用!!!

 

 

二、字符串测试表达式

有字符串测试表达式 那么就会有字符串操作符如下:

-n "字符串":字符长度不是0那么就是真的

-z "字符串"  : 字符长度是0那么就是真的

"串1" "=" "串2" : 字符串1等于字符串2,那么就是真的~可以使用==来代替

"串1" "!=" "串2" : 字符串1不等于字符串2 那么就就是真的,注意:不可以使用!==代替!=

例:字符串条件表达式案例

 

[root@shell-yankerp ~]# [ -n zhangsan ] && echo "yes" || echo "no"
yes
[root@shell-yankerp ~]# [ -z zhangsan ] && echo "yes" || echo "no" 
no
[root@shell-yankerp ~]# var=zhangsan
[root@shell-yankerp ~]# [ -n "$var" ] && echo "yes" || echo "no" 
yes
[root@shell-yankerp ~]# [ -z "$var" ] && echo "yes" || echo "no"  
no
[root@shell-yankerp ~]# [ "zhangsan" == "zhangsan" ] && echo "yes" || echo "no"
yes
[root@shell-yankerp ~]# [ "zhangsan" == "lisi" ] && echo "yes" || echo "no"        
no
[root@shell-yankerp ~]# [ "zhangsan" == "$var" ] && echo "yes" || echo "no"    
yes
[root@shell-yankerp ~]# [ "zhangsan" != "lisi" ] && echo "yes" || echo "no"        
yes
[root@shell-yankerp ~]#

剖析:

 

第一段 [ -n zhangsan ] && echo "yes" || echo "no"
如果zhangsan这个字符长度大于0 那么成立输出yes 否则输出no


第二段 [ -z zhangsan ] && echo "yes" || echo "no" 
如果zhangsan字符等于0 那么输出yes 否则no


第三段 var=zhangsan  设置了一个变量
[ -n "$var" ] && echo "yes" || echo "no" 
如果这个变量大于0那么就输出yes否则no


第四段
[ -z "$var" ] && echo "yes" || echo "no"   如果这个变量长度等于0 那么就输出yes 否则no


第五段
[ "zhangsan" == "zhangsan" ] && echo "yes" || echo "no" 
如果 zhangsan 等于 zhangsan 那么就输出yes 否则no


第六段
[ "zhangsan" == "lisi" ] && echo "yes" || echo "no"       
如果zhangsan 等于 lisi 那么就输出yes 否则no


第七段
[ "zhangsan" == "$var" ] && echo "yes" || echo "no" 
如果zhangsan等于这个变量 这个变量的值就是张三所以是yes


第八段
[ "zhangsan" != "lisi" ] && echo "yes" || echo "no"  
如果张三不等于lisi 那么就输出yes 否则no

字符串的操作符常用的就以上几种"=" "==" "!=" "-n" "-z" 

 

 

 

 

三、整数二元比较操作符

在[]以及test中使用比较符号                              在 (())或者[[]]中使用的符号

-eq等于 相等                                                        ==或=

-ne 不等于           !=

-gt  大于                                                               >

-ge 大于等于                                                         >=

-lt   小于                                                               <

-le   小于等于                                                        <=

"="和!= 也可以在[]中使用,但是><在[]中就不行了 之后会演示。如果一定要><在[]中使用的话需要用\来转义

二元数字在[]中使用><

 

[root@shell-yankerp ~]# [ 2 > 1 ] && echo "yes" || echo "no"
yes
[root@shell-yankerp ~]# [ 2 < 1 ] && echo "yes" || echo "no" 
yes
[root@shell-yankerp ~]# 

我们发现第一行的结果是对的 那么第二行输出yes? 难道2<1? 所以这时候我们就要加\号

 

 

[root@shell-yankerp ~]# [ 2 \< 1 ] && echo "yes" || echo "no"
no
[root@shell-yankerp ~]# 

 

 

二元数字在[]使用gt lt比较符号

 

[root@shell-yankerp ~]# [ 5 -gt 3 ]  && echo "yes" || echo "no"   5大于3
yes
[root@shell-yankerp ~]# [ 5 -lt 3 ]  && echo "yes" || echo "no"   5小于3
no
[root@shell-yankerp ~]# [ 3 -ge 3 ]  && echo "yes" || echo "no"   3大于等于3
yes
[root@shell-yankerp ~]# [ 3 -le 3 ]  && echo "yes" || echo "no"   3小于等于3
yes
[root@shell-yankerp ~]# [ 3 -ne 3 ]  && echo "yes" || echo "no"   3不等于3
no
[root@shell-yankerp ~]# 


二元数字在[[]]使用不同的操作符比较

 

 

 

 

[root@shell-yankerp ~]# [[ 6 > 3 ]] && echo "yes" || echo "no"
yes
[root@shell-yankerp ~]# [[ 6 < 3 ]] && echo "yes" || echo "no" 
no
[root@shell-yankerp ~]# [[ 6 == 3 ]] && echo "yes" || echo "no" 
no
[root@shell-yankerp ~]# [[ 6 == 6 ]] && echo "yes" || echo "no" 
yes
[root@shell-yankerp ~]# [[ 6 != 6 ]] && echo "yes" || echo "no"  
no
[root@shell-yankerp ~]# [[ 6 -gt 6 ]] && echo "yes" || echo "no"    
no
[root@shell-yankerp ~]# [[ 6 -gt 3 ]] && echo "yes" || echo "no" 
yes
[root@shell-yankerp ~]# [[ 6 -ge 3 ]] && echo "yes" || echo "no" 
yes
[root@shell-yankerp ~]# [[ 66 = 66 ]] && echo "yes" || echo "no"    
yes
[root@shell-yankerp ~]# [[ 66 = 65 ]] && echo "yes" || echo "no" 
no
[root@shell-yankerp ~]# 

 

自我总结:如果使用>< != || 等操作符---可以使用[[]]

   如果使用gt lt ge le ne eq 等操作符-----使用[]

 

 如果使用>< 比较时 最好使用(())来进行比较

 

因为在上一次数值运算时候,数值运算符命令就包含了(())

 

 

通过整数变量测试实践

 

[root@shell-yankerp ~]# a=10
[root@shell-yankerp ~]# b=9
[root@shell-yankerp ~]# [ $a -gt $b ] && echo "yes" || echo "no"
yes
[root@shell-yankerp ~]# [ $a -ge $b ] && echo "yes" || echo "no" 
yes
[root@shell-yankerp ~]# [ $a -lt $b ] && echo "yes" || echo "no"  
no
[root@shell-yankerp ~]# [ $a -le $b ] && echo "yes" || echo "no" 
no
[root@shell-yankerp ~]# [ $a -eq $b ] && echo "yes" || echo "no"  
no

通过变量[[]]实践

 

 

[root@shell-yankerp ~]# a=50
[root@shell-yankerp ~]# b=40
[root@shell-yankerp ~]# [[ $a > $b ]] && echo "yes" || echo "no"
yes
[root@shell-yankerp ~]# [[ $a>=$b ]] && echo "yes" || echo "no"  
yes
[root@shell-yankerp ~]# [[ $a < $b ]] && echo "yes" || echo "no"  
no
[root@shell-yankerp ~]# [[ $a=<$b ]] && echo "yes" || echo "no"  
no
[root@shell-yankerp ~]# [[ $a != $b ]] && echo "yes" || echo "no" 
yes
[root@shell-yankerp ~]# 

到这里先来一次总结

 

上面介绍了条件测试;条件测试语法格式为:

test   [<>]   [[<>]]  ((<>))

文件的操作符包括:-d -f -e -w -r -x -z -s 等

字符串操作符包括:-n -z = !=或者==

数值操作符[]包括:gt ge lt le eq ne 等;

数值操作符[[]]包括:><  =<  >=  != 等;

ok接下来开始逻辑操作符

在 [] test中使用的操作符                  在 [[]]中使用的操作符

-a                                                      &&         and 与 两端都为真

-o            || or 或者 两端有一个为真

!                                                           !             取反

例1:

 

[root@shell-yankerp ~]# [ -f aaaa.sh -a anaconda-ks.cfg ] && echo "yes" || echo "no"
yes
[root@shell-yankerp ~]# [[ -f aaaa.sh && anaconda-ks.cfg ]] && echo "yes" || echo "no"    
yes
[root@shell-yankerp ~]# 

如果aaaa.sh与anaconda-ks.cfg是一个普通文件 那么就输出yes否则输出no

 

在这里我们使用了[]  [[]]两个不同的格式,也就是说,如果aaaa.sh 和anaconda-ks.cfg这两个文件 只要一个不是普通文件 那么就是假,如下:

 

[root@shell-yankerp ~]# rm -rf aaaa.sh 
[root@shell-yankerp ~]# [ -f aaaa.sh -a anaconda-ks.cfg ] && echo "yes" || echo "no"
no
[root@shell-yankerp ~]# 

在上面这条命令我已经把aaaa删除掉了 它肯定不是文件了 但是anaconda-ks.cfg它是一个普通文件 但是上面说了 如果有一个错误 那么就是假的,所以输出结果为no

 

这就是 [-a] 和 [[&&]] 的作用

 

例2:我们使用|| 和 -o也就是或者的意思

 

[root@shell-yankerp ~]# rm -rf aaaa.sh
[root@shell-yankerp ~]# [ -f aaaa.sh -o anaconda-ks.cfg ] && echo "yes" || echo "no"
yes
[root@shell-yankerp ~]# [[ -f aaaa.sh || anaconda-ks.cfg ]] && echo "yes" || echo "no"  
yes
[root@shell-yankerp ~]# 

以上的意思是,如果aaaa.sh或者anaconda-ks.cfg其中有一个文件是普通文件,那么就是真的 ;注意:这里的或者在[[]]中用 && 表示,那么在[]括号中就用-o 来表示。 注意:这和上面的 -a 和 && 是不一样的!!!

 

例3变量的实践

 

[root@shell-yankerp ~]# a=/etc/services 
[root@shell-yankerp ~]# b=/tmp/file/
[root@shell-yankerp ~]# [ -f $a -a -f $b ] && echo yes || echo no
no
[root@shell-yankerp ~]# [ -f $a -o -f $b ] && echo yes || echo no  
yes
[root@shell-yankerp ~]#

在这里我把a做为变量 值为/etc/services这个文件 b的值为/tmp/file这个目录

 

那么-f 如果a这个变量和b是一个普通的文件,那么输出yes但是这个输出的no 因为我们B的变量值它不是文件啊 它是一个目录 不是普通文件 那么这里就用到了-o 来判断 只要一个是普通文件那么就为真

我们使用[[]]来进行测试如下:

 

[root@shell-yankerp ~]# [[ -f $a && -f $b ]] && echo yes || echo no
no
[root@shell-yankerp ~]# [[ -f $a || -f $b ]] && echo yes || echo no  
yes
[root@shell-yankerp ~]#

我们发现其实都是一样的 只不过不同的操作符对应的不同的方式而已!!!

 

 

到这里其实书上有很多的实践都挺不错的,但是我想按照我的想法来概括以上大部分的东西 大致的一个脚本如下:

 

#!/bin/bash
# This is a yankerp
# 
cat <<yankerp
+------------------------------------------------+
|                                                |
|               ======================           |
|                 一键安装服务                   |
|                           by Yankerp           |
|               ======================           |
|               1. 安装Nginx                     |
|               2. 安装Apache                    |
|               3. 安装MySQL                     |
|               4. 安装PHP                       |
|               5. 部署LNMP环境                  |
|               6. 安装zabbix监控                |
|               7. 退出此管理程序                |
|               8. 关闭计算机                    | 
|                                                |
+------------------------------------------------+
yankerp

read -p "请您输入1-8随意的数值:" a
[[ $a == 7 ]] && {
   exit 7
}

expr $a + 1 &>/dev/null

[ $? -ne 0 ] && {
    echo "/bin/bash $0 请您输入数值"
    exit 1
}

(( $a > 8 )) && {
    echo "/bin/bash $0 请您输入比8小的数字"
    exit 1
}

[ $a -eq 0 ] && {
    echo "/bin/bash $0 请您输入1-8的数字!"
    exit 1
}

if [ $a -eq 1 ]
  then
    echo "开始安装Nginx咯"
elif [[ $a == 2 ]]
  then
    echo "开始安装Apache"
elif (( $a == 3 ))
  then
    echo "安装MySQL..."
elif (( $a == 4 ))
  then
    echo "安装PHP"
fi

if [ $a -eq 8 ]
  then
    `shutdown -h now`
fi

在这里我会一条条的解释:

 

 

cat <<yankerp
+------------------------------------------------+
|                                                |
|               ======================           |
|                 一键安装服务                   |
|                           by Yankerp           |
|               ======================           |
|               1. 安装Nginx                     |              
|               2. 安装Apache                    |
|               3. 安装MySQL                     |
|               4. 安装PHP                       |
|               5. 部署LNMP环境                  |
|               6. 安装zabbix监控                |
|               7. 退出此管理程序                |
|               8. 关闭计算机                    | 
|                                                |
+------------------------------------------------+      
yankerp

以上的这段表示 在我们的交互式界面中展示,那么也就是输出以上的一个表格菜单!!效果如下:

 

这时候我们要想一件事情,输出来这个表格肯定是要让用户去选择安装什么服务吧? 如下:

 

read -p "请您输入1-8随意的数值:" a

那么这一行完全可以理解为,等待用户输入一个内容 并且把这个内容赋值给a这个变量,输出的效果如下:

 

它会一直等待用户输入内容,那么接下来该用户输入了,那么如果用户想直接退出此脚本,那么应该输入7这个数值所以,以下的命令可以实现如下:

 

[[ $a == 7 ]] && {
   exit 7
}

意思是说 当用户输入7 那么7这个数值就会赋值给a这个变量 以上是一个判断 如果a这个变量为7 那么就执行exit退出脚本

 

2.但是有时候用户会有点跳,它有可能会输入字符串,那该如何解决这个问题,如下:

 

expr $a + 1 &>/dev/null

[ $? -ne 0 ] && {
    echo "/bin/bash $0 请您输入数值"
    exit 1
}

解释:现在用户已经输入了内容赋值给了变量a,如果用户输入的是字母,那么下面我们就可以使用expr数值运算命令来解决这个问题,$a + 1 这个结果输出到/dev/null 不显示,下面进行判断了 如果用户输入的是数值那么就是0的状态码,如果用户输入的是字符串 那么就是非0 但是以上我们设置了判断说,如果以上命令执行的结果不是0那么就退出此脚本,那我们来测试一下。

 

 

好 那么接下来 在想一个问题,有可能用户看到1-8了 它想输入个9 那这该怎么解决? 如下:

 

(( $a > 8 )) && {
    echo "/bin/bash $0 请您输入比8小的数字"
    exit 1
}

这时候我们就会用到本章所说的 >号 意思说 如果用户输入的数字比8大 那么我们输出一条 请您输入比8小的数字随后退出脚本

 

随后用户有可能还会想着,哦?比8小? 那我输入个0呗~~ ..... 解决方法如下:

 

[ $a -eq 0 ] && {
    echo "/bin/bash $0 请您输入1-8的数字!"
    exit 1
}

以此类推如果用户输入0 那么我们继续输出请您输入1-8的数字

到这里:我们对用户输入的不是数值已经解决了,对用户输入的数值大于8 或者是0我们也解决了,那么接下来我们该执行相应的操作了如下:

 

 

if [ $a -eq 1 ]
  then
    echo "开始安装Nginx咯"
elif [[ $a == 2 ]]
  then
    echo "开始安装Apache"
elif (( $a == 3 ))
  then
    echo "安装MySQL..."
elif (( $a == 4 ))
  then
    echo "安装PHP"
fi

if [ $a -eq 8 ]
  then
    `shutdown -h now`
fi

在以上的操作用到了 [] [[]] (()) 也概括了上面的一些条件判断的一些语法,那么最后的结果如下:

 

好了,本次的内容就到这里,希望读者能够快快吸收!

声明:以上文章是<<跟着老男孩学Linux运维Shell编程实战>>第六章看完的总结+自己的理解写出来的~并非纯原创作品;接下来就会更新一些if语句等等的相关内容~~~谢谢大家

希望对您有所帮助,再见~ 大笑
 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
<p> <span style="font-size:14px;color:#337FE5;">【为什么学爬虫?】</span> </p> <p> <span style="font-size:14px;">       1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到!</span> </p> <p> <span style="font-size:14px;">       2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站</span> </p> <p> <br /> </p> <span style="font-size:14px;color:#337FE5;">【课程设计】</span> <p class="ql-long-10663260"> <span> </span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: </p> <ol> <li class="" style="font-size:11pt;color:#494949;"> 网络请求:模拟浏览器的行为从网上抓取数据。 </li> <li class="" style="font-size:11pt;color:#494949;"> 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 </li> <li class="" style="font-size:11pt;color:#494949;"> 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 </li> </ol> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: </p> <ol> <li class="" style="font-size:11pt;color:#494949;"> 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 </li> <li class="" style="font-size:11pt;color:#494949;"> Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 </li> </ol> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 </p> <p style="font-size:11pt;color:#494949;">   </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <br /> </p> <p> <br /> </p> <p> <span style="font-size:14px;background-color:#FFFFFF;color:#337FE5;">【课程服务】</span> </p> <p> <span style="font-size:14px;">专属付费社群+定期答疑</span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <span style="font-size:16px;"><br /> </span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <span style="font-size:16px;"></span> </p>
©️2020 CSDN 皮肤主题: 岁月 设计师:pinMode 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值