标准输出的思考

 

test3.sh

bacth_date=$1
echo "bacth_date:$1"
echo "std_out:$?"
echo "${bacth_date}"|grep "20[0-9][0-9][0-9][0-9][0-9][0-9]"
echo "std_out:$?"
if [ $? -ne 0 ]
then
    echo "[ `date +'%Y-%M-%d'` ]" "[ERROR]" "BATCH_DATE:${bacth_date} is invalid date format ."
   echo "1"
   exit 1
fi

 

 

[centos@s202 ~]$ sh test3.sh 20191001
bacth_date:20191001
std_out:0
20191001
std_out:0

[centos@s202 ~]$ sh test3.sh 2019xxxx bacth_date:2019xxxx std_out:0 std_out:1

为什么第二次标准输出 1 之后 就不往下运行了

if [ $? -ne 0 ]

why?

我们继续研究:我们在第二个echo "std_out:$?"再加一个echo "std_out:$?" 去看标准输出$?变成了什么
bacth_date=$1
echo "bacth_date:$1"
echo "std_out:$?"
echo "${bacth_date}"|grep "20[0-9][0-9][0-9][0-9][0-9][0-9]"
echo "std_out:$?"
echo "std_out:$?"
if [ $? -ne 0 ]
then
    echo "[ `date +'%Y-%M-%d'` ]" "[ERROR]" "BATCH_DATE:${bacth_date} is invalid date format ."
   echo "1"
   exit 1
fi

 

[centos@s202 ~]$ sh test3.sh 2019xxxx
bacth_date:2019xxxx
std_out:0
std_out:1
std_out:0

结论: 运行第二个echo "std_out:$?" 又把标准输出 $?重新置值成了 0

所以 if [ $? -ne 0 ] 不成立 就不运行下面的了

 get :echo命令的标准输出是 0

 

bacth_date=$1
echo "bacth_date:$1"
echo "std_out:$?"
echo "${bacth_date}"|grep "20[0-9][0-9][0-9][0-9][0-9][0-9]"
if [ $? -ne 0 ]
then
    echo "[ `date +'%Y-%M-%d'` ]" "[ERROR]" "BATCH_DATE:${bacth_date} is invalid date format ."
   echo "1"
   exit 1
fi

 

[centos@s202 ~]$ sh test3.sh 2019xxxx
bacth_date:2019xxxx
std_out:0
[ 2019-12-23 ] [ERROR] BATCH_DATE:2019xxxx is invalid date format .
1

OK:全部运行

 

 

代码来源:

对调度脚本日期参数检查(其实这个检查只能对非纯数字进行检查,对过长度比如20190101010101010101就无效):

bacth_date=$1
echo "bacth_date:$1"
echo "std_out:$?"
echo "${bacth_date}"|grep "20[0-9][0-9][0-1][0-9][0-3][0-9]" >/dev/null
if [ $? -ne 0 ]
then
    echo "[ `date +'%Y-%M-%d'` ]" "[ERROR]" "BATCH_DATE:${bacth_date} is invalid date format ."
   echo "1"
   exit 1
fi

 

 

[centos@s202 ~]$ sh test3.sh 2019xxxx
bacth_date:2019xxxx
std_out:0
[ 2019-16-23 ] [ERROR] BATCH_DATE:2019xxxx is invalid date format .
1

 

[centos@s202 ~]$ sh test3.sh 20190101
bacth_date:20190101
std_out:0

 

 

 

 




 

转载于:https://www.cnblogs.com/wqbin/p/10909547.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值