for ループの実装に問題があります。スクリプトを実行すると、このエラーが発生します
test1.sh: 2: 構文エラー: ループ変数が正しくありません
このエラーがわかりません。
これは私のスクリプトです
#!/bin/bash
for (( c=1; c<=5; c++ ))
do
echo "Welcome $c times..."
done
sh(ubuntuではダッシュシェルにリンク)のforループの構文を教えてもらえますか?ubuntuのシェル?
for ループの実装に問題があります。スクリプトを実行すると、このエラーが発生します
test1.sh: 2: 構文エラー: ループ変数が正しくありません
このエラーがわかりません。
これは私のスクリプトです
#!/bin/bash
for (( c=1; c<=5; c++ ))
do
echo "Welcome $c times..."
done
sh(ubuntuではダッシュシェルにリンク)のforループの構文を教えてもらえますか?ubuntuのシェル?
おそらくsh
、ではなく、で実行しbash
ます。を試すbash test1.sh
か、./test1.sh
実行可能である場合は実行しますが、実行できませんsh test1.sh
。
標準の POSIX シェルは構文のみを受け入れますfor varname in list
C ライクな for ループ構文for (( expr1; expr2; expr3 ))
はバシズムです。
を使用して、標準の POSIX シェルで同様の動作を得ることができます。for c in $(seq 1 5)
シェルスクリプト(図を参照)は、Kornシェルと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に入った後にKornシェルを実行しても、これらは設定されません($ SHELLにはまだ含まれていますbash
)。それでもforループで問題が発生する場合は、削除してください。このスクリプトのどこかで、実際にbashシェルを実行しているかどうかを確認します。
何が
ls -l /bin/sh
あなたのマシンに与える?
へのシンボリックsh
リンクを作成するbash
と、次のことができますsh ./test1.sh