Chinaunix

标题: 如何用一个简洁方式同时判断命令本身是否执行成功以及命令执行结果 [打印本页]

作者: wayflying    时间: 2014-10-22 09:19
标题: 如何用一个简洁方式同时判断命令本身是否执行成功以及命令执行结果
先判断sed是否执行成功(截获err输出),再判断第i行是否存在:
#!/bin/bash
i=7
string=`sed -n ''$i'p' t.txt 2>&1`
if [ "$?" -ne 0 ];then
  echo "fail to execute sed"
  exit 1
fi
if [ -s "$string" ];then
  echo "exist"
else
  echo "no exist"
fi

如果脚本里到处都是这种,感觉很不简洁,不知道有没有简洁的方式,如:
#!/bin/bash
i=7
if [ `sed -n ''$i'p' t.txt` ];then
  echo "exist"
else
  echo "no exist"
fi

但这么写,即使t.txt不存在也会执行到else分支,无法判断sed命令本身是否执行成功。

作者: 刺客阿地    时间: 2014-10-22 09:35
本帖最后由 刺客阿地 于 2014-10-22 09:36 编辑

string=`sed -n ''$i'p' t.txt 2>&1`这一行不能作为变量放到判断当中吗?

if [  -s "$string " ];

在if里面写个嵌套if先判断sed是否执行成功,再做一次变量判断是否存在。

作者: 刺客阿地    时间: 2014-10-22 09:44
  1. #!/bin/bash
  2. i=7
  3. string=`sed -n ''$i'p' t.txt 2>&1`
  4. if [ "$?" -ne 0 ];then
  5.   echo "fail to execute sed"
  6.   exit 1
  7. if [ -s "$string" ];then
  8.   echo "exist"
  9. else
  10.   echo "no exist"
  11. fi
  12. fi
复制代码

作者: chengchow    时间: 2014-10-22 09:52
#!/bin/bash
i=7
string=`sed -n ''$i'p' t.txt 2>&1`
if [ "$?" -ne 0 ];then
    echo "fail to execute sed"
else
    if [ -s "$string" ];then
        echo "exist"
    else
        echo "no exist"
    fi
fi
作者: jinwen2660    时间: 2014-10-22 10:25
个人人为sed是否执行成功,这里来看就是看t.txt文件是否存在,存在的话sed就是执行成功的,所以我觉得用以下方法就可以满足你的要求:
[ -f /etc/hosts ] && [ -S "`sed -n '123213 p' /etc/hosts`" ]
RETVAL=$?
[ ${RETVAL} -eq 0 ] && echo "Success"
[ ${RETVAL} -ne 0 ] && echo "Failed"
作者: wayflying    时间: 2014-10-22 10:50
sed是个外部命令,可能遇到文件不存在,没安装(比如用最小方式安装的服务器,很多命令没有)等等情况,这样子,命令就不能执行成功。
但是,每个命令都去检测一把,真心麻烦。

作者: jinwen2660    时间: 2014-10-22 10:55
回复 6# wayflying


    不管sed存不存在,直接安装sed的包不就好了。{:2_167:}
作者: chengchow    时间: 2014-10-22 11:42
回复 6# wayflying
那就用基本命令组合不就可以了
i=7
head -n $i file | tail -1


   




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