1. 程式人生 > >shell指令碼:Syntax error: Bad for loop variable錯誤解決方法

shell指令碼:Syntax error: Bad for loop variable錯誤解決方法

Linux Mint中寫了一個簡單的shell指令碼,利用for..do..done結構計算1+2+3......+100的值,結果執行"sh -n xxx.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<=$num; a++))
do 
sum=$(($sum + $a))
done
echo "the sum is ==> $sum"
exit 0
錯誤如下:
Syntax error: Bad for loop variable
 分析:
從 ubuntu 6.10 開始,ubuntu 就將先前預設的bash shell 更換成了dash shell;其表現為 /bin/sh 連結倒了/bin/dash而不是傳統的/bin/bash。
allen@allen-lql ~/workspace/script $ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Aug 12 14:29 /bin/sh -> dash
所以在使用sh執行檢測的時候實際使用的是dash,而dash不支援這種C語言格式的for迴圈寫法。

解決辦法:
1、將預設shell更改為bash。(bash支援C語言格式的for迴圈)
sudo dpkg-reconfigure dash

在選擇項中選No

2、直接使用bash檢測:

bash -n xxx.sh

3、為了確保shell指令碼的可移植性,直接更改shell指令碼,使用shell支援的for迴圈格式:
for a in `seq $num`