ubuntu 下通过 sh 命令运行脚本产生如下错误:[: y: unexpected operator -凯发k8官方网
今天同事在打包 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!)
总结
以上是凯发k8官方网为你收集整理的ubuntu 下通过 sh 命令运行脚本产生如下错误:[: y: unexpected operator的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇:
- 下一篇: