Moyazine

日々の学習と生活の記録

ChatGPTと行くインフォメーションテクノロジーの旅 #8 本のタイトルと章数からディレクトリとMarkdownファイルを生成するzshスクリプト

を書いた。ChatGPTが。

目的とか

  • 先日読んだt_wadaさんのように読書記録をリポジトリ管理したかった。
  • だが、いちいちmkdirしてtouchしてって工程が面倒臭かったので、楽がしたかった。
  • なんとなく出来そうだけど、具体的なコードが思いつかなかったのでChatGPTにぶん投げた。 それでいいのか俺...?

コード

#!/bin/zsh

echo 'Enter the book title:'
read book_title

echo 'Enter the number of chapters:'
read num_chapters

# Replace spaces with underscores and make lowercase
formatted_book_title=${book_title// /_}
formatted_book_title=${formatted_book_title:l}

# Create the book directory if it doesn't exist 
mkdir -p "$formatted_book_title"

# Generate chapter files
for ((i = 1; i <= num_chapters; i++)); do
    chapter_file="${formatted_book_title}/chapter_${i}.md"
    touch "$chapter_file"
    echo "Chapter $i: Reading Memo" > "$chapter_file"
done

echo "Created $num_chapters chapter files in the '$formatted_book_title' directory"

解説

read book_title

入力を待ち受けて変数に格納

formatted_book_title=${book_title// /_}
formatted_book_title=${formatted_book_title:l}

formatted_book_title=${book_title// /_}

  • book_title 変数内のすべてのスペースをアンダースコア(_)に置き換え
    • ${variable//search/replace} という形式のパラメータ展開を使って、variable 内の search と一致するすべての部分文字列を replace に置き換え
    • この場合、book_title 内のすべてのスペースがアンダースコアに置き換え

formatted_book_title=${formatted_book_title:l}

  • この行では、formatted_book_title 変数内のすべての文字を小文字に変換
    • :l という形式のパラメータ展開を使って、formatted_book_title 内のすべての大文字を小文字に変換

実行

  1. chmod +x create_book_memos.sh
  2. ./create_book_memos.sh

実行権限つけて動かすだけとも言うけど、一応。