シェルスクリプト:構文エラー:forループ変数のエラー解決



Shell Script Syntax Error



Linux Mintは、for..do..done構造を使用して1 + 2 + 3 ... +100の値を計算する単純なシェルスクリプトを作成しました。結果が「sh-nxxx.sh」の場合、構文がチェックされます。常にエラーを報告しますが、PCでは正常に機能します

脚本:



#!/bin/bash #information PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH read -p 'Please input a num ' num sum=0 for ((a=0 a $sum' exit 0

エラーは次のとおりです。

Syntax error: Bad for loop variable

分析:
ubuntu 6.10以降、ubuntuは以前のデフォルトのbashシェルをダッシュ​​シェルに置き換えました。これは、/ bin / shが従来の/ bin / Bashではなく/ bin / dashにリンクするためのパフォーマンスです。

root@xxxxx ~/workspace/script $ ls -l /bin/sh lrwxrwxrwx 1 root root 4 Aug 12 14:29 /bin/sh -> dash

したがって、shを使用して検出を実行する場合、実際のダッシュとダッシュの使用は、C言語形式のforループをサポートしていません。

解決:
1.デフォルトのシェルをbashに変更します。 (bashはC言語形式のループをサポートします)

sudo dpkg-reconfigure dash

選択で[いいえ]を選択します

2、bash検出を直接使用します。

bash -n xxx.sh

3、シェルスクリプトの移植性を確保するために、シェルでサポートされているforループ形式を使用して、シェルスクリプトを直接変更します。

for a in `seq $num`

4、ファイルに実行可能権限を付与し(Baiduを喜ばせません)、ファイルの先頭に追加します

#!/bin/bash

次に、コマンドラインで使用します

./test.sh