在for循环变量名中出现麻烦

时间:2016-03-22 01:06:16

标签: bash loops

我想在debian中创建一个shell脚本:

  1. 为每个数字创建一个目录,从1到12 = d1,d2,d3,...,d12。
  2. 在每个目录中创建相同的文本文件
  3. 更改文本文件中的字符串
  4. 使用wget下载文件
  5. (创建d1;复制links.txt并重命名为d1.txt;将每个数字从0更改为99为1.然后对于d2,将其重命名为d2.txt,将每个数字更改为2 ...相同12)。

    #!/bin/bash
    START=1
    END=12
    for ((i=START; i<=END; i++))
    do
        mkdir d'$i'
        cp /home/user/script/links.txt /home/user/script/d'$i'.txt
        grep -rli '([0-99])' /home/user/script/d'$i'.txt | xargs -i@ sed -i 's/[0-99]/'$i'/g' @
        wget -i /home/user/script/d'$i'/d'$i'.txt
    done
    

    我需要更改什么才能使其正常工作?

1 个答案:

答案 0 :(得分:1)

单引号可防止字符串中的变量替换。你应该使用双引号。 [0-99]也没有按你的想法行事。角色类一次只匹配一个字符,因此您只需要在那里查找字符0-9。我认为这应该做你想要的:

#!/bin/bash
START=1
END=12
for ((i=START; i<=END; i++))
do
    mkdir d"$i"
    sed -r 's/([0-9]|[1-9][0-9])/'$i'/g' /home/user/script/links.txt > "/home/user/script/d$i/d$i.txt"
    wget -i "/home/user/script/d$i/d$i.txt"
done