Das Erstellen von Dokumenten funktioniert nicht

341
Bercovici Adrian

Hallo, ich versuche, Ordner zu generieren und sie anhand von Eingabeparametern zu benennen. Was ist in diesem Skript falsch?

root=$1 clcount=$2 clstep=$3 delay=$4 dstep=$5  echo $root echo $clcount echo $clstep echo $delay echo $dstep  echo creating docs  for dindex in {$delay..100..$dlstep} do  for cindex in {$clcount..1..$clstep} do fname=$cindex_$dindex rm -rf $fname mkdir $cindex_$dindex  done done  echo All finished  

Das Skript erstellt keine Ordner ... und verkettet die Werte von $cindexund dindexin einer Zeichenfolge nicht.

0
Die Klammererweiterung funktioniert nur mit Literalwerten, nicht mit Variablen. Verwenden Sie stattdessen `seq`. choroba vor 6 Jahren 0

1 Antwort auf die Frage

2
Kamil Maciorowski
  1. Entscheide dich, ob es dstepoder ist dlstep.
  2. Aus dieser Bash-Falle :

    for i in

    Der BashParser führt BraceExpansion vor anderen Erweiterungen oder Ersetzungen durch. Der Klammererweiterungscode sieht also das Literal $n, das nicht numerisch ist, und erweitert daher die geschweiften Klammern nicht in eine Liste von Zahlen. Dies macht es nahezu unmöglich, Klammererweiterungen zu verwenden, um Listen zu erstellen, deren Größe nur zur Laufzeit bekannt ist.

    Tun Sie dies stattdessen:

    for ((i=1; i<=n; i++)); do ... done 

    Oder verwenden seq.

  3. Ihr Skript liest sich $cindex_als Variable mit dem Namen cindex_. Sie möchten $_.

  4. Variablen richtig zitieren. Es ist hier vielleicht nicht entscheidend, aber im Allgemeinen. Z.B:

    mkdir "$_$dindex" 
  5. Es gibt kein Shebang. Es wäre egal, wenn Sie das Drehbuch besorgen würden; aber wenn Sie es ausführen, sollte es ein Shebang wie #!/bin/bashoder geben #!/usr/bin/env bash. Wegen $1, $2usw. ich denke, das Skript ausgeführt werden soll.

Aber in meinem Fall ist "n" ein Argument, das von der Eingabe erhalten wurde. Also brauche ich nicht "i <= $ n"? Bercovici Adrian vor 6 Jahren 0
@BercoviciAdrian Diese Syntax von `for` benötigt kein` $ `. Probier es einfach. Kamil Maciorowski vor 6 Jahren 0