【问题标题】:bin/bash nested loop does not workbin/bash 嵌套循环不起作用
【发布时间】:2018-02-26 10:14:29
【问题描述】:

我目前在一家托管公司实习。他们要求我编写一个 bin/bash 脚本来帮助自动化检查用户域和 .pointers 的过程。并使用“whois”命令验证域/指针是否在我们的服务器上。

我是 bin/bash 脚本的新手,但有人告诉我应该检查嵌套循环。因此,为了测试我的脚本,我制作了与服务器上类似的路径。 /usr/local/directadmin/data/users/#USER#/domains.listusers/#USER#/domains/#DOMAIN NAME OF USER#.pointers

#part 1 
for i in $(cat /home/MrC/Desktop/Users)  #<the list of users i need to check)
do
    if [ -f "/usr/local/directadmin/data/users/$i/domainlist.txt" ]
    then
        echo "/usr/local/directadmin/data/users/$i" >> /home/MrC/Desktop/output.tx$
        cat "/usr/local/directadmin/data/users/$i/domainlist.txt" >> /home/carlos/Des$
    fi

    #part 2 
    for s in $(cat /home/mrC/Desktop/output.txt)
    do
        if  [ -f "/usr/local/directadmin/data/users/$i/domains/$s.pointers" ]
        then
            echo "/usr/local/directadmin/data/users/$i" >> /home/MrC/Desktop/pointers.$
            cat "usr/local/directadmin/data/users/$i/domains/$s.pointers" >> /home/MrC$
        fi
    done

done

所以第 1 部分有效,这是下面的 output.txt

    /usr/local/directadmin/data/users/testuser
    lolla.nl
    blaat2.nl
    blaat3.nl
    google2.nl
    /usr/local/directadmin/data/users/testusers
    blaat.nl
    google.com
    test.nl
    pietje.nl

但我似乎无法在第二部分工作(没有指针文件)。我对脚本第二部分的目标是读取输出(域名)并将其放入@/$i/domains/$s.pointers

我是论坛的新手,希望我能以适当的方式提出我的问题。如果有人能给我提示/提示我应该看哪个方向,那将不胜感激。

【问题讨论】:

  • 出于好奇,你在哪里学的for in in $(cat filename)
  • 工作人员 :)
  • 别再听他们的了...while read -r i; do #stuff; done &lt; /home/MrC/Desktop/Users(调整IFS或使用-d选项指定分隔符为read)。
  • 干杯,如前所述,这并不是读取文件的最佳方式,因为它对许多“错误”开放,因为它允许 shell 解释该行。 WRT你的问题我并不完全清楚你的意图。您能否提供示例输入和输出数据?
  • 输入数据只是一个带有用户示例列表的 .txt 文件: user1 user2 user3 output.txt 是上面写的我的意图只是简单地检查给定用户的列表。然后在下面写下他们的域和.pointers。当然,所有用户都有自己的目录。用户:mrc。 domain=mr-c.com 所以.pointer 文本文件被调用:mr-c.pointers

标签: linux bash shell command-line


【解决方案1】:
For
   Do
     if
      then
for
   do
    COMMAND A
    COMMAND B
    COMMAND C

   done
   fi
done

【讨论】:

  • 通过在代码中添加一些解释,让您的答案更有可能。
  • 这是一个正确的嵌套循环的格式,我认为它是不言自明的。它不起作用,因为我的 fi 位置错误
【解决方案2】:

while read -r i; do #stuff; done &lt; /home/MrC/Desktop/Users(调整IFS 或使用-d 选项将分隔符指定为read)。 ——大卫·C·兰金

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多