我是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
我该如何解决这个问题?
感谢。
答案 0 :(得分:2)
我有同样的错误。原来是由于我在Windows中创建的* .sh文件中的DOS格式换行符(CR-LF),然后才将其转移到Linux服务器。
在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.txt
或dos2unix -b myfile.txt
(带有备份)
- 使用
unix2dos
命令将UNIX转换为DOS:
unix2dos myfile.txt
或unix2dos -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