💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 12.6 shell script 的追踪与 debug scripts 在执行之前,最怕的就是出现语法错误的问题了!那么我们如何 debug 呢?有没有办法不需要通过直接执行该 scripts 就可以来判断是否有问题呢?呵呵!当然是有的!我们就直接以 bash 的相关参数来进行判断吧! ``` [dmtsai@study ~]$ sh [-nvx] scripts.sh 选项与参数: -n :不要执行 script,仅查询语法的问题; -v :再执行 sccript 前,先将 scripts 的内容输出到屏幕上; -x :将使用到的 script 内容显示到屏幕上,这是很有用的参数! 范例一:测试 dir_perm.sh 有无语法的问题? [dmtsai@study ~]$ sh -n dir_perm.sh # 若语法没有问题,则不会显示任何信息! 范例二:将 show_animal.sh 的执行过程全部列出来~ [dmtsai@study ~]$ sh -x show_animal.sh + PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/root/bin + export PATH + for animal in dog cat elephant + echo 'There are dogs.... ' There are dogs.... + for animal in dog cat elephant + echo 'There are cats.... ' There are cats.... + for animal in dog cat elephant + echo 'There are elephants.... ' There are elephants.... ``` 请注意,上面范例二中执行的结果并不会有颜色的显示!鸟哥为了方便说明所以在 + 号之后的数据都加上颜色了! 在输出的讯息中,在加号后面的数据其实都是指令串,由于 sh -x 的方式来将指令执行过程也显示出来, 如此使用者可以判断程序码执行到哪一段时会出现相关的信息!这个功能非常的棒!通过显示完整的指令串, 你就能够依据输出的错误信息来订正你的脚本了! 熟悉 sh 的用法,将可以使你在管理 Linux 的过程中得心应手!至于在 Shell scripts 的学习方法上面,需要“多看、多模仿、并加以修改成自己的样式!” 是最快的学习手段了!网络上有相当多的朋友在开发一些相当有用的 scripts ,若是你可以将对方的 scripts 拿来,并且改成适合自己主机的样子!那么学习的效果会是最快的呢! 另外,我们 Linux 系统本来就有很多的服务启动脚本,如果你想要知道每个 script 所代表的功能是什么? 可以直接以 vim 进入该 script 去查阅一下,通常立刻就知道该 script 的目的了。 举例来说,我们之前一直提到的 /etc/init.d/netconsole ,这个 script 是干嘛用的? 利用 vim 去查阅最前面的几行字,他出现如下信息: ``` # netconsole This loads the netconsole module with the configured parameters. # chkconfig: - 50 50 # description: Initializes network console logging # config: /etc/sysconfig/netconsole ``` 意思是说,这个脚本在设置网络终端机来应付登陆的意思,且配置文件在 /etc/sysconfig/netconsole 设置内! 所以,你写的脚本如果也能够很清楚的交待,那就太棒了! 另外,本章所有的范例都可以在 [http://linux.vbird.org/linux_basic/0340bashshell-scripts/scripts-20150717.tar.bz2](http://linux.vbird.org/linux_basic/0340bashshell-scripts/scripts-20150717.tar.bz2) 里头找到喔!加油~