gpt4 book ai didi

linux - shell 脚本 : when to test on the last command?

转载 作者:行者123 更新时间:2023-12-03 09:57:54 27 4
gpt4 key购买 nike

我有这个导入 mongo 数据库的小 bash 脚本,通过运行 java 程序对其进行一些更改,最后导出修改后的数据库:

#!/bin/bash

credentials="-u xx -p yy"

#import database
ssh user@$viaDbHost <<EOF
scp user@$prodDumpHost:$prodDumpPath $viaDbWhitedumpTmpDir
mongorestore --drop --host localhost --db whitedb $credentials --gzip --archive=$viaDbWhitedumpTmpDir/db.gz
rm $viaDbWhitedumpTmpDir/db.gz
EOF

#run a java program
javacp=/appli/java/lib/*
java -cp "$javacp" xx.yy.zz.MyApplication

#export database
ssh user@$viaDbHost "mongodump --host localhost --db darkDb $credentials --gzip --archive=$darkdumpPath"
我想在发生错误时停止我的脚本并显示一条消息,所以我将我的 shell 更改为这个版本:
#!/bin/bash

credentials="-u xx -p yy"

#import database
ssh user@$viaDbHost <<EOF
scp user@$prodDumpHost:$prodDumpPath $viaDbWhitedumpTmpDir

if [ $? != 0 ]; then
echo "@@@@@ ------- xxxxx"
exit 1
fi


mongorestore --drop --host localhost --db whitedb $credentials --gzip --archive=$viaDbWhitedumpTmpDir/db.gz

if [ $? != 0 ]; then
echo "@@@@@ ------- yyyy"
exit 1
fi

rm $viaDbWhitedumpTmpDir/db.gz

if [ $? != 0 ]; then
echo "@@@@@ ------- zzzz"
exit 1
fi
EOF

#run a java program
javacp=/appli/java/lib/*
java -cp "$javacp" xx.yy.zz.MyApplication

if [ $? != 0 ]; then
echo "@@@@@ ------- blablabla"
exit 1
fi

#export database
ssh nf2@$viaDbHost "mongodump --host localhost --db darkDb $credentials --gzip --archive=$darkdumpPath"

if [ $? != 0 ]; then
echo "@@@@@ ------- blablabla 2"
exit 1
fi

exit 0
由于这些测试,我觉得我的脚本变得丑陋并且有更多行!
有没有办法增强这种写作?
或者只检测要测试的行的方法?

最佳答案

首先,确保错误消息进入 stderr。你可以试试:

!/bin/bash

credentials='-u xx -p yy'

die() { printf "%s${1:+\n}" "$*"; exit 1; } >&2
try() { "$@" || die "FAILED: $*"; }

#import database
ssh user@$viaDbHost <<EOF || exit
scp user@$prodDumpHost:$prodDumpPath $viaDbWhitedumpTmpDir || { echo error >&2; exit 1; }

mongorestore --drop --host localhost --db whitedb $credentials --gzip --archive=$viaDbWhitedumpTmpDir/db.gz || { echo error >&2; exit 1; }

rm $viaDbWhitedumpTmpDir/db.gz || exit 1; # rm emits its own error message

EOF

#run a java program
javacp=/appli/java/lib/*
try java -cp "$javacp" xx.yy.zz.MyApplication

#export database
try ssh nf2@$viaDbHost "mongodump --host localhost --db darkDb $credentials --gzip --archive=$darkdumpPath"

exit 0
但老实说,对于这个脚本,您可能甚至不需要费心发出任何错误消息。就做 cmd || exit 1无处不在,让每个命令发出自己的错误。

关于linux - shell 脚本 : when to test on the last command?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62719127/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com