猿问

shell脚本的问题

有没有shell高手帮忙看看?forFILEinapache-maven-*.tar.gz是什么意思?EXISTS=$(awss3lss3://lang-jvm/${NAME}.tar.gz--profilelang-jvm)这个又是什么?
#!/usr/bin/envbash
#failhard
set-opipefail
#failharder
set-eu
VENDOR_DIR=$(cd$(dirname$0);pwd)
TMPDIR=$(mktemp-d-tmaven-build)
echo"--->Downloadingsources..."
cd$TMPDIR
forMAVENin$(cat${VENDOR_DIR}/sources.txt)
do
echo"$MAVEN..."
curl-O--silent--location$MAVEN
done
forFILEinapache-maven-*.tar.gz
do
BUILD_DIR=build
NAME=$(echo$FILE|sed-e's/.*\(maven-[0-9]*.[0-9]*.[0-9]*\).*/\1/g')
TARBALL=${NAME}.tar.gz
EXISTS=$(awss3lss3://lang-jvm/${NAME}.tar.gz--profilelang-jvm)
if[-z"$EXISTS"];then
echo"--->Building$NAME..."
mkdir-p$BUILD_DIR/.m2/repository
echo-n"Unpacking..."
tarxzvf$FILE-C$BUILD_DIR&>/dev/null
mv${BUILD_DIR}/apache-maven*${BUILD_DIR}/.maven
echo"done"
echo-n"Primingrepositorycache..."
cd$BUILD_DIR
cp$VENDOR_DIR/sample_pom.xmlpom.xml
.maven/bin/mvn-B-Duser.home=$BUILD_DIRcleanpackageverifyinstall:help&>/dev/null
cd-&>/dev/null
echo"done"
echo-n"Packaging..."
tar-czvf${TARBALL}-C${BUILD_DIR}.maven.m2&>/dev/null
echo"done"
echo-n"Uploading..."
awss3cp${TARBALL}s3://lang-jvm--profilelang-jvm--aclpublic-read&>/dev/null
echo"done"
rm-rf$BUILD_DIR
else
echo"--->Skipping$NAME.Packagealreadyexists."
fi
done
#todogetridofthisandjustpipecurltotar
rmapache-maven-*
哆啦的时光机
浏览 420回答 2
2回答

慕婉清6462132

第一个是Bash通配符。在Bash中可以用通配符来匹配文件。表示匹配任意字符,所以apache-maven-.tar.gz表示(当前目录下)以apache-maven-开头,以.tar.gz结尾的所有文件。你可以试一下echoapache-maven-*.tar.gz。把这个通配符放在for循环中,每次循环的时候会把这个匹配列表中的一项赋值给FILE。第二个是CommandSubstitution。$(command)表示command命令的输出。这里执行的是aws命令。首先处理文件名,将文件名中的3组数字只保留第一组,然后用aws命令查看s3服务器上是否有这个文件,如果有这个文件的话,aws命令会有输出,EXISTS非空,如果没有这个文件,aws命令没有输出,EXISTS为空,通过-z参数判断EXISTS变量是否为空,如果为空,则制作出这个文件,并上传到服务器上。

HUWWW

第二个不知道什么意思,第一个就是一个简单的枚举循环:forFILEin/usr/lib/liba*doecho$FILEdone你把上面的代码写到脚本里面自己试试,再和下面这条命令对比一下:ls/usr/lib/liba*
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答