我正在尝试写下面的内容
for i in {a..z} && j in {1..26}
do
echo "/dev/sd"$i"1 /disk$j ext4 noatime 1 1" >> test
done
当然这不是正确的语法。有人可以用正确的语法帮助我吗?
答案 0 :(得分:4)
为了通用,您可以使用' length'如下图所示。
#!/bin/bash
# Define the arrays
array1=("a" "b" "c" "d")
array2=("w" "x" "y" "z")
# get the length of the arrays
length=${#array1[@]}
# do the loop
for ((i=0;i<=$length;i++)); do
echo -e "${array1[$i]} : ${array2[$i]}"
done
您也可以像以下
一样分配数组array1=`awk -F" " '$1 == "CLIENT" { print $2 }' clientserver.lst`
答案 1 :(得分:3)
您可以使用数组:
A=({a..z}) B=({1..26})
for (( I = 0; I < 26; ++I )); do
echo "/dev/sd${A[I]} /disk${B[I]} ext4 noatime 1 1" >> test
done
示例输出:
/dev/sda /disk1 ext4 noatime 1 1
...
/dev/sdz /disk26 ext4 noatime 1 1
更新
根据建议你可以使用B的值的索引:
A=('' {a..z})
for (( I = 1; I <= 26; ++I )); do
echo "/dev/sd${A[I]} /disk${I} ext4 noatime 1 1" >> test
done
此外,您可以使用printf
进行一些格式化以获得更好的输出和更清晰的代码:
A=('' {a..z})
for (( I = 1; I <= 26; ++I )); do
printf "%s%20s%15s%15s%4s%2s\n" "/dev/sd${A[I]}" "/disk${I}" ext4 noatime 1 1 >> test
done
此外,如果您不打算将数据附加到文件,但只在每组生成的行中写入一次,那么只需按块进行重定向:
A=('' {a..z})
for (( I = 1; I <= 26; ++I )); do
printf "%s%20s%15s%15s%4s%2s\n" "/dev/sd${A[I]}" "/disk${I}" ext4 noatime 1 1
done > test