欢迎访问 生活随笔!

ag凯发k8国际

当前位置: ag凯发k8国际 > 运维知识 > ubuntu >内容正文

ubuntu

ubuntu 下通过 sh 命令运行脚本产生如下错误:[: y: unexpected operator -ag凯发k8国际

发布时间:2024/10/14 ubuntu 22 豆豆
ag凯发k8国际 收集整理的这篇文章主要介绍了 ubuntu 下通过 sh 命令运行脚本产生如下错误:[: y: unexpected operator 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

今天同事在打包 deb 时发生了如下错误:

[: y: unexpected operator

脚本代码如下:

read -p " make release version [y/n]:" y if [ $y == 'y' ] then#... else#... fi

 同事运行脚本的命令为:

sh test.sh

如果直接运行脚本(“./test.sh”)则不会有这个问题。经过上网查资料,发现是因为脚本解释器不同造成的,整理如下:

ubuntu 中,脚本解释器从系统 6.10 开始默认改为了 dash,而使用 sh 命令执行该脚本就是使用 dash 来执行脚本的。在该解释器中,变量与字符串判断是否相同使用的是一个等号,这就造成了上述问题。解决版本就是使用如下命令:

bash ./test.sh

即:通过指明解释器软件。或者将两个等号改为一个等号亦可。


问题解决之后,搜索了下 sh 命令,原来其已经被软连接至 dash 了,如下:

sh -> dash

所以用 sh 执行脚本就是用 dash 执行脚本,所以会报错。 而直接运行脚本则默认使用了 bash,所以能够执行成功,原因是脚本开头写的代码:

#!/bin/bash

这句代码的含义就是告诉系统,该脚本默认执行的解释器为 bash 。

再扩展下,bash 解释器实际上是 bourne again shell,它是 linux 操作系统缺省的 shell,是bourne shell 的扩展,简称 bash 。

bourne shell 是 unix 最初使用的 shell,并且在每种 unix 上都可以使用。

总结:

从时间轴上来说,shell 解释器发展历史如下:

bourne shell

        |(增加大量功能)

bash(bourne again shell),位置:/bin/bash,使用方法:#! /bin/bash

        | (简化功能)

dash(debian almquist shell),位置:/bin/sh,使用方法:#! /bin/sh

(saw:game over!)

总结

以上是ag凯发k8国际为你收集整理的ubuntu 下通过 sh 命令运行脚本产生如下错误:[: y: unexpected operator的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得ag凯发k8国际网站内容还不错,欢迎将ag凯发k8国际推荐给好友。

  • 上一篇:
  • 下一篇:
网站地图