Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用shell脚本从5个数中获取最大数_Linux_Bash_Shell_Unix - Fatal编程技术网

Linux 如何使用shell脚本从5个数中获取最大数

Linux 如何使用shell脚本从5个数中获取最大数,linux,bash,shell,unix,Linux,Bash,Shell,Unix,我试图从shell脚本中的5个给定数字中找到最大的数字。我正在Ideone.com上的Bash类别中测试我的代码。我犯了一个错误 运行时错误时间:0.02内存:5312信号:-1 这是密码 read -p "Enter first Number:" n1 read -p "Enter second Number:" n2 read -p "Enter third Number:" n3 read -p "Enter fourth Number:" n4 read -p "Enter fourth

我试图从shell脚本中的5个给定数字中找到最大的数字。我正在Ideone.com上的Bash类别中测试我的代码。我犯了一个错误

运行时错误时间:0.02内存:5312信号:-1

这是密码

read -p "Enter first Number:" n1
read -p "Enter second Number:" n2
read -p "Enter third Number:" n3
read -p "Enter fourth Number:" n4
read -p "Enter fourth Number:" n5
if[ [ n1 -gt n2 ] && [ n1 -gt n2 ] && [ n1 -gt n3 ] && [ n1 -gt n4 ] && [ n1 -gt n5 ]] ; then
      echo "$n1 is a Greatest Number"
elif[ [ n2 -gt n3 ] && [ n2 -gt n3 ] && [ n2 -gt n4 ] && [ n2 -gt n5 ]] ; then
     echo "$n2 is a Greatest Number"
elif[ [ n3 -gt n4 ] && [ n3 -gt n5 ] ] ; then  
     echo "$n3 is a Greatest Number"
elif[ n4 -gt n5 ] ; then  
     echo "$n4 is a Greatest Number"
else
     echo "$n5 is a Greatest Number"
fi

有什么问题?请引导

看来您的问题是空间。在“if”“elif”之后和“]”之前添加空格

那你呢

echo -e "$n1 \n $n2 \n $n3 \n $n4 \n $n5" | sort -n -r | head -n 1

看来你的问题是空间。在“if”“elif”之后和“]”之前添加空格

那你呢

echo -e "$n1 \n $n2 \n $n3 \n $n4 \n $n5" | sort -n -r | head -n 1

您可以更高效地执行此操作,而无需调用外部命令,如
sort
head
/
tail

max2()
{ if (( "$1" > "$2" ))
  then
    echo "$1"
  else
    echo "$2"
  fi
}
max5()
{ tmp1=$(max2 "$1" "$2")
  tmp2=$(max2 "$3" "$4")
  tmp3=$(max2 "$tmp1" "$tmp2")
  echo $(max2 "$tmp3" "$5")
}
m=$(max5 "$n1" "$n2" "$n3" "$n4" "$n5")

如果您知道所有的数字都足够小,您可以使用
return$n
而不是
echo$n
,然后捕获返回代码而不是数字的文本表示。

您可以更有效地执行此操作,不调用外部命令,如
sort
head
/
tail

max2()
{ if (( "$1" > "$2" ))
  then
    echo "$1"
  else
    echo "$2"
  fi
}
max5()
{ tmp1=$(max2 "$1" "$2")
  tmp2=$(max2 "$3" "$4")
  tmp3=$(max2 "$tmp1" "$tmp2")
  echo $(max2 "$tmp3" "$5")
}
m=$(max5 "$n1" "$n2" "$n3" "$n4" "$n5")

如果您知道所有数字都足够小,可以使用
return$n
而不是
echo$n
,然后捕获返回代码而不是数字的文本表示形式。

下面是一个简单的shell函数,用于从传递的数字参数中查找最大值:

max()
{
    local m="$1"
    for n in "$@"
    do
        [ "$n" -gt "$m" ] && m="$n"
    done
    echo "$m"
}

示例:
max 1 3 2
返回
3

下面是一个简单的shell函数,用于从传递的数值参数中查找最大值:

max()
{
    local m="$1"
    for n in "$@"
    do
        [ "$n" -gt "$m" ] && m="$n"
    done
    echo "$m"
}

示例:
max 1 3 2
返回
3

读取
行中的变量外,您需要向所有变量添加美元符号:例如
if[$n1-gt$n2]
。您也不需要在ifs周围使用额外的括号,并且需要更加小心地使用空格:
if[$n1-gt$n2]&&&[…];那么
还有为什么你要带这么多的
如果..elif
它应该是脚本而不是
C
。所以,好好利用它吧,瞧@Josh Jolly,谢谢你为我做的指导工作。@Vishal,请记住,
[
不仅仅是语法,它是一个命令(在bash提示符下,输入
帮助[
)与任何其他命令一样,它在前后都需要空格。除了
read
行中的变量外,您需要在所有变量中添加美元符号:例如
if[$n1-gt$n2]
。您也不需要在ifs周围添加额外的括号,并且需要更加小心地使用空格:
if[$n1-gt$n2]&&[…];那么,
还有为什么你要用这么多的
如果..elif
它的脚本不是
C
。所以利用它看看@Josh Jolly谢谢你为我做的指导工作。@Vishal,记住
[
不仅仅是语法,它是一个命令(在bash提示符下,输入
帮助[
)与任何其他命令一样,它在前后都需要空格。
printf“%s\n”$n1$n2$n3$n4$n5
echo-e…
printf“%s\n”$n1$n2$n3$n4$n5
echo-e…