Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

I wrote this simple script it works too but shows an error

clear
echo Enter 1st number
read n1
echo Enter 2nd number
read n2
echo MUlti is `expr $n1 \* $n2`;
if [$n1 -lt $n2]
then
 echo $n1 'is bigger than' $n2
else
 echo $n2 'is bigger than' $n1
fi

output

Enter 1st number
5
Enter 2nd number
10
MUlti is 50
./script.sh: line 7: [5: command not found
10 is bigger than 5
share|improve this question

2 Answers 2

up vote 9 down vote accepted

The [ is a command builtin, also known as test, and as all commands requires at least a space to separate it from other words in the command. [ is also available as a regular command in /usr/bin/[ or /usr/bin/test.

The presence of a final ] is instead a requirement of the command, when invoked as [, and the spaces around it are required as for every parameter of a command.

That said, in bash you should use the command [[, that has some avantages over [, like for example supporting && and || for logical operations, beside -a and -o.

Moreover, to do integer arithmetic operations and comparison between integers it is better to use arithmetic expansions $((math operations)), and the corresponding command ((math ops)).

With these observations, your script could be:

#!/bin/bash

clear
echo "Enter 1st number"
read n1
echo "Enter 2nd number"
read n2
echo "Multi is $((n1 * n2))"
if ((n1 > n2)); then
  echo "$n1 is bigger than $n2"
else
  echo "$n2 is bigger than $n1"
fi

Remember to make it executable (chmod +x my-script), then execute it with ./my-script.

share|improve this answer
    
Just curious, is there any necessity besides convenience to make a script executable rather than calling bash script.sh? As I understand it, they both translate to the same actions on the part of the shell, but I could be wrong. –  Kris Harper Aug 18 '11 at 13:11
    
@root45: there is no difference that I know of. Also, the latter works also if script.sh is not marked as executable. But the user should not know how the developer write the application, he should just call it by name. In /usr/bin there are ELF binaries, perl, python, sh, bash scripts and also other type of applications. –  enzotib Aug 18 '11 at 13:38

For bash conditional if statements, you need to have a whitespace right before and right after your condition. Yours should look like:

if [ $n1 -lt $n2 ]

instead of

if [$n1 -lt $n2]

Goofy, but that's the bash shell.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.