linux脚本if then,shell脚本:使用if-then语句和test命令

1、基本结构化命令if-then语句格式:

if command

then

command

fi

bash shell的if语句会运行if后面的那个命令。若是该命令的退出状态码是0(该命令成功运行),位于then部分的命令就会被执行。若是该命令的退出状态码是其余值,then部分的命令就不会被执行。

fi语句用来表示if-then语句到此结束。web

#! /bin/bash

if pwd

then

echo "it worked one"

echo "能够执行多条命令"

fi

执行结果:shell

it worked one

能够执行多条命令

2、if-then-else语句

if command

then

command

else

command

fi

当if语句中的命令返回非零退出状态码时,会执行else部分中的命令。

else部分能够包含多条命令。express

#! /bin/bash

if Iam; then

echo "it worked two"

else ls

echo "I am in the else"

fi

执行结果:bash

./test1: line 9: Iam: command not found

test1

I am in the else

3、嵌套if

bash shell会依次执行if语句,只有第一个返回退出状态码0的语句中的then部分会被执行app

if command

then

command

elif command

then

command

elif command

then

command

else

command

fi

4、test命令

if-then语句不能测试命令退出状态码以外的条件,test命令提供了在if-then语句中测试不一样条件的途径。

若是test命令中列出的条件成立,test命令就会退出并返回状态码0。

test命令的格式很是简单:svg

test condition

condition是test命令要测试的一系列参数和值。当用在if-then语句中时,test命令看起来是这样的。测试

if test condition

then

command

fi

另外一种写法:ui

if [condition]

then

command

fi

第一个方括号和第二个方括号以前必须加上一个空格,不然会报错

test命令能够判断三类条件:

数值比较

字符串比较

文件比较spa

1)判断整数

test 整数1 –eq 整数2 整数相等

test 整数1 –ge 整数2 整数1大于等于整数2

test 整数1 –gt 整数2 整数1大于整数2

test 整数1 –le 整数2 整数1小于等于整数2

test 整数1 –lt 整数2 整数1小于整数2

test 整数1 –ne 整数2 整数1不等于整数2

#! /bin/bash

value1=10

value2=12

if [ $value1 -gt 12 ]

then

echo "$value1 大于 12"

elif [ $value1 -eq $value2 ]

then

echo "$value1 等于 $value2"

else

echo "$value1 小于 12"

fi

执行结果:code

10 小于 12

可是涉及到浮点值时,数值条件测试会有一个限制。bash shell只能处理整数。

2)判断字符串

test –n str1 str1的长度非零

test –z str1 str1的长度为零

test str1=str2 字符串相等

test str1!=str2 字符串不等

test str1 > str2 检查str1是否比str2大

test str1 < str2 检查str1是否比str2小

记住,在比较字符串的相等性时,比较测试会将全部的标点和大小写状况都考虑在内。

-n和-z能够检查一个变量是否含有数据。

大于号和小于号必须转义,不然shell会把它们看成重定向符号,把字符串值看成文件名;

大于和小于顺序和sort命令所采用的不一样。

#! /bin/bash

value1=test

value2=Test

if [ $value1 \> $value2 ]

then

echo "$value1 大于 $value2"

elif [ $value1 \< $value2 ]

then

echo "$value1 小于 $value2"

else

echo "$value1 等于 $value2"

fi

执行结果:

test 大于 Test

sort test file

执行结果:(小到大排序)

test

Test

比较测试中时使用的是标准的ASCII顺序,sort使用的是系统本地化语言设置中定义的排序顺序。

3)判断文件

test File1 –ef File2 两个文件具备一样的设备号和i结点号

test File1 –nt File2 文件1比文件2 新

test File1 –ot File2 文件1比文件2 旧

test –b File 文件存在而且是块设备文件

test –c File 文件存在而且是字符设备文件

test –d File 文件存在而且是目录

test –e File 文件存在

test –f File 文件存在而且是正规文件

test –g File 文件存在而且是设置了组ID

test –G File 文件存在而且属于有效组ID

test –h File 文件存在而且是一个符号连接(同-L)

test –k File 文件存在而且设置了sticky位

test –b File 文件存在而且是块设备文件

test –L File 文件存在而且是一个符号连接(同-h)

test –o File 文件存在而且属于有效用户ID

test –p File 文件存在而且是一个命名管道

test –r File 文件存在而且可读

test –s File 文件存在而且是一个套接字

test –t FD 文件描述符是在一个终端打开的

test –u File 文件存在而且设置了它的set-user-id位

test –w File 文件存在而且可写

test –x File 文件存在而且可执行

5、复合条件测试

if-then语句容许使用布尔逻辑来组合测试。有两种布尔运算符可用:

1)[ condition1 ]&&[ condition1 ] 必须都知足

2)[ condition1 ] || [ condition1 ] 知足一种便可

#! /bin/bash

var1=10

var2=18

if [ $var1 -gt 15 ]&&[ $var2 -gt 15 ]; then

echo "都知足条件"

elif [ $var1 -gt 15 ]||[ $var2 -gt 15 ]; then

echo "其中一个知足条件"

else

echo "都不知足!"

fi

执行结果:

其中一个知足条件

6、if-then的高级特性

1)用于数学表达式的双括号 ((expression))

2)用于高级字符串处理功能的双方括号 [[ expression ]]

使用双括号

双括号的命令格式以下:

((expression))

expression能够是任意的数学赋值或比较表达式。

2.特色:

(1)在双括号结构中,全部表达式能够像c语言同样,如:a++,b–等。

(2)在双括号结构中,全部变量能够不加入:“$”符号前缀。

(3)双括号能够进行逻辑运算,四则运算

(4)双括号结构 扩展了for,while,if条件测试运算

(5)支持多个表达式运算,各个表达式之间用“,”分开

(6)不须要将双括号中表达式里的判断符号转义

#! /bin/bash

var1=10

if((var1*2>$var1)); then

((var2 = $var1*2))

echo "the var2 is $var2"

fi

执行结果:

the var2 is 20

注意,引用变量能够加$符号也能够不加;

7、case命令

case var in pattern1 | pattern2)

command1;;

pattern3 )

command2;;

*)

commands;;

esac

case工做方式如上所示。取值后面必须为单词in,每一模式必须以右括号结束。取值能够为变量或常数。匹配发现取值符合某一模式后,其间全部命令开始执行直至 ;;。

取值将检测匹配的每个模式。一旦模式匹配,则执行完匹配模式相应命令后再也不继续其余模式。若是无一匹配模式,使用星号 * 捕获该值,再执行后面的命令

案例:

#! /bin/bash

echo 'Input a number between 1 to 4'

echo 'Your number is:\c'

read aNum

case $aNum in

1|2) echo 'You select 1 or 2'

;;

3) echo 'You select 3'

;;

4) echo 'You select 4'

;;

*) echo 'You do not select a number between 1 to 4'

;;

esac

执行结果:

LSCNM597976:if-then qxr4383$ ./test5

Input a number between 1 to 4

Your number is:\c

1

You select 1 or 2

LSCNM597976:if-then qxr4383$ ./test5

Input a number between 1 to 4

Your number is:\c

3

You select 3

LSCNM597976:if-then qxr4383$ ./test5

Input a number between 1 to 4

Your number is:\c

4

You select 4

LSCNM597976:if-then qxr4383$ ./test5

Input a number between 1 to 4

Your number is:\c

5

You do not select a number between 1 to 4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值