Forループの実装に問題があります。スクリプトを実行すると、このエラーが発生します
test1.sh:2:構文エラー:forループ変数
私はこのエラーを理解していません。
これは私のスクリプトです
#!/bin/bash
for (( c=1; c<=5; c++ ))
do
echo "Welcome $c times..."
done
誰かがshのforループの構文を教えてもらえますか(ubuntuではダッシュシェルにリンクしています)ubuntuのシェル?
おそらく、sh
ではなくbash
で実行します。 bash test1.sh
、または実行可能の場合は./test1.sh
を試してください。ただし、sh test1.sh
は試してください。
標準のPOSIXシェルは、構文_for varname in list
_のみを受け入れます。
Cのようなforループ構文for (( expr1; expr2; expr3 ))
はバシズムです。
for c in $(seq 1 5)
を使用すると、標準のPOSIXシェルで同様の動作を得ることができます。
シェルスクリプト(図を参照)は、KornShellとBashの両方で実行されます。いくつかの考え:
syntax error: '(' unexpected
_が発生します)。for ((x;y;z))
構造を認識します。これを試して:
_#! /bin/bash
set -vx
echo "Random = $RANDOM" #Test for bash/Kornshell. Will be blank in other shells
echo \$BASH_VERSINFO[0] = ${BASH_VERSINFO[0]} #Should only work in BASH
echo \$BASH_VERSINFO[1] = ${BASH_VERSINFO[1]}
echo \$BASH_VERSINFO[2] = ${BASH_VERSINFO[2]}
echo \$BASH_VERSINFO[3] = ${BASH_VERSINFO[3]}
echo \$BASH_VERSINFO[4] = ${BASH_VERSINFO[4]}
echo \$BASH_VERSINFO[5] = ${BASH_VERSINFO[5]}
for ((c=0, c<=5, c++))
do
echo "Welcome $c times"
done
_
set -xv
_は、実行時にすべての行を表示します。$RANDOM
_は、これがBASHまたはKornshellのいずれかである場合に値を表示する必要があります(forループはどちらでも機能します)。{$BASH_VERINFO[x]}
_は、これが本当にBASHである場合にのみ設定する必要があります。 BASHに入った後にKornShellを実行しても、これらは設定されません($ Shellにはまだbash
が含まれています)。それでもforループで問題が発生する場合は、削除してください。このスクリプトのどこかで、bashシェルを実際に実行しているかどうかを確認します。
何を
ls -l /bin/sh
あなたのマシンに与える?
sh
をbash
へのシンボリックリンクにすると、sh ./test1.sh
を実行できます。