shell编程之条件测试表达,命令间的逻辑关系式和控制结构的使用以及算术运算

所谓条件测试就是根据某种条件来判断的。
首先:介绍一下条件表达式的类型

    整数测试类型

    字符测试类型

    文件测试类型

条件测试表达式的语法结构:

    [ expression ]

    [[ expression ]]

    test exoression


接下来介绍这些类型的使用:

整数测试类型:一些选项意义

    -eq:测试两个整数是否相等

    -ne:测试像个整数是否不相等

    -gt:测试num1是否大于num2

    -lt:测试num1是否小于num2

    -ge:测试num1是否大于或等于num2

    -le:测试num1是否小于或等于num2


文件测试

    -e FILE:测试指定文件是否存在

    -f FILE:测试指定文件是否是普通文件

    -d FILE:测试指定文件是否是目录

    -p FIEL:测试指定文件是否是管道文件

    -S FILE:测试指定文件是否是套接字文件

    -h|-L:测试指定文件是否是符号连接文件

    -s FILE:测试指定文件是否不空,不空为真,空为假。

    -r FILE:测试当前用户是否对指定文件具有可读取的权限

    -w FILE:测试当前用户是否对指定文件具有可写的权限    

    -x FILE:测试当前用户是否对指定文件具有可执行的权限


wKioL1ObFVHzxfkXAAC4Ne1D_vs718.jpg


字符串测试

    ==或=(==两边有空格,否则系统理解为赋值运算):测试两个字符串是否相等;

    >,<:用来比较两个字符串的字符长度

    -z:测试某个字符串是否为空。空为真,非空为假

    -n:测试某个字符串是否为非空。非空为真,空为假

wKioL1OgWuziJ4C0AAEGevI0J_Y145.jpg


组合测试条件

-a:与关系

-o:或关系

!:非关系



命令间的逻辑关系运算

    &&:表示逻辑与,表示两个表达式都为真时,结果才为真;否则为假

    ||:逻辑或,表示两个表达式至少有一个为真时,结果才为真;否则为假

    !:取反操作

wKiom1ObGmbBZW_HAAEJElmj2nY909.jpg

wKioL1ObGxGiQ_WlAAEsLRf05po074.jpg


控制结构之if语句

首先介绍if语句

if语句分为单分支if语句和双分支if语句

单分支if语句的语法结构:

if expression ;then        当表达式为真时,执行语句1,2,..;如果为假,则不执行

    statement1

    statement2

    ...

fi


双分支if语句

if exppression ;then    当表达式为真则执行语句1,2,;如果为假,则执行语句3,4,..

    statement1

    statement2

    ...

else

    statement3

    statement4

    ...

fi

wKiom1ObFNzzIA_qAAC8feStEMU546.jpg

说明:如果要使用一个命令的执行状态结果(成功或失败),一定不能加``,直接使用该命令即可。

例如:if id USERNAME 判断某个用户是否存在,而不是显示用户账号信息。

如果要使用一个命令的执行结果则必须要加``,例如NUM=`wc -l /etc/passwd | cut -d: -f1`

如果想要把一个命令的执行状态结果保存起来,并且作为执行成功与否的判断条件,则需要先执行命令,然后在引用状态结果

例如:  id -u user1

        RETAL=$?


多分支if语句

多分支if语句一般用在某一件事物存在多种可能性的情况下

多分支if语句只执行一个,一旦碰到符合条件的,执行该范围内的语句后,也不再往后执行且退出。如果没有找到符合条件的,则将会执行最后一个else语句。

语法结构:

if expression;then

    statement1

    ...

elif expression;then

    statement2

    ...

elif expression;then

    statement3

    ...

...

else

    statement4

wKiom1OcTx3ypEHtAAHsPshdb9s766.jpg


和if多分支语句相似case...esac语句也可以用来判断某种事物具有多种可能性。

语法结构如下:

case $变量 in   将变量的值与value进行比较,符合则执行相应语句并退出,不符合则执行*)内的语句且退出。

value1)

    statement

    ;;

value2)

    statemnet

    ;;

...

*)            *表示为前面都不符合条件,从而执行该语句

    statement

esac


case...esac语句也是当某一条符合后,则不会继续往后判断执行且退出。

wKioL1OuwtnzUGjoAAEV23APHvk610.jpg



我们知道程序执行完毕后,会返回一个状态码,这个状态码可以说明该程序是执行成功还是执行失败。

那么执行失败的类型不同,返回的状态码也不同,那么我们可不可以自定义程序返回的状态码呢?

使用exit命令即可

exit:用于退出脚本

exit n:这里可以定义脚本执行结束后,返回的执行状态码

说明:如果脚本没有明确定义状态码,那么最后一条执行语句的状态码就是该脚本退出的状态码

wKiom1OcVqeDj6w2AANmXS1w1yk110.jpg



SHELL如何进行算术运算的呢?

以下共介绍四种方法

第一种方法:使用let关键字,例如:

A=3

B=6

let C=$A+$B

echo $C

wKioL1Obs7GRLCjjAAB__V6KaGE938.jpg


第二种方法:

使用C=$[ 算术表达式 ](注意空格


第三种方法:$(())

C=$((算术表达式))

wKiom1ObtFWzbWqLAAGAIcnGlUw122.jpg

第四种方法:

expr 算术表达式:表达式中各操作数及运算符之间用空格隔开,且要使用命令引用机制

形如:C=`expr $A + $B `

wKioL1ObtVvjEDymAAB3R5mfGig623.jpg


使用bc来进行数学运算

scale=2:表示保留小数位

wKioL1OgXAzj_C2fAAGfXdFHquA723.jpg

wKiom1OgXCrTD-pEAABgv7l-a6o150.jpg



生成列表的方式

方式1:{1..100}

方式2:`seq [起始数,[步进长度]] 结束数 `  #步进长度就是以该值来递增或递减来生成下一位数

wKiom1OlVA6SXOtrAAEzPOKljR0303.jpg

wKioL1OlRd6TjepBAAEbvBp0kg0776.jpg

wKiom1Ok1MjhF9ddAAFV6WqfgsY884.jpg


read命令的使用

read命令可以接受来自键盘的数据,并将其赋值给变量

语法格式:read [-pt] VAR_NAME

-p:后面接提示语

-t:后面接系统等待的时间,防止用户一直没有输入,系统等待时间过长。超时后,自动退出。

wKiom1O3xMzwHrV1AAEKfRNtWKw400.jpg


wKioL1O3xLOwXKr2AAErgc3GGzg574.jpg






本文出自 “linux学习之路” 博客,谢绝转载!

你可能感兴趣的:(逻辑运算,if语句,算术运算,case语句,条件测试表达式,列表生成方式,read语法)