set -e导致脚本退出的情况

本来不加set什么事儿都没有(已测试结果无误),加上set -e后就出来问题了:

read_len计算结果为94

set -e

正常情况下

set -e

read_len=`zcat demo.fq.gz | head -n 2 | tail -1 | wc -L`
# || echo "read len"

echo "---"
echo $read_len

tri_len=`expr $read_len - 98` 
#|| echo "tri_len is 0."

echo "~~~~~~"
echo $tri_len

if [ $tri_len -lt 0 ]; then tri_len=0 && echo "--------"; fi

echo $tri_len

结果是:

---
94
~~~~~~
-4
--------
0

expr表达式计算中98改为94(tri_len值为0)

set -e

read_len=`zcat demo.fq.gz | head -n 2 | tail -1 | wc -L`
# || echo "read len"

echo "---"
echo $read_len

tri_len=`expr $read_len - 94` 
#|| echo "tri_len is 0."

echo "~~~~~~"
echo $tri_len

if [ $tri_len -lt 0 ]; then tri_len=0 && echo "--------"; fi

echo $tri_len

结果是:

---
94

结论:如果设置set -e 则遇到解析后值为零的变量会退出脚本(但tri_len值确是有的,为0),可以通过||符号来改变**,或者干脆不要加set -e了。

set -e

read_len=`zcat 200901_R1100600190007_E100005555_L001_HUMM200026313BCDANGC1AA-4556-cd3_1.fq.gz | head -n 2 | tail -1 | wc -L`
# || echo "read len"

echo "---"
echo $read_len

tri_len=`expr $read_len - 94` || echo "tri_len is $tri_len."

echo "~~~~~~"
echo $tri_len

if [ $tri_len -lt 0 ]; then tri_len=0 && echo "--------"; fi

echo $tri_len

结果是:

---
94
tri_len is 0.
~~~~~~
0
0

参考:linux中的set命令: "set -e" 与 "set -o pipefail"

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 教程总纲:http://www.runoob.com/python/python-tutorial.html 进阶...
    健康哥哥阅读 2,098评论 1 3
  • .bat脚本基本命令语法 目录 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和 :: 2...
    庆庆庆庆庆阅读 8,293评论 1 19
  • 个人笔记,方便自己查阅使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik阅读 67,815评论 0 5
  • 精通Python自动化脚本-运维人员宝典完整目录: 第一章 Python脚本概述第二章 Python脚本调试和性能...
    AlanHou阅读 5,086评论 0 10
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,599评论 16 22