自学shell编程——第2讲(test测试语句/if语句/case语句)

自学shell编程——第2讲(test测试语句/if语句/case语句)

shell中用到的分支语句:if-then-else-fi语句;case-esac语句。控制语句:for语句;while语句;until语句

1. test测试语句,test相当于ls一类,属于shell命令

根据测试对象,将test语句分为三大类。
  1. 文件。可以判断是否存在(-e)、是否可读(-r)、是否可写(-w)、是否可执行(-x)、是否是目录(-d)、是否是普通文件(-f)、是否非空(-s)。
  2. 两个字符串或单个字符串。可以判断是否相同(=)、是否不同(!=)、是否小于(<)、是否大于(>)、长度是否非0(-n)、长度是否为0(-z)。后面两个针对单个字符串。** 注意使用=、<、>时前面加转义符号 **
  3. 两个数值。可以判断是否等于(-eq)、是否不等于(-ne)、是否大于(-gt)、是否大于等于(-ge)、是否小于(-lt)、是否小于等于(-le)。
    ** 通常test语句作为if语句的判断语句**

2. if语句:if-then-else-fi语句

这里直接给两个例子。(多练习)多个判断条件,使用或与非(||、&&、!)

#!/bin/bash

#判断命令行参数的个数是否为2。复习命令行参数的个数为参数$#
if test $# -eq 2
then
	echo "two command arguments."
else
	echo "error"
fi

#判断一个文件是否存在,如果是普通文件就写入hello,如果不是就打error(这里使用了两个if判断或者使用或与非)
if test -e $1
then
	if test -f $1
	then
		echo "hello">>$1
		cat $1
	else
		echo "Error. file is not normal file"
	fi
else
	echo "file is not exist"
fi
#执行:./if.sh file.txt 1

当然对于if的判断语句,你可以不用test进行测试,而是直接使用。(上面的例子1改写)

if test $# -eq 2
if [ $# -eq 2 ]   #注意[]的空格,严格遵守,否则报错

3. if语句判断3个条件:if(判断条件)-then-elif(判断条件)-then-else-fi

if [ $1 \> $2 ];
then
        echo "$1>$2"
elif [ $1 \< $2 ]
then
        echo "$1<$2"
else
        echo "$1=$2"
fi
#执行:./if.sh 13 15 #输出13<15;执行:./if.sh a b #输出a<b

总结:①if(判断条件)后面的分号(;)有无都可以。②记住if判断为真,后面跟then。③对于数值的比较尽量使用-eq/-ne/-gt/-ge/-lt/-le进行(这里有带等于的比较)。<、>、=之类可以用于数值和字符串的比较,但是在用的时候注意加\,表转义。④养成良好的书写习惯,一直保持,若使用分号,则都用。

使用逻辑关系或与非时,使用[[判断条件]](当然也有其他方式,你可以自行查找,这里提供我习惯使用的)。当然如果是test语句,两边直接用就行,不需要加任何符号

例子如下:

#!/bin/bash
#判断输入的数字,如果10<X<20则输出good,否则输出bad

if [[ $1 -gt 10 ]] && [[ $1 -lt 20 ]]               #if test $1 -gt 10 && test $1 -lt 20
then
	echo "good"
else
	echo "bad"
fi

#如果该数刚好是100
if [ ! $1 -eq 100 ]                   #如果没有!,则条件为真,then输出"$1 is 100."
then
	echo "$1 is not 100."
else
	echo "$1 is 100."
fi

#执行:./mulif.sh 12,输出good 12 is not 100.;执行:./mulif.sh 100,输出bad 100 is 100.

4. case-esac语句。case 变量 in-XX)-xxxx;;-YY)-yyyy;;-*)-zzzz;;-esac

这里直接给一个例子。(多练习)

#!/bin/bash
case $# in
1)
	echo $1;;
2)
	if [ $1 \> $2 ]
	then
		echo "$1>$2"
	else
		echo "$1<=$2"
	fi;;
*)
	echo "arguments up to 2.";;
esac

#执行:./case.sh 7 输出7;./case.sh 2 3 输出2<=3;./case.sh 2 3 4 输出arguments up to 2.

注意:只需要在该case下的最后一个语句后加;;即可。

总结:①if语句:以if开,以fi结束;②case语句:以case开,以esac结束。这很重要,大家很容易忘记。②多多联系,if、case、test语句的嵌套使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值