算数表达式-test 测试语句-if 流程控制语句 | 学习笔记

简介: 快速学习算数表达式-test 测试语句-if 流程控制语句

开发者学堂课程【Shell 编程入门到精通算数表达式-test 测试语句-if 流程控制语句】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/453/detail/5594


算数表达式-test 测试语句-if 流程控制语句

内容介绍:

一、Read 命令

二、expr 命令

三、变量测试语句

四、流程控制语句

 

一、Read 命令

如果看到最常见的【root@xuegod63 test# yum install -y,此时不加y并要安装vsftpd 的包,可以看到在执行的时候会有要求输入y的结果,在这种情况下,如果想要实现脚本互动,可以采用 Read 命令。

Read 命令的作用便是可以从键盘上读入数据,赋给变量一个值。例如输入【root@xuegod63 test# read a b c,此时将会给abc三个变量赋值,回车后输入1323再次进行回车,然后进行输入【root@xuegod63 test# echo $a $b $c后会输出1323,同理输入【root@xuegod63 test# $a也是一样得出对应的结果,而Read在这个过程中会帮助其实现命令的交互。

例子的完整过程如下:

root@xuegod63 test# read a b c

1 32 3

root@xuegod63 test# echo $a $b $c

1 32 3

root@xuegod63 test# $a

1

在通过上述例子了解Read命令的作用后,再通过在shell中使用read命令的例子充分理解read命令的作用。

首先要进行输入【root@xuegod63 test# vim a.sh,在总过程中也可将其写成【root@xuegod63 test# cp z.sh read.sh,

得出就是关于read的【root@xuegod63 test# vim read.sh的式子,然后进行打开,打开后将下面的部分进行清空,清空后写入read first second third这三个变量,并将三个变量都进行输出,

即为echo “the first parameter is $first”,echo the second parameter is $second”,echo the third parameter is $third”,

输出的过程中要运用ctrl+v进行调试。而三行程序的输出结果颜色不同且后面符号也不同,这时要了解在 vim 编辑 shell 脚本时是有语法加量功能的,出错时会进行提示,而这个脚本中出错的原因在于运用了中文的双引号,正确的是应该运用英文的双引号,将其进行改正后恢复正常,然后进行保存退出。

在保存退出后要执行read,即【root@xuegod63 test# ./read.sh,而在执行的过程中会要求输入三个值,

如输入aabbcc,此时会输出“the first parameter is aa”,“the second parameter is bb”,“the third parameter is cc”

如果想使脚本更完善一些,可以在read first second third上面输入echo “input first second third :”,

保存退出后进行执行【root@xuegod63 test# ./read.sh,此时会显示input first second third :

再输入aa1133实现结果的输出的同时以便于实现Read命令的功能。

例子的完整过程如下:

root@xuegod63 test# cat read.sh

#!/bin/bash

echo “input first second third :”

read first second third

echo “the first parameter is $first

echothe second parameter is $second

echo“the third parameter is $third

测试:

root@xuegod63 test# ./read.sh

input first second third :

aa 11 33

the first parameter is aa

the second parameter is 11

the third parameter is 33

the first parameter is $first”

echo “the second parameter is $second”

echo “the third parameter is $third”

要清楚通过 echo 写一些很长的提示符也是可以的

 

二、expr 命令

1expr 命令的作用

expr 命令的作用是对 Shell 变量的算术运算,通过 expr 命令做一些算术运算。

2expr 命令对整数型变量的算术运算

首先是 expr 命令对整数型变量进行算术运算,如想知道3+5等于多少,而对于此运算结果的得出有多种方法,此方法是最基础简单的方法,首先输入【root@xuegod63 test# expr 3 + 5 其中运算符之间必须要有空格,如“3”,“+“,”5“之间有要有空格相隔,最后输出结果为8

而从上述例子中可以得出expr的语法:

expr 表达式,而其中要特别注意运算符之间必须要有空格。

expr命令的运用也较为广泛,如每天用来重启服务的也是 expr 命令,如【root@xuegod63 test# vim/etc/init.d/network 进行打开时出现的# /bin/bash 便是 expr 定理下的 bash,如if等做一些判断的也是 expr 命令。

清楚expr命令的运用后,再进行一些举例来深入了解 expr 命令。如首先输入【root@xuegod63 test# var1=8,此时注意赋值时是不需要空格进行间隔的,再输入【root@xuegod63 test# var2=2,再通过输入【root@xuegod63 test# exp 输出具体分类,输出分类结果为expandexportfsexpresskeysexportexpr。接着输入【root@xuegod63 test# expr $var1 – 5,通过 expr 的表达式输出结果为3

如想运用 expr 命令进行除法运算,则输入【root@xuegod63 test# expr $var1 / var2,输出结果为4

如想运用 expr 命令进行乘法运算,输入【root@xuegod63 test# expr $var1 * $var2此时输出结果显示为expr: syntax error

,则表明在运算过程中出现了语法错误,此时需要在”\“后加上”*“,因为”*“在shell中表示特殊含义,所以应加\进行转译,意思是不再让*的特殊含义起作用,只当作普通星号进行运算。

正确的运算表达式应为输入【root@xuegod63 test# expr $var1 \* $var2,输出结果为16

例子的完整过程如下:

root@xuegod63 test# expr 3 + 5

8

root@xuegod63 test# var1=8

root@xuegod63 test# var2=2

root@xuegod63 test# exp

expand exportfs   expresskeys

export expr

root@xuegod63 test# expr $var1 – 5

3

root@xuegod63 test# expr $var1 * $var2

expr: syntax error

root@xuegod63 test# expr $var1 \* $var2

16

3expr 命令在shell中的运用

如果将expr命令运用到shell里,运用举例来说明。如Expr2 程序的例子。

首先输入【root@xuegod63 test# vim expr.sh进行打开,得到# /bin/sh,首先对abc进行赋值,即a=10b=20c=30,此时value1=`expr $a + $b +$c`相当于expr命令,通过反引号的方式去让`expr $a + $b +$c`先执行,执行后将value1赋值,最后进行输出结果,即echo “The value of valuel is $value1”

value2value3value4也是同理进行赋值与输出结果。保存退出后,看程序是否可以执行,即要输入【root@xuegod63 test# chmod +x expr . sh,然后再进行输入【root@xuegod63 test#  ./expr . sh,就可以得出值,即输出The value of valuel1 is 60”,” The value of valuel2 is 1”,” The value of valuel3 is 600”,” The value of valuel4 is 11”

此时注意要输入【root@xuegod63 test# cat expr.sh,一定要给执行选项。

而当得出结果时,会发现算除法时与得出结果不符,这说明除法时是采用整除的方法,而加减乘除之间的运算顺序也是正常运算的。

例子的完整过程如下:

root@xuegod63 test# cat expr.sh

# /bin/sh

a=10

b=20

c=30

value1=`expr $a + $b +$c`

echo “The value of valuel is $value1”

value2=`expr $c / $b`

echo “The value of valuel is $value2”

value3=`expr $c \* $b`

echo “The value of valuel is $value3”

value4=`expr $a + $c /$b`

echo “The value of valuel is $value4”

测试:

root@xuegod63 test#  ./expr . sh

The value of valuel1 is 60

The value of valuel2 is 1

The value of valuel3 is 600

The value of valuel4 is 11

4expr命令在复杂的运算中的运用

此条件下接着了解复杂的运算符与表达式,此时运用举例来加以说明。

如输入root@xuegod63 test# var4=8,对var4赋值为8,再输入root@xuegod63 test# expr  `expr 5 + 11` / $var4,此时可以再执行一个expr命令,如`expr 5 + 11`,此时不用再输入小括号,反引号相当于小括号,此时要将`expr 5 + 11`看作整体再进行运算,得出结果为2

如输入【root@xuegod63 test# var1=8

再输入【root@xuegod63 test# var2=2,再运用expr命令对var4

进行赋值,即root@xuegod63 test# var4=`expr $var1 / $var2`,最后运用表达式root@xuegod63 test# echo $var4,输出最终结果为4

此时注意反引号与$ls-l)是不一样的,$()是赋值具体的命令,而反引号是让命令做一下执行,然后把命令的结果赋给var4

又如输入root@xuegod63 test# expr 4 – 7,输出最终结果为-3,说明expr命令对负数也是支持的。

例子的完整过程如下:

root@xuegod63 test# var4=8

root@xuegod63 test# expr  `expr 5 + 11` / $var4

2

例:

root@xuegod63 test# var1=8

root@xuegod63 test# var2=2

root@xuegod63 test# var4=`expr $var1 / $var2`

root@xuegod63 test# echo $var4

4

三、变量测试语句

变量测试语句中常用的是 test,格式为 test 加测试条件,即写作 test 测试条件,用来测试是否为真等,测试的范围为整数、字符串、文件。接下来举例来进行具体说明。

1)测试字符串

如测试两个字符串和变量是否相等时,方法如下:

test  str1= =str2 是否相等

test  str1=str2 是否不相等

在测试的过程中,注意变量之间不要留有空格。

如测试字符串是否不空时,具体方法如下:

test   str1 测试字符串是否不空

在测试的过程中,注意如果字符串为不空,返回值是非零的值,否则就是假的。

test  -n str1 测试字符串是否为空

test  -z str1 测试字符串是否为空

在测试的过程中,注意如果字符串为空,返回值是1是真的。

2)测试整数

测试时的基本写法为 test  int1 -eq  int2,而测试方法为 int1是否等于eq

当两个整数大于等于 int1,写作:

test  int1 -ge int2

当两个整数大于 int1,写作:

test  int1 -gt int2

当两个整数小于等于 int1,写作:

test  int1  -le  int2

当两个整数小于 int1,写作:

test  int1  -lt  int2 或写成:【int1  -lt  int2

当两个整数不等于 int1,写作:

test  int1 -ne int2

说明:也可以省略 test 写成【int1 -lt  int2

3)文件测试

当想测试是否文件或目录,方法如下:

test   -d   file   #测试是否为目录

test    -f   file  #测试是否为文件

test   -x   file   #测试是否有可执行权限

test   -r   file   #测试文件是否可读

test   -w   file  #测试文件是否可写

test   -e   file   #测试文件是否存在

test   -s   file   #测试大小是否为空/是否为0/是否为空文件

说明:test   -x   file可简写成:【-x file

 

四、流程控制语句

单独使用test是没有意义的,需要与流程控制语句相结合。

=====流程控制===

1if 语句

if语句是判断如果,如“如果明天晴,就出去玩”。

If语句的流程,表示为如果if语句的表达式为真,就进行这件事情;如果表达式为假,就直接退出。

if 语句对应的语法为:

If 条件

then

语句

fi

补充/扩展:ifthen可以写在一起,用“;”间隔,表示两个命令写在一行,互不影响。

&”表示前面的命令执行成功才能执行后面的命令,而“;”表示前面的命令成功与否和后面的命令没有任何关系,互相执行。

接下来举例来进行说明

如输入root@xuegod63 test# ls /opt/这样输出的结果是正常的,但如果输入root@xuegod63 test# ls /optt,输出就会显示报错,

即为lscannot access /opttNo such file or directory

如输入root@xuegod63 test# ls /opt  && ls,报错之后就不会列出当下目录的内容,即输出ls: cannot access /opttNo such file or directory,但如果将“&”写为“;”,

即输入root@xuegod63 test# ls /optt ls,此时报错与执行当前目录是分开的,

即输出ls: cannot access /opttNo such file or directory隔行再输出example01.sh  expr.sh  read.sh z1.sh  z.sh

例子完整过程如下:

root@xuegod63 test# ls /opt  && ls

ls: cannot access /opttNo such file or directory

root@xuegod63 test# ls /optt ls

ls: cannot access /opttNo such file or directory

example01.sh  expr.sh read.sh z1.sh  z.sh

清楚以上补充说明的知识点的区别后,接下来看if的例子。

如首先输入【root@xuegod63 test# vi if.sh vi,但vi没有语法加量功能,所以选择使用【root@xuegod63 test# vim if.sh,接下来打开写入#/bin/bash,换行输出 echo “if test”,进行输出测试。

再写入if -x/bin/ls】,注意两边都有空格,如果执行bin下有ls,如果文件可以执行,两边都有空格,然后用“;“进行分割,则写作if -x/bin/ls 】 ;then,后面再加表达式/bin/ls,如果可以执行后者就可以执行,结尾时为fi,然后保存退出,注意写shell脚本的时候不要一次性写太多,写一段测一段。

然后输入【root@xuegod63 test# chmod +x if . sh,再输入并执行【root@xuegod63 test# ./if . sh,得出if test,是可以执行的,就可以输出当前内容,即example01.sh  expr.sh  if.sh read.sh  z1.sh  z.sh

除了以上写法,也可以写成echo ================”,再输入if-x /bin/ls】,如果可以执行换行输入then,再换行输入语句/bin/ls,最后换行写fi

两种方法都可以进行使用。保存退出后,输入执行【root@xuegod63 test# ./if . sh,在上面没有进行判断的时候,两种结果都等于example01.sh  expr.sh  if.sh read.sh  z1.sh  z.sh,两种方法都可以执行,可得两种写法都可行,输入【root@xuegod63 test# cat if . sh,可以再次证明两种写法都可行,在判断过程中可以使用tab键改成驼峰形式进行规范处理。

例子完整过程如下:

cat if.sh

#/bin/bash

echo “if test”

if -x/bin/ls ; then

/bin/ls

fi

echo=========================

if -x/bin/ls

then

/bin/ls    

fi

运行结果:

root@xuegod63 test# ./if . sh

If test

example01.sh  expr.sh  if.sh read.sh  z1.sh  z.sh

=================================

example01.sh  expr.sh  if.sh read.sh  z1.sh  z.sh

2if/else 用法

if语句外,还有if/else用法。if/else用法为判断如果再,如“如果明天晴就怎么样,如果明天不晴再怎么样“。if/else用法的流程为如果表达式为真,就执行语句1

如果表达式为假的,就执行语句2。这是一种典型的黑白用法。

if/else用法的语法为:

If  条件1 then

命令一

else

命令二

Fi


接下来举例来说明

如首先输入【root@xuegod63 test# vim else . sh,进行打开,打开之后写入一个语法,如果password的事物能执行就执行,如果password的事物执行不了就退出。接下来看etc下的password是否可以执行,输入【root@xuegod63 test# ll /etc/passwd,输出结果为- rw – r - - r - - 1 root root 1753 Feb  7 20:57 /etc/passwd,可以得出etc下的password是不可以执行的。

此时,首先写入#!/bin/bash,如果etc下的password是可以执行的,就执行ls,即输入if -x /etc/passwd ; then,换行输出/bin/ls,否则的话就执行pwd,即输入else,换行输出pwd,最终结束为fi

保存退出后输入【root@xuegod63 test# chmod +x else . sh显示当前目录的路径,然后输入【root@xuegod63 test# ./else . sh进行执行,输出/root/test,可知执行的是pwd

然后给一个执行的权限,即输入【root@xuegod63 test# chmod +x /etc/passwd,但正常是不应该给执行权限的,然后就可以执行,在可以执行的基础上可以输出结果为else . sh  expr . sh  read . sh z.sh,隔行再输出example01.sh  if . sh z1 . sh,即输出结果为else并列出了当前目录下的内容。此时再输入【root@xuegod63 test# cat else.sh进行执行。

例子完整过程如下:

root@xuegod63 test# cat else.sh

#!/bin/bash

if -x /etc/passwd ; then

/bin/ls

else

pwd

fi

执行结果:

root@xuegod63 test# chmod +x else . sh

root@xuegod63 test# ./else . sh

/root/test

3)多个条件的联合

如果想多条件联合使用,可以通过一些参数来进行实现。参数如下:

-a&&:逻辑与,仅当两个条件都成立时,结果为真。

-oII:逻辑或,两个条件有一个成立,结果为真。

了解参数后,再了解一个更为复杂的if语句。

语法:

if  条件1  then

命令1

elif  条件2  then

命令2

elif  条件3  then

命令3

else

命令4

fi

接下来通过一个综合的实例来进行具体说明,将更复杂的if语句的语法与多条件联合的参数结合。

首先输入root@xuegod63 test# vim elif . sh,然后打开,首先写入#!/bin/bash,再输入echoinput a file name”,输入名字,然后通过read读取名字,即输入read file_name,如果输入的名字是一个目录,就执行输出,即输入if -d $file_name;  then,输出echo$file_name is a dir”

否则,如果输入的名字是一个普通文件,则执行输出,即输入if -f $file_name;  then,输出echo$file_name is a file”。如果输入的名字是一个字符设备文件或-b文件,则执行输出,即输入if - c $file_name – o – b $ file_name;  then,输出echo$file_name is a device file”

如果以上条件都不符合,则执行输出,即输入else,输出echo$file_name is an unknow file”最终输入fi,保存退出。

保存退出后输入root@xuegod63 test# chmod +x elif . sh,接下来去执行root@xuegod63 test# ./elif . sh,这时会显示输入一个名字,即输入input a file name:,假如说输入/etc/passwd,这时会输出结果为/etc/passwd is file,即etc为一个普通文件。

接着输入/etc,这时会输出结果为/etc is a dir ,etc为一个目录。再输入/dev/sda,这时会显示结果为/dev/sda is a device file,即sda为一个设备文件。

再输入/etc/aaaa,这时会显示结果为/etc/aaaa is an uknown file,即aaaa为一个不知名文件。

这就是完整的综合实例,是用来测试文件类型的,

综合实例完整过程如下:

root@xuegod63 test# cat elif . sh

#!/bin/bash

echoinput a file name:”

read file_name

if -d $file_name;  then

echo$file_name is a dir”

elif -f $file_name; then

echo$file_name is a file”

elif - c $file_name – o – b $ file_name ;  then

echo$file_name is a device file”

else

echo$file_name is an unknow file”

f

相关文章
|
存储 Java
什么是语句?什么是表达式?
什么是语句?什么是表达式?
|
iOS开发 Python
Python流程控制语句-条件判断语句练习及应用详解
Python流程控制语句-条件判断语句练习及应用详解
152 0
|
Python
python之if语句的单分支,双分支,多分支,if逻辑运算符or,if逻辑运算符and,if语句的嵌套的定义及其使用方法
python之if语句的单分支,双分支,多分支,if逻辑运算符or,if逻辑运算符and,if语句的嵌套的定义及其使用方法
237 0
|
7月前
|
JavaScript
TypeScript 中常用的条件语句:`if`语句、`if-else`语句、`switch`语句和`三元运算符`
TypeScript 中常用的条件语句:`if`语句、`if-else`语句、`switch`语句和`三元运算符`
140 4
|
5月前
|
Java 测试技术
day9:运算符、表达式和语句
【7月更文挑战第9天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
39 6
|
6月前
|
存储 C语言
C primer plus 学习笔记 第5章 运算符、表达式和语句
C primer plus 学习笔记 第5章 运算符、表达式和语句
|
7月前
|
C# 图形学
【Unity 3D】C#控制语句break、continue及算数运算符和逻辑运算符的讲解(附测试代码)
【Unity 3D】C#控制语句break、continue及算数运算符和逻辑运算符的讲解(附测试代码)
65 1
|
Shell
shell编程之条件语句与case语句
shell编程之条件语句与case语句
60 2
|
Java Shell
Shell基础学习---2、运算符、条件判断、流程控制
Shell基础学习---2、运算符、条件判断、流程控制
|
Java Shell 测试技术
shell编程之条件语句(条件测试、if语句、case语句)(上)
要使Shell脚本程序具备一定的“智能”,面临的第一个问题就是如何区分不同的情况以确定执行何种操作。Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0时表示成功,否则(非0值)表示失败或异常。 使用专门的测试工具——test命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值为0表示条件成立)。 使用test测试命令时,有以下两种形式:
239 1