在UNIX/Linux下编程必须需要注意一下几点问题(特别是在运行于Windows上的IDE或编程工具进行开发):
1.大小写问题。
在文件或目录的命名规则中,特别注意驼峰命名法的大小写区分问题。有些语言的内部变量或者引用方面同样也是。
2.权限问题。
不要任意操作文件系统,换句话说,不要动与自己无关的任何文件(UNIX/Linux下一切都是文件),特别是新部署或者应用中要生成新文件时将权限先查看清楚
3.关于unix文件编码问题的再次强调
在运行于Windows上的IDE或编程工具进行开发时特别注意,保存文件时一定要将dos文件格式(file format)转化成unix文件格式。
dos文件格式中换行符为\r\n
unix文件格式中换行符为\n
现在vim和awk对此有了改进,能自动识别,而grep还不能很好的识别,因此一旦用grep这样的工具就会导致出现未知的后果。
附:针对文件格式做的一些测试:
1
2
3
4
5
6
7
8
9
|
#!/bin/bash
#chkconfig: 345 86 14
#description: Startup and shutdown script for ChatterServer(Port:$SERVICEPORT))
#SERVICEPORT=29093
#SERVICEPORT=`grep ^port $(pwd)/../conf/constant.properties | awk -F '=' '{print $2}'`
PORTFILE=$(
pwd
)/..
/conf/constant
.properties
#SERVICEPORT=$(cat $PORTFILE | grep ^port | awk -F '=' '{print $2}')
SERVICEPORT=$(
cat
$PORTFILE | dos2unix |
grep
^port)
echo
"SUCCESS: ChatterServer(Port:$SERVICEPORT) is OK"
|
上面的constant.properties文件的fileformat如果为dos,如下图所示:
则就会出现
另一个测试脚本:
1
2
3
4
5
6
7
8
9
10
11
12
|
cat
>.
/portfile
<<eof
port=1080
eof
PIDFILE=.
/portfile
cat
$PIDFILE
#SERVICEPORT=$(grep ^port $PORTFILE | awk -F '=' '{print $2}')
#grep ^port $PORTFILE | awk -F '=' '{print $2}'
# VS
cat
$PIDFILE |
grep
^port |
awk
-F
'='
'{print $2}'
SERVICEPORT=$(
cat
$PIDFILE |
grep
^port |
awk
-F
'='
'{print $2}'
)
echo
$SERVICEPORT
echo
"SUCCESS: ChatterServer(Port:$SERVICEPORT) is OK"
|
针对上面的文件格式问题,可以用IDE或者文件编辑器来处理,例如下图所示的设置:
也可以用vim中的:set ff=unix转换,也可以用dos2unix这样的工具转换,如下面的脚本所示:
1
2
3
4
5
|
# NOTE: $(pwd)/../conf/constant.properties file fileformat must be unix NOT dos in shell scripts, or will cause some unknown error
# NOTE: grep is vrey sensitive to dos fileformat or unix fileformat
# apt-get install dos2unix
PORTFILE=$(
pwd
)/..
/conf/constant
.properties
SERVICEPORT=$(
cat
$PORTFILE | dos2unix |
grep
^port |
awk
-F
'='
'{print $2}'
)
|
--end--
本文转自 urey_pp 51CTO博客,原文链接:http://blog.51cto.com/dgd2010/1674199,如需转载请自行联系原作者