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 的作用同 [ ]
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
(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
(()) 针对计算表达式推出的专门的判断格式,在之前的 expr $[] 都需要转移;(()) 这里面是最常见的操作符,需要转义的。
if (( 2**3 -1 * 2 >= 6));then echo OK;fi
[[ ]] 双中括号是专门为字符串的比较提供的;[[]] 可以提供test [] 不提供的模糊匹配(正则表达式)
if [[ $USER == z* ]];then echo $USER;fi zengtai.csm
#!/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