📌

"Bashでランダム文字列を含むファイルを200個生成するスクリプト解説"

2024/11/22に公開
#!/bin/bash

# 大文字と小文字のセット
upper_set=("O" "P" "Q" "R" "S" "T" "Y" "U" "V")
lower_set=("o" "p" "q" "r" "s" "t" "u" "v")

# 全組み合わせを生成(正順と反転)
combinations=()
for upper in "${upper_set[@]}"; do
  for lower in "${lower_set[@]}"; do
    combinations+=("${upper}${lower}")
    combinations+=("${lower}${upper}")
  done
done

# シャッフル
shuffled_combinations=($(echo "${combinations[@]}" | tr ' ' '\n' | shuf))

# 必要数だけ利用(200個以上が必要な場合は切り詰め)
if [ ${#shuffled_combinations[@]} -lt 200 ]; then
  echo "Error: Not enough unique combinations for 200 files."
  exit 1
fi
shuffled_combinations=("${shuffled_combinations[@]:0:200}")

# ファイル作成ループ
for i in $(seq -w 1 200); do
  # 下二桁の組み合わせを取得
  pair=${shuffled_combinations[$((i-1))]}

  # ファイル内容を生成
  content="${i}${pair}"

  # ファイル作成
  echo -n "$content" > "${i}.txt"
done

echo "200 files created without duplicate pairs."

短縮コード

#!/bin/bash

upper=("O" "P" "Q" "R" "S" "T" "Y" "U" "V")
lower=("o" "p" "q" "r" "s" "t" "u" "v")

combinations=($(for u in "${upper[@]}"; do for l in "${lower[@]}"; do echo "$u$l" "$l$u"; done; done | shuf))

if [ ${#combinations[@]} -lt 200 ]; then echo "Error: Not enough combinations."; exit 1; fi

for i in $(seq -w 1 200); do echo -n "${i}${combinations[$((i-1))]}" > "${i}.txt"; done

echo "200 files created."

Discussion