第五章 shell 机构化脚本【if-else-fi】

本文详细介绍了Shell脚本中不同形式的条件判断语句,包括if command、if test、if 【】、if (())、if【【】】以及case的用法。讲解了它们的工作原理,特别是字符串比较和返回码的重要性,以及在使用过程中的注意事项,如转义字符的使用和正则表达式的支持。
摘要由CSDN通过智能技术生成

1. if command  的格式

cat tt 
aaaa
bbb
ccc
ddd
eee
ggg

[zengtai.csm@login1.cm4 ttt]$ if grep -q kk tt;then echo "cc is ok";elif grep -q ee tt;then echo ee is ok;else echo NO;fi  
eee
ee is ok
(1).  shell 支持多个命令在同一行,多个命令之间用;隔开

(2). if 的工作方式: 我们知道我们shell 没执行一个命令都会有一个返回码;如果这个command 执行后返回码是 0 这会执行then后面的一系列命令;

其实 if test if 【】 基本的原理也是这样,并非是之前其他语言中的那种判断条件的真假来执行后面的命令。

if test str1 == str2 ;then commands;if

如果str1 == str2 两个字符串相等;test 命令的返回码就是0 就会执行then后面的一系列命令;test 的作用同 [  ]

2. if test 命令格式

if test $var1 -gt $var2;then    # 整数比较大小【必须是整数】
   echo "$var1 > $var2"         # gt lt ge le eq ne
elif test $var -eq $var2;thten
   echo "$var1 = $var2"
else
   echo "$var1 < $var2"
fi

if test $var1 -gt $var2;then    # 整数比较大小【必须是整数】
   echo "$var1 > $var2"         # gt lt ge le eq ne
elif test $var -eq $var2;thten
   echo "$var1 = $var2"
else
   echo "$var1 < $var2"
fi

if test $str1 == $str2;then   #字符串比较大小
   echo "$str1 = $str2"       # == !=  < >   test 命令必须用 \ 对> < 进行转义
elfi test $str1 \> $str2;then
   echo "$str1 > $str2"
else
   echo "$str1 < $str2"
fi
 str="shuming" # test -n $str 字符串str 长度> 0 test 返回码是 0
if test -n $str ;then # test -z $str 字符串str 长度 = 0 test 返回码是 0
echo $str
fi

3. if 【】 的命令

(1).  【】 两边必须有空格 ;否则语法错误

(2).  【】 跟test命令的工作原理是相同的

(3).  在比较字符串时  test 【】 都需要对 > <  进行转义

if [ -d /home/xxx/file ];then echo /home/xx/file is exists && is dir;fi

-f file #file 存在而且是一个普通文件

-e file #file 存在【什么文件也可以】

-s file $file 存在而且不为空

-r file #file 存在而且是可读

-w file #file 存在并且可以写

-o file #file存在而且属于当前用户

$ if test aaaa.zip -ot bb;then echo aaaa.zip is old than bb;fi # -nt -ot 比较两个文件的创建时间aaaa.zip is old than bb$ ll aaaa.zip bb-rw------- 1 xxx users 2097152 Aug 29 17:53 aaaa.zip-rw-r--r-- 1 xxx users     359 Sep  4 09:44 bb

4. if  (());then fi 命令

(())  针对计算表达式推出的专门的判断格式,在之前的 expr  $[]  都需要转移;(()) 这里面是最常见的操作符,需要转义的。

if (( 2**3 -1 * 2 >= 6));then echo OK;fi 

5. if【【】】 ,命令

[[ ]]  双中括号是专门为字符串的比较提供的;[[]] 可以提供test [] 不提供的模糊匹配(正则表达式)

if [[ $USER == z* ]];then echo $USER;fi
zengtai.csm

6.case 的命令的格式

#!/bin/bash
case $USER in
        shuming|test)
                echo "$USER is shuming or test";;
        zengtai.csm)
                echo "$USER is zengtai.csm";;
        shaoye)
                echo "$USER is shaoye";;
                *)
                echo "sorry,$USER is not anyone";;
esac





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值