嵌套 if 语句
我们可以在另一个 if 语句中使用 if 语句(可以嵌套 if 语句)。
我们可以拥有尽可能多的嵌套 if 语句级别。
在以下示例中:
我们输入年份作为命令行参数。
脚本将 $1 的值赋给 year 变量。
脚本的其余部分确定输入的年份是否为闰年,如果是则打印适当的消息。
第二个 if 语句包含一个 if 语句作为它的语句之一,这是嵌套发生的地方。
对于将年份打印为闰年的脚本:
输入的年份可以被 4 整除的条件必须为真。
年份不能被 100 整除的条件也必须为真。
#!/bin/bash if [ $# -ne 1 ] then echo "You need to enter the year." exit 1 fi year= if [ $[$year % 400] -eq "0" ] then echo "$year is a leap year!" elif [ $[$year % 4] -eq 0 ] then if [ $[$year % 100] -ne 0 ] then echo "$year is a leap year!" else echo "$year is not a leap year." fi else echo "$year is not a leap year." fi
if 语句
if 语句允许我们根据某些命令的成功或者失败来指定要在 shell 脚本中执行的操作过程。
它是一个条件语句,允许在执行另一个语句之前进行测试。
最简单形式的语法是:
if [ condition ] then block_of_statements fi
其中:
- if 语句中的条件通常涉及数字或者字符串测试比较,但它也可以是成功时返回状态 0 和失败时返回非零状态的任何命令。
- then 语句之后的语句可以是任何有效的 UNIX 命令、任何可执行的用户程序、任何可执行的 shell 脚本或者任何 shell 语句,但 fi 除外。
- 用 fi 语句结束每个 if 语句。
if 循环中的多个条件(布尔运算符)
if 循环的另一个非常有用的示例是在单个 if 语句中测试多个条件。
我们可以使用 OR (||)、AND (&&) 等布尔运算符来指定多个条件。
下面是在 if 循环条件中指定“AND”条件的示例。
#!/bin/bash num=150 if [ $num -gt 100 ] && [ $num -lt 200 ] then echo "The number lies between 100 and 200" fi
if/then/elif/else 语句
在 if/then/elif/else 形式的 if 语句中,第一个 else 变成了另一个 if 语句或者“elif”,而不是一个简单的 else。
Shell 首先评估条件 1,然后是条件 2,依此类推,以第一个成功的条件停止。
然后执行与该成功条件关联的语句,然后是 fi 语句之后的任何语句。
如果没有一个条件成功,则执行 else 语句之后的语句。
然后继续执行 fi 语句之后的任何语句。
if/then/elif/else 的语法是:
if [ condition 1 ] then block_of_statements elif [ condition 2 ] then block_of_statements else block_of_statements fi
下面是 if/then/elif/else 形式的 if 循环语句的示例。
!/bin/bash total=100 if [ $total -eq 100 ] then echo "total is equal to 100" elif [ $total -lt 100 ] then echo "total is less than 100" else echo "total is greater than 100" fi
注 – if/then/elif/else 语法可以根据需要在最后的 else 语句之前包含尽可能多的 elif 命令语句。
在每个 elif 后面跟着一个 then 语句。
以下是 elif 梯形语句的示例。
#!/bin/bash name=snoopy if [ "$name" = "snoopy" ] then echo "It was a dark and stormy night." elif [ "$name" == "charlie" ] then echo "You’re a good man Charlie Brown." elif [ "$name" == "lucy" ] then echo "The doctor is in." elif [ "$name" == "schroeder" ] then echo "In concert." else echo "Not a Snoopy character." fi
if then else 语句
在条件中,当测试条件成功或者失败时,我们经常需要执行任务。
shell 可以使用 if/then/else 语法来适应这一点。
在 if/then/else 形式的 if 语句中,如果条件成功,则执行 then 语句之后的语句块。
继续执行 fi 语句之后的语句。
如果 if 语句中的条件失败,则跳过 then 语句后面的语句块,执行 else 后面的语句。
继续执行 fi 语句之后的语句。
if/then/else 的语法是:
if [ condition ] then block_of_statements else block_of_statements fi
下面是一个使用字符串比较的 if else 循环的简单示例。
它将检查变量“total”的值是否等于 100。
#!/bin/bash total=100 if [ $total -eq 100 ]; then echo "total is equal to 100" else echo "total is not equal to 100" fi
数字和字符串比较
我们可以在 bash 脚本中比较数字和字符串,并基于它进行条件 if 循环。
以下示例设置一个变量并使用 if 语句测试该变量的值。
then 语句与 if 放在同一行。
#!/bin/bash age=21 if [ $age -gt 18 ] then echo "You are old enough to drive in most places." fi
下面是一些最常用的数字比较。
数字比较 | 在以下情况下返回真 (0): |
---|---|
[ $num1 -eq $num2 ] | num1 等于 num2 |
[ $num1 -ne $num2 ] | num1 不等于 num2 |
[ $num1 -lt $num2 ] | num1 小于 num2 |
[ $num1 -gt $num2 ] | num1 大于 num2 |
[ $num1 -le $num2 ] | num1 小于或者等于 num2 |
[ $num1 -ge $num2 ] | num1 大于或者等于 num2 |
与数字比较类似,我们也可以在 if 循环中比较字符串。
在下面的示例中,一个变量值被设置为一个字符串,并在 if 循环中进一步与字符串“fred”进行比较。
#!/bin/bash name=John if [ $name = "John" ] then echo "John is here !!!" fi
下面是最常用的字符串比较。
字符串比较 | 在以下情况下返回真 (0): |
---|---|
[ str1 = str2 ] | str1 等于 str2 |
[ str1 != str2 ] | str1 不等于 str2 |
[ str1 < str2 ] | str1 按词法顺序在 str2 之前 |
[ str1 > str2 ] | str1 按词法顺序跟在 str2 之后 |
[ -z str1 ] | str1 的长度为零(持有空值) |
[ -nstr1 ] | str1 具有非零长度(包含一个或者多个字符) |
注 – 词法顺序意味着小写字母比大写字母具有更大的价值。
因此,尝试比较大小写混合的字符串可能会产生意想不到的结果。