Script shell debugging: Memeriksa sintaksis tanpa mengeksekusi

9

Apakah ada beberapa opsi yang bisa saya berikan untuk hanya memeriksa sintaks dari skrip shell [bash] untuk memeriksa sintaksnya, tetapi tidak benar-benar mengeksekusi apa pun atau menyebabkan potensi kerusakan?

Aeyoun
sumber

Jawaban:

7

Dari bash(1)halaman manual:

-n      Read commands but do not execute them. This may be used to check a
        shell script for syntax errors. This is ignored by interactive shells.
Michael Mrozek
sumber
Jelas sekali. Saya tidak tahu mengapa saya begitu buta sehingga saya tidak bisa melihat ini ketika saya membaca halaman buku panduan.
Aeyoun
1

Coba http://www.shellcheck.net

$ shellcheck myscript.sh

    In myscript.sh line 590:
    for f in $*; do
    ^-- SC1009: The mentioned parser error was in this for loop.


    In myscript.sh line 617:
        if [ ! -e "$somefile".vcf ]; then
        ^-- SC1046: Couldn't find 'fi' for this 'if'.
        ^-- SC1073: Couldn't parse this if expression.


    In myscript.sh line 1026:
    done
    ^-- SC1047: Expected 'fi' matching previously mentioned 'if'.
        ^-- SC1072: Unexpected keyword/token. Fix any mentioned problems and try again.

Yah, itu tidak memberi tahu saya 'jika' hilang pada saluran 634 tapi itu cukup membantu.

Martin
sumber
Perlu dicatat bahwa Anda dapat mengunduh dan menjalankannya secara lokal, ini berjalan di Haskell.
phk