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

1. if command  的格式

cat tt 
aaaa
bbb
ccc
ddd
eee
ggg

[[email protected] 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





你可能感兴趣的:(第五章 shell 机构化脚本【if-else-fi】)