bash -x
以查看正在执行的脚本中的每个命令,并且是实时的。原因是 shellcheck 将分析脚本(文件)而不实际执行它,这与编译器所做的再次相似。linuxmi@linuxmi:~/www.linuxmi.com$ sudo apt install shellcheck
linuxmi@linuxmi:~/www.linuxmi.com$ sudo yum install shellcheck
linuxmi.com.sh
如下:#!/bin/hash
echo 'Bash 不是 Hash
echo 为我回应更多错误www.linuxmi.com'
if [ -d ./linuxmi }; than
echo 'sure! < start
fif
linuxmi@linuxmi:~/www.linuxmi.com$ shellcheck linuxmi.sh
#!/bin/hash
应该是#!/bin/bash
。让我们解决这个问题。问题 1/8 已修复!'
仅在第 5 行看到另一个'
时才终止!#!/bin/bash
echo 'Bash 不是 Hash'
echo 为我回应更多错误www.linuxmi.com'
if [ -d ./linuxmi }; than
echo 'sure! < start
fif
'
在第 3 行打开(即使它在行尾,它实际上是一个打开的双引号),并且即使在脚本结尾(注意第 8 行的指示,这在我们的6行脚本中并不存在,在最后一行之后只有一个空行。让我们清理这一空行,并修复第3行开头的双引号问题,现在可以很容易地理解。问题3/8已修复!#!/bin/bash
echo 'Bash 不是 Hash'
echo '为我回应更多错误www.linuxmi.com'
if [ -d ./linuxmi }; than
echo 'sure! < start
fif
}
更改为]
,使该行变为if [ -d ./linuxmi ]; than
. 问题 4/8 已修复!echo 'sure! < start
为echo 'sure!' < start
(问题 5/8 已修复!)then
中的 e
应该为 a。哦哦!我们要放置than
而不是then
. 多么粗心的错误😉 很容易修复(问题 6/8 已修复!)。#!/bin/bash
echo 'Bash 不是 Hash'
echo '为我回应更多错误www.linuxmi.com'
if [ -d ./linuxmi ]; then
echo 'sure!' < start
fif
fi
弄丢了!哦哦,是的,fif
不行。我们要在脚本的最后一行更改fif
为fi
。shellcheck
也会发现这个错误,因为<
它也可以在 Bash 中使用,但它确实发现了。事实上,我们的重定向是为了>
代替<
.#!/bin/bash
echo 'Bash 不是 Hash'
echo '为我回应更多错误www.linuxmi.com'
if [ -d ./linuxmi ]; then
echo 'sure!' > start
fi
--severity={SEVERITY}
选项,您可以将{SEVERITY}
其中的一个替换为error, warning, info, style
.--severity=warning
(包括更高级别,在这种情况下仅为error
)作为shellcheck
的选项。shellcheck
在执行脚本之前运行并修复所有发现的问题将确保第一次运行时准完美。您甚至可以在该编码挑战中使用 shellcheck 进行下一次现场 Bash 编码面试!在本文中,我们探讨了脚本中可能出现的各种问题以及如何shellcheck
处理它们。关注我们
联系客服