在for循环中嵌套case语句

时间:2018-09-27 13:11:20

标签: bash

我正在尝试按照以下说明创建一个目录,其中包含四个子目录,每个子目录中都有五个新的空文件:

  
      
  1. 使用第一个位置参数的名称创建目录(选择所需的名称)。

  2.   
  3. 使用for循环执行以下操作:

         

    2.1。在目录中,创建具有以下名称的四个子目录:租金,公用事业,杂货等。

         

    2.2。在for循环中,用例语句确定循环中当前正在处理哪个子目录。您将需要4   案例。

         

    2.3。在每种情况下,请使用for循环通过touch命令创建5个空文件。每个子目录中都必须有5个文件。

  4.   

到目前为止,我一次创建了一个目录和几个子目录,每个子目录都有一个特定的名称,如您在我的代码中所见:

mkdir $1
for folder in $1; do 
mkdir -p $1/{Rent,Utilities,Groceries,Other}
done

但是,我陷入了以下步骤(2.2。),而且我不知道如何从此处继续。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

在我读到它时,这就是2.1和2.2的要求:

for folder in rent utilities groceries other; do 
    mkdir "$1/$folder"

    case $folder in
        rent)
            ...
            ;;
        utilities)
            ...
            ;;
        groceries)
            ...
            ;;
        other)
            ...
            ;;
    esac
done

我将这些案例留空供您填写。

对于它的价值,我永远不会以这种方式编写脚本。在case循环中包含for语句是一种反模式。循环确实没有任何价值。如果这不是一项任务,我会用不同的方式编码:

mkdir "$1"

# Populate rent/ directory.
mkdir "$1"/rent
touch "$1"/rent/...

# Populate utilities/ directory.
mkdir "$1"/utilities
touch "$1"/utilities/...

# Populate groceries/ directory.
mkdir "$1"/groceries
touch "$1"/groceries/...

# Populate other/ directory.
mkdir "$1"/other
touch "$1"/other/...