有没有shell高手帮忙看看?forFILEinapache-maven-*.tar.gz是什么意思?EXISTS=$(awss3lss3://lang-jvm/${NAME}.tar.gz--profilelang-jvm)这个又是什么?#!/usr/bin/envbash#failhardset-opipefail#failharderset-euVENDOR_DIR=$(cd$(dirname$0);pwd)TMPDIR=$(mktemp-d-tmaven-build)echo"--->Downloadingsources..."cd$TMPDIRforMAVENin$(cat${VENDOR_DIR}/sources.txt)doecho"$MAVEN..."curl-O--silent--location$MAVENdoneforFILEinapache-maven-*.tar.gzdoBUILD_DIR=buildNAME=$(echo$FILE|sed-e's/.*\(maven-[0-9]*.[0-9]*.[0-9]*\).*/\1/g')TARBALL=${NAME}.tar.gzEXISTS=$(awss3lss3://lang-jvm/${NAME}.tar.gz--profilelang-jvm)if[-z"$EXISTS"];thenecho"--->Building$NAME..."mkdir-p$BUILD_DIR/.m2/repositoryecho-n"Unpacking..."tarxzvf$FILE-C$BUILD_DIR&>/dev/nullmv${BUILD_DIR}/apache-maven*${BUILD_DIR}/.mavenecho"done"echo-n"Primingrepositorycache..."cd$BUILD_DIRcp$VENDOR_DIR/sample_pom.xmlpom.xml.maven/bin/mvn-B-Duser.home=$BUILD_DIRcleanpackageverifyinstall:help&>/dev/nullcd-&>/dev/nullecho"done"echo-n"Packaging..."tar-czvf${TARBALL}-C${BUILD_DIR}.maven.m2&>/dev/nullecho"done"echo-n"Uploading..."awss3cp${TARBALL}s3://lang-jvm--profilelang-jvm--aclpublic-read&>/dev/nullecho"done"rm-rf$BUILD_DIRelseecho"--->Skipping$NAME.Packagealreadyexists."fidone#todogetridofthisandjustpipecurltotarrmapache-maven-*
2 回答
慕婉清6462132
TA贡献1804条经验 获得超2个赞
第一个是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
TA贡献1874条经验 获得超12个赞
第二个不知道什么意思,第一个就是一个简单的枚举循环:forFILEin/usr/lib/liba*doecho$FILEdone你把上面的代码写到脚本里面自己试试,再和下面这条命令对比一下:ls/usr/lib/liba*
添加回答
举报
0/150
提交
取消
