shell 基本语法第二讲之(条件判断、分支结构、case和esac、for和while循环、输出)

4 篇文章 0 订阅

8、条件判断[判断真假]

判断的两种方式

1、方式一

test   参数    测试内容

2、方式二[注意[]左右的空格]

[ 参数  测试内容 ]

查看所有的test命令

man test

直接使用某条命令的返回状态来表示真假
main 函数的返回值
main 函数返回 0 表示真
main 函数返回非0 表示假
通过$?来获取上一条命令返回状态

1、字符串判断

命令说明
[ -z 字符串 ]判断字符串是否为空
[ -n 字符串 ]判断字符串不是空串
[ -o 字符串 ]逻辑或
[ -a 字符串 ]逻辑与
[ 字符串1 == 字符串2]判断字符串1是否等于字符串2
[ 字符串1 != 字符串2]判断字符串1是否不等于字符串2
[root@localhost /] [ -z a ] #返回1 或者 test -z a 返回1
[root@localhost /] [ a == b ] #返回1
[root@localhost /] [ a != b ] #返回0
[root@localhost /] test -n ''  #返回1
[root@localhost /] test -n '234234234'  #返回0

2、整数、数组比较

命令说明
=字符串比较
-lt小于(less than)
-le小于等于(less equal)
-eq等于(equal)
-ne不等于(not equal)
-gt大于(greater than)
-ge大于等于(greater equal)
[root@localhost /] [ 2 = 3 ]
[root@localhost /] echo $? #输出1
[root@localhost /] [ 2 -lt 3 ]
[root@localhost /] echo $? #输出0
[root@localhost /] [ 2 -le 3 ]
[root@localhost /] echo $? #输出0
[root@localhost /] [ 2 -eq 3 ]
[root@localhost /] echo $? #输出1
[root@localhost /] [ 2 -ne 3 ]
[root@localhost /] echo $? #输出0
[root@localhost /] [ 2 -gt 3 ]
[root@localhost /] echo $? #输出1
[root@localhost /] [ 2 -ge 3 ]
[root@localhost /] echo $? #输出1

3、文件权限比较

命令说明
-r有读权限
-w有写权限
-x有执行权限
-s判断文件是否为非空白,有内容为真
[root@localhost /]  [ -r test.sh ]
[root@localhost /] echo $? 
[root@localhost /]  [ -w test.sh ]
[root@localhost /] echo $? 
[root@localhost /]  [ -x test.sh ]
[root@localhost /] echo $? 

4、文件类型判断

命令说明
-f文件存在并且是一个常规文件(file)
-e文件存在(existence)
-d文件存在并且是一个目录(directory)
-c判断是否为字符设备文件
-b判断是否为块设备文件
-ntfile1是否比file2更新
-otfile1是否比file2旧
-etfie1与file2是否是链接文件
[root@localhost /]  [ -f test.sh ]
[root@localhost /] echo $? 
[root@localhost /]  [ -e test.sh ]
[root@localhost /] echo $? 
[root@localhost /]  [ -d test.sh ]
[root@localhost /] echo $? 
[root@localhost /]  [ test1.sh -ot test.sh ]

9、分支结构if/then/elif/fi

if 命令|条件测试
then 
    xxxxxx
elif 命令2|条件测试2 ; then#then和if是同一行,必须加;  
    xxxxxx
else #不用加then
    xxxxxx
fi  #结束标识 将if倒着写

1、ifelseread混合使用

#!/bin/bash
echo "用户输入的数字"
read number
if [ $number -lt 10 ]
then
    echo "当前数字小于10"
elif [ $number -gt 11 ] && [ $number -lt 100 ] # | 与 &&
then
    echo "当前数字大于10 并且小于100"
elif [ $number -gt 101 ] && [ $number -lt 1000 ]
then
    echo "当前数字大于100 并且小于1000"
else
    echo "当前数字大于1000"
fi

2、逻辑||或者&&

符号说明
cmd1&& cmd21、若cmd1执行完毕后且正确执行为0则开始执行cmd2
2、若cmd1执行完毕且为错误不等于0则不执行cmd2
cmd1|| cmd21、若cmd1执行完毕后切正确执行为0则不执行cmd2
2、若cmd1执行完毕且为错误不等于0则开始执行cmd2
#两个都返回真,才算执行成功0,有任何一个返回假,则返回假
[root@localhost /] [ 5 -gt 6 ] && [ 2 -lt 1 ]  #执行$?输出为1(第一个命令执行即返回失败)
[root@localhost /] [ 5 -gt 1 ] && [ 2 -lt 9 ]  #执行$?输出为0(两个都判断成功,返回0)
#两者符合一个都返回真
[root@localhost /] [ 5 -gt 6 ] || [ 2 -lt 1 ]  #执行 $?输出为1(两个条件都不满足都返回1)
[root@localhost /] [ 5 -gt 1 ] || [ 2 -lt 9 ] #执行 $?输出为0(两个条件有一个满足即返回0)

10、case和esac

1、语法规则

case expression in
    pattern1)
        statement1
        ;;
    pattern2)
        statement2
        ;;
    pattern3)
        statement3
        ;;
    ……
    *)
        statementn
esac

2、举例

#!/bin/bash
echo "输入yes或者no"
read YES_OR_NO
case "$YES_OR_NO" in
    yes|y|YES|Y)
        echo "输入的是:yes|y|YES|Y" ;;
    no|n|NO|N)
        echo "输入的是:no|n|NO|N" ;;
    *)
        echo "输入的其他字符" ;;
esac

11、for和while循环

1、for/do/done

如果do和for是一行,则do的前面需要加;
for i in {1…100}
do

done
#遍历目录 ls

#!/bin/bash
for fruit in apple banana pear
do #如果do和for是一行,则do的前面需要加;
    echo "当前水果为:$fruit"
done   

#计算0-100之间的和
number=0
for num in {1..100}
do
    number=$[$num+$number]
done
echo "最终的值:$number"

2、while/do/done

while 命令|条件测试
do
xxx
done

#!/bin/bash
sum=0
while [ i -le 100 ]; do
  i=$(($i + 1))
  sum=$(($sum + $i))
done
echo "使用while计算的和是:$num"

12、输出

echo -n 表示不换行
echo -e 解析转义字符
#eg
echo -e "123\t234"
printf "%d\t%s\n" 123 "hello" #输出123     hello
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值