Unix Shell for循环基于一个参数

时间:2012-08-08 16:22:27

标签: shell unix iterator

  • OS = Ubuntu
  • Filename = 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

我无法弄清楚什么是错的......

3 个答案:

答案 0 :(得分:3)

你的shebang是错的 - 你正在使用bash功能(双重parens中的“C风格”for循环),但你指定了/bin/sh。将其更改为/bin/bash

你也可以改变你的for循环,这样它就不会使用bash的特殊功能(参见其他答案)。这有点便携,因为并非所有类Unix系统都有/bin/bash(但几乎所有系统都有/bin/sh)。但是,bash也非常广泛(例如,它是大多数Linux发行版中的标准shell)。

答案 1 :(得分:0)

尝试:

LIMIT=$1

for a in $(seq 1 $LIMIT)
do
  mkdir -p zips
  touch zips/$a
done

答案 2 :(得分:0)

我可能会这样做......

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

有一些特定于bash的方法有点短,但这适用于任何Posix shell。