首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建bash脚本以更新/下载github工具

创建bash脚本以更新/下载github工具
EN

Stack Overflow用户
提问于 2018-10-23 22:12:37
回答 1查看 128关注 0票数 0

我不能让下面的脚本像这样工作:有一个名为githubrepos.txt的文件,其中包含urls,例如"https://github.com/GDSSecurity/Windows-Exploit-Suggester“。脚本检查该文件夹是否已经存在于给定url的/opt/ last部分中。

脚本在应该检查文件夹是否存在的地方中断。它总是转到else部分,即使它存在。我认为这与if -d $localdir部分有关。可能使用$localdir变量。我花了几个小时在它上面,却不能把它修好。想要一些帮助,这是我写的第一个脚本。

代码语言:javascript
复制
#!/bin/bash    
#Start downloading github repos
for repos in $(cat githubrepos.txt)
do
  localrepodir="/opt/${repos##*/}"
  echo $localrepodir
  if [ -d $localrepodir ];
    then
    echo ${repos##*/}
    echo "Already exists, updating tool with git pull";
    cd $(echo $localrepodir | tr -d '\r');
    git pull
    else
    echo ${repos##*/}
    echo "Tool needs to be cloned";
    git clone $repos
  fi
done
EN

回答 1

Stack Overflow用户

发布于 2018-10-24 20:44:48

这是对你所面临的各种问题的一般回答。我希望它能在你的特定案例中帮助你。

来自@Charles Duffy的建议是有针对性的;有许多bash陷阱对于初学者来说很容易陷入,但也很容易避免,例如,通过阅读链接文章中的建议。你清楚地表明你是一个初学者,而且你似乎非常愿意学习,所以我强烈建议你阅读@Charles Duffy提供的链接,并遵循建议。

对于初学者,切换到为您的输入循环使用 while read LINE; do ... done < FILE structure。它远远优于for LINE in $(COMMAND)。我有25+多年陷入所有的bash陷阱来支持我这一点。

其次,减少你的问题。去掉git命令和目录操作,比如cd-d测试。你的问题不在于这些东西,而在于你的输入。您需要一个脚本来显示您的输入到底发生了什么。这不仅更接近于作为SO问题基础的MCVE,还可能帮助您自己解决问题。下面是一个例子:

代码语言:javascript
复制
#!/bin/bash    

while read LINEIN
do
  echo "XXX ${LINEIN} OOO"
done < inputfile

请注意,这将立即揭示您的回车问题。例如,我使用以下命令创建了一个输入文件:

代码语言:javascript
复制
echo 'one'                     > inputfile
echo 'two two'                >> inputfile
echo -e 'three three three\r' >> inputfile 
echo 'four four four four'    >> inputfile

使用上面的脚本,它会产生以下结果:

代码语言:javascript
复制
XXX one OOO
XXX two two OOO
 OOOthree three three
XXX four four four four OOO

这清楚地显示了回车。因此,我可以通过脚本修改:

代码语言:javascript
复制
while read LINEIN
do
  LINETRIM=`echo "$LINEIN" | tr -d '\r'`
  echo "XXX ${LINETRIM} OOO"
done < inputfile

并获取:

代码语言:javascript
复制
XXX one OOO
XXX two two OOO
XXX three three three OOO
XXX four four four four OOO

像这样的最小工作脚本也可以作为您正在编写的任何实用程序的基础,因为您可以逐步添加逻辑,在此过程中测试每个更改,直到您返回到查找目录并发出git命令的脚本。

同样,这是编写bash脚本的一般建议,有助于将问题减少到本质,以便进行更精确的故障排除。再说一次,这只是个开始。阅读初学者的BashFAQBashPitfalls指南,以及我最喜欢的bash reference Bash Guide for Beginners

HTH。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52951230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档