您如何在shell脚本中的if / else语句中正确嵌套for循环?

时间:2018-07-02 21:03:14

标签: sh

我在Linux中具有以下代码:

#!/bin/sh
echo "Enter a number:"; read n;
if (($# != 0)) 
    for ((i=1; i< $n+1; i++)) 
    do
      echo $i
    done
else 
    for ((i=1; i<21; i++)) 
    do
      echo $i
    done
fi

您可以说,我正在尝试将值从1打印到n。如果未提供用户输入,我将自动从1到20打印。运行此脚本时,它说我在意外令牌else附近遇到语法错误。有人可以帮忙吗,我不知道我在想什么。

3 个答案:

答案 0 :(得分:2)

您缺少then。另外,正如其他人提到的那样,您的实现是Bashism,因此请注意第一行的更改。

#!/bin/bash
echo "Enter a number:"; read n;
if (($# != 0)) 
then
    for ((i=1; i< $n+1; i++)) 
    do
      echo $i
    done
else 
    for ((i=1; i<21; i++)) 
    do
      echo $i
    done
fi

答案 1 :(得分:2)

实际上可与所有/bin/sh实现一起使用的代码版本可能如下:

#!/bin/sh
echo "Enter a number:"; read n;

if [ "$#" -ne 0 ]; then
  i=0; while [ "$i" -lt $(( n + 1 )) ]; do
    echo "$i"
    i=$((i + 1))
  done
else
  i=0; while [ "$i" -lt 21 ]; do
    echo "$i"
    i=$((i + 1))
  done
fi

请注意then结构有效所必需的if;从if (( ... ))if [ ... ]的变化;并将for ((;;;))更改为while循环以进行计数。

答案 2 :(得分:0)

您缺少then

if (($# != 0)) ; then