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

3
  • 7
    www.shellcheck.net Apr 29 '20 at 18:43
  • 2
    It looks like you're running this script with dash instead of bash, is that right? Are you running it with sh test.sh? Apr 29 '20 at 18:45
  • i was using sh script_name.sh now is working. Thx steeldriver. :) When i run it with ./script_name.sh Apr 29 '20 at 18:50
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:

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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