比较shell脚本

时间:2015-10-18 03:51:02

标签: bash shell

写一个Bash shell脚本“order.sh”,它接受两个整数参数“a”和“b”,并打印出适当的关系“a< b“,”a == b“或”a> b“(用”a“和”b“代替它们的值)。

代码:

#!/bin/bash
echo -n "enter the first number:"; read x
echo -n " enter the second number:"; read y

if ["$x " -lt "$y"]
then
echo "$x < $y"
else
echo"$y < $x"

if [ "$x" -eq "$y"]
then
echo " $x == $y "

fi 

我无法编译他的代码,因为它失败并说“/ bin / sh:make command not found” 谁能告诉我这意味着什么?我是shell脚本的新手,我不知道是什么问题......

2 个答案:

答案 0 :(得分:2)

  

我无法编译他的代码,因为它失败并说“/ bin / sh:make命令未找到”有人能告诉我这意味着什么吗?我是shell脚本的新手,我不知道是什么问题......

该陈述中的几个问题:

  • “编译此代码”...不需要编译Bash脚本。 Bash是一种解释语言
  • “/ bin / sh:make命令未找到”意味着它的样子:找不到make命令。您的make上没有PATH命令。但这没关系,因为你不需要make这里

您的脚本存在语法错误,例如:

if ["$x " -lt "$y"]

您需要在[之后和]之前添加空格,如下所示:

if [ "$x " -lt "$y" ]

其他问题:

  • 3个案例中未使用if-elif-else
  • 条件有限:有2 if但只有1关闭fi

其他一些提示:

  • 要在Bash中进行算术运算,请使用((...))代替[...]
  • 使用echo -n; read代替read -p:它是一个命令而不是两个,echo的标志不可移植,因此最好避免使用它们
  • 缩进if-elif-else的内容以使脚本更易于阅读

应用更正和改进:

#!/usr/bin/env bash

read -p "enter the first number: "
read -p "enter the second number: "

if ((x < y)); then
    echo "$x < $y"
elif ((x > y)); then
    echo "$y < $x"
else
    echo "$x == $y"
fi

答案 1 :(得分:0)

您应该使用/usr/bin/env来查找bash。我想你还想要一个elif(以及一个else - 你当前的一个错过fi并且不会超过测试,你应该使用{{ 1}}和[[(你错过了]]的空格)。像,

echo"$y < $x"

我测试过,并按照您的预期进行测试。我建议你看7.02. More advanced if usage - Bash Beginner's Guide