linux脚本ifthen,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命令所采⽤的不⼀样。shell脚本返回执行结果
#! /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.特⾊:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论