1
  • 操作系统 = Ubuntu
  • 文件名 = generate_zips.sh

我正在尝试创建一堆文件(基于参数的数字)。但是它不起作用。

#!/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

你的 shebang 是错误的——你正在使用一个bash特性(双括号中的“C 风格”for 循环),但你指定了/bin/sh. 将其更改为/bin/bash.

当然,您也可以更改 for 循环,使其不使用bash's 的特殊功能(请参阅其他答案)。这有点更便携,因为并非所有类 Unix 系统都有/bin/bash(但几乎所有系统都有/bin/sh)。然而,bash它也相当广泛(例如,它是大多数 Linux 发行版中的标准 shell)。

于 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 shell。

于 2012-08-08T16:28:26.353 回答