【发布时间】:2011-12-21 22:57:07
【问题描述】:
我是 linux 及其 shell 编程的新手。
我在 ubuntu 和 linux mint 上编写了一个 shell 脚本,在他们的系统上运行良好。
现在当我尝试在 red hat 上运行这个 shell 脚本时,整个输出都很奇怪。
问题:
\n 字符按原样打印,不打印新行。
-
出现一些错误,例如
expr:non-integer argument。我只使用了三种类型的语句进行比较-1. if [ "$proto" = "TCP" ] 2. if [ "$prot_no" = "06" ] 3. if [ "$i" -eq 32 ]
我不知道错误到底出在哪里,但在 ubuntu 和 mint 系统上没有错误。
我听说 ubuntu 中的默认 shell 是 bash,而红帽中的默认 shell 是 ksh,但我不确定这一点。
如果是这种情况,那么我该如何更改我的 shell,或者如果可能的话,是否有任何命令可以让我通过 bash shell 运行我的脚本,这样就不需要对脚本进行任何更改。
请帮助我....几乎不可能更改脚本中的所有\n 字符。
编辑:
-
对于
\n问题,这是一个示例行..echo "\n\n$proto Header" -
对于其他错误,这里有一些可能有帮助的代码...
if [ "$trans_or_tunn" -eq 1 ] then prot_no=`head -n 1 decrypt.txt | awk -F " " '{printf "%s",$7}'` if [ "$prot_no" = "06" ] then proto="TCP" else if [ "$prot_no" = "11" ] then proto="UDP" else if [ "$prot_no" = "3a" ] then proto="ICMP" fi fi .....echo "\n\n$proto Header"这一行应该打印三个值之一..TCP HEADER,UDP HEADER或ICMP HEADER.
但实际打印在屏幕上的是..
以上行在屏幕上的输出
\n\nHeader
【问题讨论】:
-
感谢您的快速响应,但脚本有大约 1000 行代码。我该怎么做? .如果可能的话,告诉我有什么方法可以在不更改脚本的情况下在 red hat 上运行相同的脚本。
-
要诊断
\n问题,我们需要查看您尝试打印换行符的示例代码。非整数参数是由于变量扩展为非整数值或为空;如果您知道此错误发生在哪一行会有所帮助。只要脚本的 bang 行正确,默认 shell 就无关紧要。如果您需要 bash,请指定 bash。 -
@Sorpigal 请看我的编辑。
-
我只能假设
$trans_or_tunn不包含整数。我想它包含字符串expr。分配给它的代码在哪里?你试过打开set -x吗?