gpt4 book ai didi

bash - Shellscript : Comparing parameters, 输出最大值和最小值

转载 作者:行者123 更新时间:2023-11-29 09:40:52 24 4
gpt4 key购买 nike

现在我对 shell 脚本和 Linux 本身还很陌生,我很困惑为什么这不起作用。解释和答案会很有帮助,因为我真的很想学习这个。无论如何,这是我的代码:

      #!/bin/bash
#
#Script number 7
#
while i in $#;
do
if [ $i -gt $@ ]; then max=$i; fi
if [ $i -lt $@ ]; then min=$i; fi
done
echo Max is: $max
echo Min is: $min

我需要做的是获取参数列表,然后比较它们并输出具有最高值和最小值的参数。我觉得我在这里完全错过了一些东西。根据我的循环,我寻找大于列表的值并将其分配为最大值。然后我寻找最少的并将其指定为最小值。任何帮助都很棒。提前致谢!

最佳答案

您选择的答案是行不通的。如果没有负数,那将不起作用。尝试使用列表作为 345。这会给你最小值是零。

您需要做的是将最小值和最大值都设置为列表中的第一个数字,然后遍历其余数字以获取它:

#! /bin/bash

min=$1
max=$1
shift

for num in $@
do
[ $num -gt $max ] && max=$num
[ $num -lt $min ] && min=$num
done

echo "Min = $min Max = $max"

我将 minmax 都设置为列表中的第一个数字。然后,我使用 shift 删除该数字。

现在,我查看列表中的每个数字。 $@ 表示命令行参数。 $@$* 都代表所有的位置参数,在这种情况下都可以。

[ $num -gt $max ] && max=$num

语句类似于

if [ $num -gt $@ ]; then max=$num; fi

这类似于将 if 语句放在一行中的方式。然而,我这样做的方式是在 BASH 中完成的标准方式。 && 是一个列表运算符。如果&&之前的语句为真,则执行&&之后的语句。否则,&&后面的语句将不会被执行。

您会在 || 列表运算符中看到类似的情况。这是一个逆语句,其中 || 之后的语句仅在之前的语句为假时才执行。

看起来特殊变量让您感到困惑:

  • while statement:只要statement,这将继续循环继续返回一个 true 值。在 shell 中,真值为零,假值为非零。
  • $#是命令行参数个数,$1到$x代表每个参数。
  • $@ 表示所有命令行参数的列表。
  • for var in list:设置变量 varlist 中的每个项目。这通常是您在解析命令行参数时想要的。

关于bash - Shellscript : Comparing parameters, 输出最大值和最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17353154/

24 4 0