ksh 语法错误:`if' 不匹配

iba*_*ght 1 syntax ksh syntax-error

我是 ksh 世界的新手,我现在有一个脚本问题。此行下的脚本位于 UNIX 机器中用户的 .profile 文件中,当我尝试与他连接时,总是出现错误

home/userTest/.profile: 语法错误:`if' 不匹配

我不知道如何解决这个问题,因为我想这个脚本定义了连接用户的提示,如果我有这个错误提示只显示“$”

我试过命令

ksh -n /home/userTest/.profile

我总是在文件的最后一行收到错误

#!/bin/ksh
# ksh example 
if [[$0 = "ksh"]];
then
  bash
  exit $?
fi

if [[$0 = "-ksh"]];
then
  bash --login
  exit $?
fi

export LOGIN=$LOGNAME

#prompt config
PS1="$LOGIN@"$(hostname)":$PWD"

if [["$(id -u)" = "0"]];
then
  export PS1="$PS1# "
else
  export PS1="$PS1> "
fi

#Alias utile
alias ll="ls -la"

#Set any export here
export PATH_EXAMPLE=/home/userTest
export JAVA_HOME=$PATH_EXAMPLE/games/java/current
export PATH=$JAVA_HOME/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题 ?

谢谢。

Kir*_*kow 5

我有同样的错误。原来这是由于我在 Windows 中创建的 *.sh 文件中的 DOS 格式换行符(CR-LF),然后传输到 Linux 服务器。

将 DOS 格式换行符 (CR-LF) 转换为 UNIX 格式换行符 (LF) 的命令

  • 在Windows中:使用记事本++,如解释在这里

    • 从“编辑”菜单中,选择“EOL 转换”->“UNIX/OSX 格式”。
    • 您还可以通过“设置”->“首选项”->“新建文档/默认目录”在notepad++中设置默认EOL,然后在格式框下选择“Unix/OSX”。
  • 在 UNIX/Linux 中:使用此处解释的技术之一:

    • 使用以下sed命令将 DOS 转换为 UNIX :

    sed 's/^M$//' input.txt > output.txt

    • 使用以下tr命令将 DOS 转换为 UNIX :

    tr -d '\r' < input.file > output.file

    • 使用这个 Perl one-liner 将 DOS 转换为 UNIX:

    perl -pi -e 's/\r\n/\n/g' input.file

    • 使用以下dos2unix命令将 DOS 转换为 UNIX :

    dos2unix myfile.txtdos2unix -b myfile.txt(有备份)


[额外提示]

将 UNIX 格式换行符 (LF) 转换为 DOS 格式换行符 (CR-LF) 的命令

  • 使用unix2dos命令将 UNIX 转换为 DOS :

unix2dos myfile.txtunix2dos -b myfile.txt(有备份)

  • 使用sed命令将 UNIX 转换为 DOS :

sed 's/$'"/`echo \\\n\\\r`/" input.txt > output.txt(你需要那些\\\,你需要)