
こんにちは。私はUbuntu 19.10を使用しており、bashバージョンは5.0.3(1)リリースです。スクリプトを作成しようとしています。私のbashを確認しました。どの強打コマンドと戻りは次のとおりです。/usr/bin/bashだからスクリプトの最初の行に入れます。
#!/usr/bin/bash
declare -i n = 1
while [ $n <= 99 ]
do
echo $n
n = $((n+2))
done
実行しようとすると、2つのエラーが発生します。 test.sh:2: ステートメント: 見つかりませんそしてtest.sh: 3: 開くことができません=: そのファイルはありません
答え1
スクリプトの変更を考慮する必要がある4つのことがあります。そのうちの2つは構文に関連しています。
- 課題の周りにスペースを入れないでください
=
。両方の場所でこのエラーが発生しました。 - 小さいか等しい算術テストを実行するには、
-lt
notを使用します<=
。これは<=
名前付きファイルの入力リダイレクトです=
。ここでno such file
エラーが発生します。
残りの2つは次のとおりです。
- 常に二重引用符が展開されます。 。代わりに
echo "$n"
orprintf '%s\n' "$n"
の代わりにecho $n
使用してください[ "$n" -lt 99 ]
。[ $n -lt 99 ]
通常、シェルは変数の値を単語に分割し、各単語にファイル名のグロービング規則を適用します。 - ここでは必要ありません
declare -i
。bash
変数を整数として宣言する必要はほとんどありません。
declare not found
また、エラーが発生するため、bash
スクリプトを実行可能にすることも検討してください。いいえスクリプトを実行するときは、コマンドラインに明示的なインタプリタを指定します(これを行うとその行が#!
適用されます)。
また見なさい:
- いつ二重引用符が必要ですか?
- これhttps://www.shellcheck.net/このウェブサイトはシェルスクリプトの構文を確認するのに役立ちます。