shell 脚本报错

0 shell-script

我有一个抛出错误的小shell脚本:

意外的文件结尾

脚本如下:

#!
if [  t -eq  1  ]
then
 echo " TEST1 "
else
echo " TEST LAST LOOP "
fi
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 5

脚本中没有任何内容应该给出该错误。如果你用 运行脚本sh ./script.sh,它会产生

 TEST LAST LOOP 
Run Code Online (Sandbox Code Playgroud)

作为输出。如果与bash ./script.sh您一起运行它,您将获得相同的输出,但会出现一个额外的“预期的整数表达式”错误,因为t它不是整数(如果您使用sh它sh来实现,这也可能发生bash)。如果你用 运行它./script.sh,shell 很可能会抱怨“没有这样的文件或目录”,因为你没有添加适当的#!-line。

在这个脚本中,你可以使用#!/bin/sh的#!系法,你只使用标准的POSIX功能。

测试[ t -eq 1 ]永远不会为真,因为t(字符)不是整数。如果您在某处将变量 设置为t整数,请[ "$t" -eq 1 ]在测试中使用。


我可以让 shell 说出“意外的文件结尾”的唯一方法是将脚本转换为 DOS 文本文件并使用bash.

如果出现此错误,则脚本文件可能是 DOS 文本文件(可能是由于在 Windows 机器上创建的)。您应该dos2unix在脚本上运行。

请参阅与 相关的问题dos2unix。

  • 如果`t` 环境变量定义的值是解析为`1` 的算术表达式,则`[ t -eq 1]` 可能适用于某些`sh` 实现。例如,`t=20/20 ksh93 -c '[ t -eq 1 ]'` 为真。`t='a[$(")]' ksh93 -c '[ t -eq 1 ]'` 会给你一个 _'end of file' 意外_错误。 (3认同)