0

Hello i'm using Ubuntu 19.10 and bash version is 5.0.3(1)-release. I'm trying to writte script. I checked my bash with which bash command and return was /usr/bin/bash so u put it on first line of script.

#!/usr/bin/bash
declare -i n = 1
while [ $n <= 99 ]
do 
  echo $n 
  n = $((n+2))
done

When i try run it i get two errors: test.sh: 2: declare: not found and test.sh: 3: cannot open =: No such file

1 Answers1

2

There are four things in your script that you should consider changing. Two of them are syntax related:

  1. Assignments can not have spaces around =. You have this error in two places.
  2. To do an arithmetic less than or equal test, use -lt, not <=. The <= is an input redirection from a file called =. This is where your "no such file" error comes from.

The other two are:

  1. Always double quote expansion. Use echo "$n" or printf '%s\n' "$n" instead of echo $n. Use [ "$n" -lt 99 ] instead of [ $n -lt 99 ]. In the general case, the shell would otherwise split the variable's value into words and apply filename globbing rules to each of those words.
  2. You don't need declare -i here. Declaring a variable as integer in bash is very rarely needed.

Additionally, since you get a "declare not found" error, you are likely not running the script with bash. Do consider making your script executable and also don't specify an explicit interpreter on the command line when you run your script (this would make the #! line take effect).

See also:

Kusalananda
  • 333,661