首页 > 系统相关 >详解shell语法检查模式

详解shell语法检查模式

时间:2023-03-24 21:13:26浏览次数:52  
标签:脚本 shell script image jpg 语法 详解 png

启用 verbose 调试模式

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

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

#!/bin/bash
#convert
for image in *.png; do
convert "$image" "${image%.png}.jpg"
echo "image $image converted to ${image%.png}.jpg"
done
exit 0

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

$ chmod +x script.sh

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

$ bash -v script.sh

详解shell语法检查模式详解shell语法检查模式                                                                 

在 Shell 脚本中启用语法检查调试模式 使用 -n 激活语法检查模式

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

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

$ bash -n script.sh

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

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

#!/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

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

$ bash -n script.sh

详解shell语法检查模式详解shell语法检查模式                                                                       

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

script.sh: line 11: syntax error: unexpected end of file

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

$ bash -vn script.sh

详解shell语法检查模式详解shell语法检查模式                                                             

 

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

如下面的例子:

#!/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

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

$ ./script.sh
script.sh: line 12: syntax error: unexpected end of file

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

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

#!/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

再一次保存并执行脚本:

$ ./script.sh

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

标签:脚本,shell,script,image,jpg,语法,详解,png
From: https://www.cnblogs.com/0227-yyds/p/17253339.html

相关文章

  • ArrayBuffer、Float32Array、Uint8Array 详解
    ArrayBufferArrayBuffer()是一个普通的JavaScript构造函数,可用于在内存中分配特定数量的字节空间。constbuf=newArrayBuffer(16);//在内存中分配16字节alert(buf.......
  • H.265编码协议---SPS语法解析
    一、背景  最近搞Intel平台的多路复用视频解码,发现某些视频会报解码不兼容参数的报错,分析MFX的源码(如下图所示),解码实例通过对比新旧的SPS部分参数来判断是否是相同的......
  • Markdown语法说明及测试一览表(转载)
    Markdown目录在文中放置[toc]Markdown标题在标题前放置1~6个#号一级标题二级标题三级标题四级标题五级标题六级标题Markdown段落格式常用通用部分......
  • Shell: /dev/null 2>&1详解
    1,可以将/dev/null看作"黑洞".它非常等价于一个只写文件.所有写入它的内容都会永远丢失.而尝试从它那儿读取内容则什么也读不到.然而,/dev/null对命令行和脚本都非常的......
  • Shell 编程:Bash空格的那点事
     空格,一个看不见的字符,很不起眼,也正由于不起眼,很多人经常忽略它,导致代码出错,却还找不着北。这里,我们来聊聊bash中空格的那点事。先了解下bash中什么时候该用空格,什么时......
  • OpenHarmony关系型数据库详解[1]
    1概述关系型数据库(RelationalDatabase,以下简称RDB)是一种基于关系模型来管理数据的数据库,是在SQLite基础上提供一套完整的对本地数据库进行管理的机制,为开发者提供无需......
  • Linux shell set command All In One
    LinuxshellsetcommandAllInOneerros❌unbound-variable#$1:unboundvariableif(($1))thenecho$1#arg=$1#tsGenerator$arg#tsGenerator......
  • CSS - 选择器详解 - 子代、后代选择器详解 - 伪类选择器 - 测试
    @目录测试准备:子代选择器>测试代码:指定id的子代选择器后代选择器(以空格隔开)指定id的后代选择器指定class类的后代选择器多空格后代选择器详解(特别重要)伪类选择......
  • Centos 7 - uWSGI服务器 虚拟环境配置详解及
    @目录1.系统环境2.uWSGI安装3.虚拟环境配置3.1创建虚拟环境3.2启动虚拟环境虚拟环境内安装uwsgi4.uwsgi.ini配置模板5.uWSGI服务器无法识别虚拟环境内的python解释......
  • 一文详解vue-cli2.0与vue-cli3.0之间的区别
    我们之所以介绍vue-cli2和vue-cli3的使用和区别,是因为VUE脚手架工具从vue-cli3版本开始,在项目结构等诸多方面开始与vue-cli2版本相比,有较大的优化与调整。因此,在学习和工......