Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >详解shell语法检查模式

详解shell语法检查模式

作者头像
全栈程序员站长
发布于 2022-09-14 08:10:49
发布于 2022-09-14 08:10:49
86400
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

启用 verbose 调试模式

在进入本指导的重点之前,让我们简要地探索下 verbose 模式。它可以用 -v 调试选项来启用,它会告诉 shell 在读取时显示每行。要展示这个如何工作,下面是一个示例脚本来批量将 PNG 图片转换成 JPG 格式。

将下面内容输入(或者复制粘贴)到一个文件中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
#convert
for image in *.png; do
convert "$image" "${image%.png}.jpg"
echo "image $image converted to ${image%.png}.jpg"
done
exit 0

接着保存文件,并用下面的命令使脚本可执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ chmod +x script.sh

我们可以执行脚本并显示它被 Shell 读取到的每一行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ bash -v script.sh

在 Shell 脚本中启用语法检查调试模式

使用 -n 激活语法检查模式

它会让 shell 读取所有的命令,但是不会执行它们,它(shell)只会检查语法。一旦 shell 脚本中发现有错误,shell 会在终端中输出错误,不然就不会显示任何东西。

激活语法检查的命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ bash -n script.sh

因为脚本中的语法是正确的,上面的命令不会显示任何东西。所以,让我们尝试删除结束 for 循环的 done 来看下是否会显示错误:

下面是修改过的含有 bug 的批量将 png 图片转换成 jpg 格式的脚本。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
#script with a bug
#convert
for image in *.png; do
convert  "$image"  "${image%.png}.jpg"
echo "image $image converted to ${image%.png}.jpg"
exit 0

保存文件,接着运行该脚本并执行语法检查:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ bash -n script.sh

从上面的输出中,我们看到我们的脚本中有一个错误,for 循环缺少了一个结束的 done 关键字。shell 脚本从头到尾检查文件,一旦没有找到它(done),shell 会打印出一个语法错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
script.sh: line 11: syntax error: unexpected end of file

我们可以同时结合 verbose 模式和语法检查模式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ bash -vn script.sh

我们还可以通过修改脚本的首行来启用脚本检查

如下面的例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash -n
#altering the first line of a script to enable syntax checking
#convert
for image in *.png; do
convert  "$image"  "${image%.png}.jpg"
echo "image $image converted to ${image%.png}.jpg"
exit 0

如上所示,保存文件并在运行中检查语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ./script.sh
script.sh: line 12: syntax error: unexpected end of file

此外,我们可以用内置的 set 命令来在脚本中启用调试模式。

下面的例子中,我们只检查脚本中的 for 循环语法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
#using set shell built-in command to enable debugging
#convert
#enable debugging
set -n
for image in *.png; do
convert  "$image"  "${image%.png}.jpg"
echo "image $image converted to ${image%.png}.jpg"
#disable debugging
set +n
exit 0

再一次保存并执行脚本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ ./script.sh

总的来说,我们应该保证在执行 Shell 脚本之前先检查脚本语法以捕捉错误。

本文地址 : http://www.linuxprobe.com/shellcheck-grammar.html

免费提供最新Linux技术教程书籍,为开源技术爱好者努力做得更多更好:http://www.linuxprobe.com/

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/158328.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年7月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
在 Shell 脚本中执行语法检查调试模式
写完脚本后,建议在运行脚本之前先检查脚本中的语法,而不是查看它们的输出以确认它们是否正常工作。
小小工匠
2021/08/16
2K0
在 Shell 脚本中跟踪调试命令的执行
本系列的前面部分清晰地阐明了另外两种 shell 脚本调试模式:详细模式和语法检查模式,并用易于理解的例子展示了如何在这些模式下启用 shell 脚本调试。
小小工匠
2021/08/16
9870
linux26-命令除错不完全指南
Date : [[2022-02-10_Thu]] 微信公众号 : 北野茶缸子 Tags : #linux/index/01 #linux/linux编程 参考: Bash 脚本中的错误处理 | 《
北野茶缸子
2022/12/10
9580
Shell 快速指南
本文介绍了Linux Shell 的基础知识,包括基本概念、常用命令、快捷键和实用技巧。同时,还介绍了如何通过脚本和工具实现自动化和效率提升。
静默虚空
2018/01/05
3.4K0
Shell编程详解
Linux操作系统是一种开放源代码的类UNIX操作系统,它的结构分为内核、Shell和应用程序三个层次。
冬天vs不冷
2025/01/20
2600
Shell编程详解
Linux下Shell脚本的调试
这篇博文是对Debugging Shell Scripts in Linux的翻译,希望能帮助到在Linux下写Shell脚本的童鞋。
卡尔曼和玻尔兹曼谁曼
2023/12/01
3640
Vim编辑器与Shell命令脚本
本章首先介绍如何使用Vim编辑器来编写和修改文档,然后通过逐步配置主机名称、系统网卡以及软件仓库等文件,帮助大家加深Vim编辑器中诸多命令、快捷键与模式的理解。然后会带领大家重温第2章和第3章中的重点知识,做到Linux命令、逻辑操作符与Shell脚本的灵活搭配使用。
梦溪
2022/03/16
1.4K0
Vim编辑器与Shell命令脚本
Linux 命令(230)—— set 命令(builtin)
set 命令主要用于查看和修改 Shell 环境的运行参数,可以定制 Shell 脚本的运行环境。
恋喵大鲤鱼
2022/12/24
4.6K0
Shell 简明教程
Shell 的作用是解释执行用户的命令,用户输入一条命令,shell 就行一条,这种方式成为交互式,还有另外一种方式,就是用户事先写一个 shell 脚本,包含很多命令,然后让 shell 一次性的进行执行,这种方式被称为“批处理方式”。 一般我们在UNIX中使用的 shell 就是 bash 和 sh,当然也有其他 shell,在 UNIX 环境下可以使用 /etc/shells: valid login shells 命令来显示所有的 shell,想要切换,直接输入 shell 名即可。
用户3147702
2022/06/27
2.1K0
Shell 简明教程
Shell编程基础
我们可以使用任意一种文字编辑器,比如gedit、kedit、emacs、vi等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行):
阳光岛主
2019/02/19
8560
sh脚本
上面命令的意思是,如果Command1命令运行成功,则继续运行Command2命令。
用户7962184
2020/11/20
10.9K0
sh脚本
从npm、npx说起,到shell
npm 脚本的原理非常简单。每当执行 npm run,就会自动新建一个 Shell,在这个 Shell 里面执行指定的脚本命令。因此,只要是 Shell(一般是 Bash)可以运行的命令,就可以写在 npm 脚本里面。
奋飛
2021/08/30
3.9K0
从npm、npx说起,到shell
Shell脚本编程_shell简单脚本
  shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务,在用户和内核之间充当翻译官的角色,是一个命令解释器。Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 shell。
全栈程序员站长
2022/11/09
8.1K0
Shell脚本编程_shell简单脚本
总结一篇shell调试技巧及常见的脚本错误
作者:老油条IT记 公众号:老油条IT记 #调试技巧 1.使用bash命令参数调试 #使用 [root@game ~]# sh [-xvn] test.sh #参数解释: -x:将执行的脚本内容输出出来,可以看到执行的过程 -n:不执行脚本,检查脚本语法是否有问题,给出错误的提示 -v:执行脚本时,先将脚本的内容输出到屏幕上,再执行脚本,如果有错误给出错误提示 #示例 使用-n参数进行语法检查 #说明:不会执行脚本,只检查有无语法错误,如果没有检测到,就无输出 [root@game scripts]#
老油条IT记
2020/09/04
1.8K0
如何编写一个shell脚本
本文结合大量实例阐述如何编写一个shell脚本。  为什么要进行shell编程  在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具。Shell不仅仅是命令的收集,而且是一门非常棒的编程语言。您可以通过使用shell使大量的任务自动化,shell特别擅长系统管理任务,尤其适合那些易用性、可维护性和便携性比效率更重要的任务。  下面,让我们一起来看看shell是如何工作的:  建立一个脚本  Linux中有好多中不同的shell,但是通常我们使用bash (bou
阳光岛主
2019/02/20
1.7K0
shell语法简单介绍
一、基本的语法 1.1、shell文件开头 shell文件必须以以下的行開始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的參数是用来运行该文件的程序。在这个样例中我们使用/bin/sh来运行程序。 当编辑好脚本时,假设要运行该脚本,还必须使其可运行。 要使脚本可运行: 执行chmod +x filename 这样才干用./filename 来执行 1.2 凝视 在进行shell编程时,以#开头的句子表示凝视,直到这一行的结束。我们真诚地建议您在程序中使用凝视。 假设您使用了凝视,那么即使相当长的时间内没有使用该脚本,您也能在非常短的时间内明确该脚本的作用 及工作原理。 1.3 变量 在shell编程中,全部的变量都由字符串组成,而且您不须要对变量进行声明,直接赋值就能够,应用变量的话,用$+变量名的形式。
全栈程序员站长
2022/07/13
6460
$加数字在Shell中的含义
$1 - Linux Bash Shell Scripting Tutorial Wiki (cyberciti.biz)
阿东
2023/02/27
1.7K0
$加数字在Shell中的含义
一篇文章让你彻底掌握 Shell
Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。
硬件开源小站
2023/04/07
2.2K0
Dockerfile : 实现多行Shell的语法, 告别 && 链接符
今天在看 docker 文档的时候, 发现了一个新语法 Dockerfile - here documents 语法[1], 即 多行语法。在 Dockerfile 1.4 中添加。
老麦
2023/09/07
1.6K0
Dockerfile : 实现多行Shell的语法, 告别 && 链接符
解决bash syntax error near unexpected token from
在编写Bash脚本时,如果遇到类似 ​​syntax error near unexpected token 'from'​​ 的错误,这意味着脚本中的某个语法有问题。本篇博客文章将介绍如何解决这个错误。
大盘鸡拌面
2023/10/31
9150
相关推荐
在 Shell 脚本中执行语法检查调试模式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验