Chinaunix

标题: 问一个aix下shell脚本问题 [打印本页]

作者: sophialily    时间: 2010-09-08 10:04
标题: 问一个aix下shell脚本问题
各位好:

    我目前使用的是5300-05-00版本,下面一段shell总是有问题,请各位帮忙看看


#!/bin/ksh
errnum=`awk '{print $1}' /home/oracle/errlg.txt`
echo $errnum
if [ -n $errnum ]; then
echo "hello!!!"
fi

报错2.sh[4]: test: 0403-004 Specify a parameter with this command.
这个文件为空或者不为空都报错,我是想判断如果这个文件取出的值不为空情况下,需要我操作东西(aix中if不为空是不是用-n表示,linux是可以通过这个代码的)
作者: 树袋熊    时间: 2010-09-08 10:42
使用下面的例子吧,如果你不能把你自己的代码搞定:

#Begin Code
PASSWORD_FILE="/etc/passwd"

ls –l $PASSWORD_FILE > /dev/null 2>&1
if [[ $? != 0 ]]; then

       print “$PASSWORD_FILE was not found"
       exit

else
   
   for username in $(cat $PASSWORD_FILE | cut -f1 -d
   do

       print $username

   done         
fi
作者: yddll    时间: 2010-09-08 10:52
文件为空的时候,是会报这个错误的
要是文件没问题,报这个错误就难理解了

至于-n的用法问题,你不会man test么
作者: sophialily    时间: 2010-09-08 11:35
谢谢两位答复,我刚吃man test了一下:

-n String1
            Returns a True exit value if the length of the String1 variable is
            nonzero.
这个-n应该是返回的string的长度为非0则为true,我那么写应该没问题,但是总是报那个错,
我其实就是要用if判断取得值不为空then。。。。

我昨天给ibm800打电话,他们的support竟然告诉我说这是个bug?
我觉得他们说的有问题,所以才到论坛上来问。。
还请有aix shell经验多的朋友帮忙解决一下,多谢了
作者: yddll    时间: 2010-09-08 11:54
告诉你的是bug,就没说补丁吗?

你的目的是啥,文件非空,就是有错误,文件为空,就是没错误呗,是这个逻辑呗?
作者: sophialily    时间: 2010-09-08 11:56
另外,这位大哥提供的脚本好像也有点问题(本人shell不熟)

#!/bin/ksh
PASSWORD_FILE="/etc/passwd"
echo $PASSWORD_FILE
ls -l $PASSWORD_FILE > /dev/null 2>&1
if [[ $? != 0 ]]; then
       print "$PASSWORD_FILE was not found"
       exit
else
     for username in $(cat $PASSWORD_FILE) | cut -f1 -d
   do
       print $username
   done
fi

执行报错:3.sh[5]: 0403-057 Syntax error at line 9 : `|' is not expected.
作者: yddll    时间: 2010-09-08 11:58
另外,这位大哥提供的脚本好像也有点问题(本人shell不熟)

#!/bin/ksh
PASSWORD_FILE="/etc/passwd"
...
sophialily 发表于 2010-09-08 11:56


有几个字符被表情替代了
作者: sophialily    时间: 2010-09-08 11:58
回复5楼:

告诉你的是bug,就没说补丁吗? ---- IBM让升级版本到53-08以后,这太麻烦了,我是生产机,

你的目的是啥,文件非空,就是有错误,文件为空,就是没错误呗,是这个逻辑呗?----是这个逻辑,如果文件为非空,表示错误,文件为空是正常
作者: sophialily    时间: 2010-09-08 12:00
回7楼:

   那个符号我已经改了,问题不在那,在cut前面的管道符那,还得帮忙调一下,另外看看各位有没有更简单的方法实现当文件中为非空表示错误,为空表示正常的逻辑的shell脚本
作者: yddll    时间: 2010-09-08 12:04
回7楼:

   那个符号我已经改了,问题不在那,在cut前面的管道符那,还得帮忙调一下,另外看看各位有没有 ...
sophialily 发表于 2010-09-08 12:00



for username in $(cat $PASSWORD_FILE | cut -f1 -d ":")
正确是这么写的
作者: yddll    时间: 2010-09-08 12:29
那个bug的细节描述有没有

试试直接test文件是否非空呢?

如果test都不好使的话,就用点迂回的办法吧

#!/usr/bin/ksh
FILE="/home/oracle/errlg.txt"
COUNT=`wc -c $FILE |awk '{print $1}'`
if [[ $COUNT != 0 ]]; then
       print "Warning"
else
        print "No logging"
fi




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2