【问题标题】:Bash Script LoopBash 脚本循环
【发布时间】:2014-11-04 22:57:55
【问题描述】:

所以我正在尝试制作一个 bash 脚本循环,该循环采用他们想要的用户文件名和他们想要的文件数并创建空文件。我制作了脚本,但我不断收到错误“./dog.sh: line 6: 0]: No such file or directory”。我是 bash 脚本的新手,不知道我做错了什么。任何帮助都会非常感谢!

#!/bin/bash
echo "what file name do you want?"; read filename
echo "how many files do you want"; read filenumber

x=$filenumber
if [$x < 0] 
then
touch $fiename$filenumber
x=$((x--))

fi

【问题讨论】:

  • 考虑先通过shellcheck 运行您的脚本以清除基本问题,然后询问其余问题。
  • x=$((x--)) 真的很有趣;)

标签: bash shell loops unix


【解决方案1】:
for x in $(seq "$filenumber"); do touch "$filename$x"; done

seq $filenumber 生成从 1 到 $filenumber 的数字列表。 for 循环将x 依次分配给这些数字中的每一个。 touch 命令针对x 的每个值运行。

另类

bash中,如果我们可以在命令行中输入正确的文件号,同样的事情可以在没有for循环的情况下完成:

$ touch myfile{1..7}
$ ls
myfile1  myfile2  myfile3  myfile4  myfile5  myfile6  myfile7

{1..7} 被称为“大括号扩展”。 Bash 会将表达式 myfile{1..7} 扩展为我们想要的七个文件的列表。

大括号扩展确实有一个限制。它不支持 shell 变量。所以,touch myfile{1..$filenumber} 不起作用。我们必须直接在大括号中输入正确的数字。

【讨论】:

    【解决方案2】:

    也许这是一个错字:$fiename 而不是 $filename

    另外,你可能想要这样的循环:

    x=1
    while [ $x -le $filenumber ]; do
        touch $filename$x
        let x=x+1
    done
    

    【讨论】:

    • 这解决了我运行它的问题,但我得到的只是一个带有数字的文件。前任。狗和 7 = 狗 7。我需要它来制作 dog1、dog2、dog3、... dog7。
    • 谢谢!我知道我现在的问题在哪里。感谢所有的帮助。
    【解决方案3】:
    #!/bin/bash
    
    echo "what file name do you want?"; read filename
    echo "how many files do you want"; read filenumber
    
    x=$filenumber
    
    while [ $x -gt 0 ]; do
    
        touch $filename$x   
        x=$(( $x - 1))
    done
    

    【讨论】:

    • 尽量保持对您的示例的真实性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多