1
  • OS = Ubuntu
  • ファイル名=generate_zips.sh

たくさんのファイルを作成しようとしています(数はarugmentに基づいています)。ただし、動作していません。

#!/bin/sh
LIMIT=$1
for ((a=1; a <= LIMIT; a++)) 
do
    mkdir zips
    cd zips
    touch $a
done

しかし、これを返す

esauer@ubuntu:~/repo/filecheck/src/plugins/archive$ ./generate_zips.sh 10
./generate_zips.sh: 4: ./generate_zips.sh: Syntax error: Bad for loop variable

何が悪いのかわからない...

4

3 に答える 3

3

シバンが間違っています。bash機能(ダブルパレンの「Cスタイル」のforループ)を使用していますが、を指定し/bin/shました。これをに変更し/bin/bashます。

もちろん、の特別な機能を使用しないようにforループを変更することもできますbash(他の回答を参照してください)。すべてのUnixライクなシステムが持っているわけではないので、これはやや移植性があります/bin/bash(しかし、ほとんどすべてが持っています/bin/sh)。ただし、bashこれもかなり普及しています(たとえば、ほとんどのLinuxディストリビューションの標準シェルです)。

于 2012-08-08T16:26:32.570 に答える
0

試す:

LIMIT=$1

for a in $(seq 1 $LIMIT)
do
  mkdir -p zips
  touch zips/$a
done
于 2012-08-08T16:24:59.847 に答える
0

私はこのようなことをするかもしれません...

#!/bin/sh
mkdir zips
cd zips
a=1; while [ $a -le $1 ]; do
  touch $a
  a=$(($a + 1))
done

少し短いbash固有の方法がありますが、これはすべてのPosixシェルで機能します。

于 2012-08-08T16:28:26.353 に答える