![See all Bash/Shell scripting related FAQ](https://www.alaica.com/wp-content/uploads/linux-106.png)
我是 Unix/Linux 新用户。我正在学习 shell 脚本。如何在 bash shell 中比较数字?
您需要使用 test 命令使用以下运算符来执行各种数字比较:
- INTEGER1 -eq INTEGER2– INTEGER1 等于 INTEGER2
- INTEGER1 -ge INTEGER2– INTEGER1 大于或等于 INTEGER2
- INTEGER1 -gt INTEGER2– INTEGER1 大于 INTEGER2
- INTEGER1 -le INTEGER2– INTEGER1 小于或等于 INTEGER2
- INTEGER1 -lt INTEGER2– INTEGER1 小于 INTEGER2
- INTEGER1 -ne INTEGER2– INTEGER1 不等于 INTEGER2
[请勿打印]
教程详情 | |
---|---|
难度级别 | 简单的 |
根权限 | 不 |
要求 | 没有任何 |
美东时间。阅读时间 | 4分钟 |
[/不打印]
向测试实用程序问好
test 命令计算表达式,如果计算结果为 true,则返回零 (true) 退出状态;否则返回 1(假)。语法是:
测试条件 测试条件&& do_something || do_nothing_due_to_false [条件] && do_something || 由于错误而什么都不做
if 命令的语法如下:
如果 [条件];然后 do_run_this_due_to_true_condition 别的 do_run_this_due_to_false_condition 菲
示例:在 bash 中比较数字
判断5是否大于10,输入(在终端输入命令):
x = 5 y = 10 [ $x -gt $y ] 回显 $?
输出示例:
1
在 bash shell 中,非零输出意味着错误结果,即 $x 不大于 $y。尝试以下示例(在终端键入命令):
x = 51 y = 10 [ $x -gt $y ] 回显 $?
0
零值表示真实结果,即 $x 大于 $y。让我们使用以下语法使输出更具可读性:
[条件] && 真命令|| 错误命令
判断5是否大于10,输入(在终端输入命令):
x = 5 y = 10 [ $x -gt $y ] && echo "是$ x > $ y " || echo "否$ x 不 > $ y"
否 $x 不 > $y
您可以使用 if 语句,如下所示:
#!/bin/bash read -p "输入一个数字(必须大于20): " n if test $n -gt 20 then echo "$n is greater than 20." else echo "You are not following my instructions." fi
OR
#!/bin/bash read -p "输入一个数字(必须大于20):" n if [ $n -gt 20 ] ; 然后 回声 "$n is greater than 20." else echo "You are not following my instructions." fi
Run it as follows:
./script.sh Enter a number (must be greater than 20) : 22 22 is greater than 20. ./script.sh Enter a number (must be greater than 20) : 8 You are not following my instructions.
Arithmetic tests options
您可以通过键入以下命令查看所有支持的选项的列表:
$ help test
Sample outputs:
File operators:
-a FILE True if file exists.
-b FILE True if file is block special.
-c FILE True if file is character special.
-d FILE True if file is a directory.
-e FILE True if file exists.
-f FILE True if file exists and is a regular file.
-g FILE True if file is set-group-id.
-h FILE True if file is a symbolic link.
-L FILE True if file is a symbolic link.
-k FILE 如果文件具有“粘性”则为真' bit set.
-p FILE 如果文件是命名管道则为真。
-r FILE 如果文件可供您读取则为真。
-s FILE 如果文件存在且不为空则为真。
-S FILE 如果文件是套接字则为真。
-t FD 如果 FD 在终端上打开则为真。
-u FILE 如果文件是 set-user-id,则为真。
-w FILE 如果文件可由您写入则为真。
-x FILE 如果您可以执行该文件则为真。
-O FILE 如果该文件实际上由您拥有,则为真。
-G FILE 如果文件实际上由您的组拥有,则为真。
-N FILE 如果文件自上次读取后已被修改,则为真。
FILE1 -nt FILE2 如果 file1 比 file2 新则为真(根据
修改日期)。
FILE1 -ot FILE2 如果文件 1 早于文件 2,则为真。
FILE1 -ef FILE2 如果 file1 是 file2 的硬链接,则为真。
字符串运算符:
-z STRING 如果字符串为空则为真。
-n 字符串
STRING 如果字符串不为空则为真。
字符串 1 = 字符串 2
如果字符串相等则为 True。
字符串1!=字符串2
如果字符串不相等,则为 True。
字符串 1 < 字符串 2
如果 STRING1 按字典顺序排在 STRING2 之前,则为 True。
字符串 1 > 字符串 2
如果 STRING1 按字典顺序排序在 STRING2 之后,则为 true。
其他运营商:
-o OPTION 如果启用了 shell 选项 OPTION,则为 True。
!EXPR 如果 expr 为假则为真。
EXPR1 -a EXPR2 如果 expr1 和 expr2 都为真,则为真。
EXPR1 -o EXPR2 如果 expr1 或 expr2 为真,则为真。
arg1 OP arg2 算术测试。OP 是 -eq、-ne 之一,
-lt、-le、-gt 或 -ge。
如果 ARG1 等于、不等于,则算术二元运算符返回 true,
小于、小于或等于、大于或大于或等于
比ARG2。
也可以看看
- 第 4 章:条件执行(决策)
- 请参阅 获取更多信息。