シェルスクリプト:構文エラー: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