ksh语法错误:`if'独一无二

时间:2016-02-26 10:29:31

标签: syntax syntax-error ksh

我是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

我该如何解决这个问题?

感谢。

2 个答案:

答案 0 :(得分:2)

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

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

  • 在Windows中:使用记事本++,如here所述:

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

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

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

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

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

         
        
    • 使用此Perl单行代码将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(您确实需要\\\

答案 1 :(得分:1)

我正在使用以下版本

version         sh (AT&T Research) 93u+ 2012-08-01

我的上述代码没有收到任何语法错误,但if语句条件有问题而不是

if [[$0 = "-ksh"]]

应该是

 if [[ $0 == "-ksh" ]] 

if [[ $0 = "-ksh" ]] 

后者已过时

完整代码如下

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

您的脚本可能有一些不需要的字符,请尝试使用cat -vte注意 您也可以尝试命令dos2unix filename,然后运行ksh -n