BashでProject Euler(3) if

if文を使えるようになると、Problem 1が解けます。if文は、

if ...; then
    ...
elif ...; then
    ...
else
    ...
fi

という形式になっています。ifの行は、例えば次のようです。

#!/bin/bash

if [ 1 -lt 2 ]; then
    echo 1
fi

-ltはless thanを意味していて、1は2よりも小さいので、echo 1が実行されます。
この、[]は、test関数の別の書き方で、

#!/bin/bash

if test 1 -lt 2; then
    echo 1
fi

とも書けます。このtest関数は、真のとき0を返し、偽のときそれ以外を返します(と思うんだけど、マニュアルにはtrue/falseを返すと書いてある)。なので、[]やtestの代わりに適当な関数を使ってもよくて、返ってくる値によってifのあとが実行されるか決まります(試してみると、値を返さなくても、256の倍数を返しても真判定)。すみません、

If n is omitted, the return status is that of the last command executed in the function body.

と書いてありますね。

これで、コードが書けます。

#!/bin/bash

s=0
n=$(($1-1))
for i in `seq 1 $n`; do
    if [ $((i%5)) -eq 0 ] || [ $((i%3)) -eq 0 ]; then
        let s+=i
    fi
done

echo $s

let

letコマンドは(())と同じで、

        ((s+=i))

とも書けますが、なんとなく気持ち悪いので、上ではlet使っています。もちろん、

        s=$((s+i))

とも書けます。