3

私は次のようなものを書こうとしています

for i in {a..z} && j in {1..26}
do
echo "/dev/sd"$i"1               /disk$j                                 ext4     noatime        1 1" >> test
done

もちろん、これは正しい構文ではありません。誰かがこれを行うための正しい構文で私を助けてくれますか?

4

2 に答える 2

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

また、データをファイルに追加するつもりはなく、生成された一連の行ごとに 1 回だけ書き込む場合は、代わりにブロックごとにリダイレクトするだけです。

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
于 2013-09-12T19:53:18.423 に答える