免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5832 | 回复: 7
打印 上一主题 下一主题

[文本处理] 如何用一个简洁方式同时判断命令本身是否执行成功以及命令执行结果 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 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命令本身是否执行成功。

论坛徽章:
11
CU十二周年纪念徽章
日期:2013-10-24 15:41:342015年辞旧岁徽章
日期:2015-03-03 16:54:15丑牛
日期:2015-01-14 10:36:40技术图书徽章
日期:2015-01-12 15:46:11白羊座
日期:2014-11-14 09:35:36狮子座
日期:2014-10-30 13:18:49巳蛇
日期:2014-10-11 12:52:08子鼠
日期:2014-09-28 14:11:06双鱼座
日期:2014-04-22 13:05:48午马
日期:2014-02-11 17:58:002015年迎新春徽章
日期:2015-03-04 09:55:28
2 [报告]
发表于 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是否执行成功,再做一次变量判断是否存在。

论坛徽章:
11
CU十二周年纪念徽章
日期:2013-10-24 15:41:342015年辞旧岁徽章
日期:2015-03-03 16:54:15丑牛
日期:2015-01-14 10:36:40技术图书徽章
日期:2015-01-12 15:46:11白羊座
日期:2014-11-14 09:35:36狮子座
日期:2014-10-30 13:18:49巳蛇
日期:2014-10-11 12:52:08子鼠
日期:2014-09-28 14:11:06双鱼座
日期:2014-04-22 13:05:48午马
日期:2014-02-11 17:58:002015年迎新春徽章
日期:2015-03-04 09:55:28
3 [报告]
发表于 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
复制代码

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
4 [报告]
发表于 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

论坛徽章:
0
5 [报告]
发表于 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"

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2014-10-22 10:50 |只看该作者
sed是个外部命令,可能遇到文件不存在,没安装(比如用最小方式安装的服务器,很多命令没有)等等情况,这样子,命令就不能执行成功。
但是,每个命令都去检测一把,真心麻烦。

论坛徽章:
0
7 [报告]
发表于 2014-10-22 10:55 |只看该作者
回复 6# wayflying


    不管sed存不存在,直接安装sed的包不就好了。{:2_167:}

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
8 [报告]
发表于 2014-10-22 11:42 |只看该作者
回复 6# wayflying
那就用基本命令组合不就可以了
i=7
head -n $i file | tail -1


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP