我需要做的是创建一个脚本,该脚本创建 15 个目录(命名为 1 到 15),并且在每个目录中我必须为其分配一个字母(按字母顺序排列)。
所以我运行脚本后应该是这样的:
目录1包含字母A;目录 2 包含 B 等等,直到它到达数字 15 并且其中包含字母 O.. 之后它应该停止。
答案1
不是 bash,而是 awk,还有一句俏皮话。
echo {A..O} | xargs -n 1 | awk '{system("mkdir "NR" && touch "NR"/"$1)}'
答案2
letters=(0 A B C D E F G H I J K L M N O)
i=1
while [ ${i} -le 15 ]
do
mkdir ${i}
touch ${i}/${letters[${i}]}
(( i++ ))
done
说明:letters是一个数组,其中包含与数字对应的字母。数组中的第一个条目位于索引 0 处。由于您的数字从 1 开始,所以我放置了一个填充字符。不管是什么都没关系
当i
在 1 到 15 之间更改值时,它将执行目录名称的mkdir
命令。i
然后在每个目录中,它将创建一个文件,其名称将是数组中相应的letters
字母
答案3
这就是我创建包含具有相应字母的文件的目录的方法:
#!/bin/bash
declare -r LETTERS=(A B C D E F G H I J K L M N O) # Read Only Letters Array
declare -i COUNTER=0 # Integer Variable "COUNTER"
while [ $COUNTER -lt 15 ]; do # While Counter Less Than 15 Do...
COUNTER+=1 # Add 1 to counter
mkdir $COUNTER # Make the directory
echo > $COUNTER/${LETTERS[$COUNTER-1]} # Create the file
done
我使用 echo 的原因是我过去在触摸方面遇到过问题(而 echo 做得很好)
我最初本想使用 switch case(我太脱离实际了),但我使用 MelBurslan 的示例来使用数组。
答案4
#!/bin/bash
set -- {A..O}
j=0
for i
do j=$((j+1))
mkdir "Dir$j"
touch "Dir$j/$i"
done
该代码使用位置参数来完成其工作,因此这些参数被删除(没什么重要的,但很高兴知道)。