Ksh

如何檢查 ksh 腳本的語法錯誤?

  • July 22, 2014
$ cat foo.sh 
#!/bin/ksh

echo foo
ehco foo2

它不會警告錯誤:

$ /bin/ksh -n foo.sh 
$ echo $?
0

**問題:**如何讓“ksh -n”警告我語法錯誤?

如果您在該腳本中有語法錯誤,您會在 stderr 上看到它們。ksh -n是正確的。一個例子:

$ cat script.ksh
touch tmpfile
for f in tmpfile   # missing "do"
 rm $f
done
$ ksh script.ksh
script.ksh: syntax error at line 3: `rm' unexpected
$ ls -l tmp*
-rw-rw-r-- 1 glennj glennj 0 Jul 22 06:54 tmpfile
$ rm tmpfile
$ ksh -n script.ksh
script.ksh: syntax error at line 3: `rm' unexpected
$ ls -l tmp*
ls: cannot access tmp*: No such file or directory

因此,腳本已解析但未執行(未創建文件)

這不是實際 ksh 語法的語法錯誤,而是僅在執行時擷取的無效命令名稱的語法錯誤。當你執行它時,你會得到 command not found 錯誤。

如果添加:

echo foo                                                                        
ehco foo2

if [ 1 -lt 0 ]                                                                  
then                                                                            
   echo 123                                                                    
done                                                                            

然後執行:

$ ksh -n foo.sh 
foo.sh: syntax error at line 9: `done' unexpected

引用自:https://unix.stackexchange.com/questions/145872