在bash中使用if语句if语句是大多数编程语言中最基本的条件语句。在bash中,语法如下:if[condition];那么你的代码fiif语句以fi结尾(if的反义词)。注意空格:左括号后和右括号前必须有一个空格,否则shell会报错;条件运算符(=、==、<=等)前后必须有空格,否则会报错。我们创建一个示例脚本root.sh,当您以root身份运行该脚本时,您将输入if语句:#!/bin/bashif[$(whoami)='root'];thencho"Youareroot"fiwhoami命令输出当前用户名。在bash变量教程中,我们介绍了用于命令替换的$(command)构造的语法。因此,条件$(whoami)='root'仅当您以根用户身份登录时才为真。If-else语句在上面的代码中,如果当前用户不是root,你将看不到任何输出。当if条件为假时,需要将执行的代码放在else语句中,如下:#!/bin/bashif[$(whoami)='root'];thencho"Youareroot"elseecho"Youarenotroot"fi此时以普通用户运行脚本时,会输出Youarenotroot,如下图:$./root.shYouarenotuseelseif语句当有多个表达式(condition)时,可以使用elif(else-if)语句。看下面的例子,我们创建一个名为age.sh的脚本:#!/bin/bashAGE=$1if[$AGE-lt13];thenecho"你是个孩子。"elif[$AGE-lt20];thenecho"你是个十几岁的孩子。"elif[$AGE-lt65];thenecho"你是个成年人。"elseecho"你是个老人。"fi上面代码中的-lt小于(小于)。在上一篇文章中,我们介绍了如何给bash脚本传递参数。现在让我们运行age.sh并传递不同的参数:$你是孩子。$你是青少年。$你是成年人。$你是老人。需要注意的是,在一个条件语句中,可以有多个elif,但只能有一个else,而且必须用fi关闭。bash中的嵌套if语句If语句可以嵌套。查看以下weather.sh脚本:#!/bin/bashTEMP=$1if[$TEMP-gt5];然后[$TEMP-lt15];thenecho"Theweatheriscold."elif[$TEMP-lt25];thenecho"Theweatherisnice."elseecho"Theweatherishot."fielseecho"外面很冷..."fi上面的脚本接受温度作为一个参数并显示反映天气的消息。当温度大于5度时,就会进入嵌套的if语句。让我们运行这个脚本:$外面很冷...$天气很冷。$天气很好。$天气很热。在bash中使用case语句我们也可以在bash中使用case语句来替换多个if语句的一般语法如下:Command…;;esac注意:条件语句总是包含一个空格和右括号);条件语句后的命令以两个分号结束;;,前面有或没有空格;case语句以esac结尾(与case相反)。case语句在处理模式匹配或正则表达式时特别有用。作为演示,让我们创建一个名为char.sh的脚本:#!/bin/bashCHAR=$1case$CHARin[a-z])echo"SmallAlphabet."[A-Z])echo"BigAlphabet."[0-9]])echo"Number."*)echo"SpecialCharacter."esac上面的脚本将一个字符作为参数,并显示该字符是大写字母、小写字母、数字还是特殊字符。$./char.shaSmallAlphabet.$./char.shZBigAlphabet.$./char.sh7Number.$./char.sh$SpecialCharacter.在上面的脚本中,我使用了通配符*来定义默认字符,它相当于if语句中的else语句。bash中的测试条件有许多测试条件可以与if语句一起使用。如果使用数字、字符串或文件,测试条件会有所不同。将它们视为bash中的逻辑运算符。下表列出了一些最常用的测试条件:条件相当于$a-lt$b$a<$b$a-gt$b$a>$b$a-le$b$a<=$b$a-ge$b$a>=$b$a-eq$b$a等于$b$a-ne$b$a不等于$b-e$FILE$FILEexists-d$FILE$FILE存在并且是一个目录。-f$FILE$FILE存在并且是一个普通文件。-L$FILE$FILE存在并且是一个软链接。$STRING1=$STRING2$STRING1等于$STRING2$STRING1!=$STRING2$STRING1不等于$STRING2-z$STRING1$STRING1为空以上测试条件不用特意记录,大家可以查在man手册中:$mantest我们创建一个名为filetype.sh的脚本来检查文件是否是常规文件、目录或软链接:#!/bin/bashif[$#-ne1];然后选择“错误:参数数量无效”exitfifile=$1if[-f$file];然后选择“$fileelif[-L$file];然后选择“$fileelif[-d$file];thencho"$fileelseecho"$filefi在脚本的开始,我们检查参数的个数,如果没有参数或者有多个参数,脚本将输出一条消息并退出。它是这样工作的:$./filetype.shweather.shweather.sh是一个普通文件。$./filetype.sh/bin/bin是一个软链接。$./filetype.sh/var/var$./filetype.shError:Invalidnumberofarguments将ifelse语句写在同一行至此,我们已经以标准缩进格式编写了上述代码。这是一种标准的写法,但不一定要这样写No。当你只想在shell中看到结果时,可以在单行中使用一个ifelse语句。假设我们有以下脚本:if[$(whoami)='root'];thencho"你是root"elseecho"你不是root"fi可以写成一行代码:if[$(whoami)='root'];然后回声“根”;否则回显“不是根”;fi您可以运行上面的脚本来查看结果。基本上,只需添加一个分号;命令结束后,写入下一条语句。
