変数とユーザー入力
スクリプトで変数を定義して使う方法と、ユーザーに入力を求めて対話的なスクリプトにする方法を学びます。
「変数とユーザー入力」はCoddyKit上の無料Linux Command Line & Bash Scripting Masteryレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLinux Command Line & Bash Scripting Mastery学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Linux Command Line & Bash Scripting Masteryコースには全4レッスンが含まれています。
変数とは
Bashスクリプトでは、変数はデータを格納する名前付きの入れ物のようなものです。スクリプトで使用したり変更したりする情報のプレースホルダーだと考えてください。
変数にテキスト、数値、さらにはコマンドの出力などの値を格納することで、スクリプトを柔軟で再利用しやすく、管理しやすいものにできます。
変数の宣言と代入
Bashで変数を作成するには、名前に値を代入するだけです。varやletのような特別なキーワードは必要ありません。
VARIABLE_NAME=valueの構文を使います。- 重要:
=記号の前後にスペースを入れないでください。 - 値にはテキスト(文字列)または数値を指定できます。
いくつか値を代入してみましょう。
#!/bin/bash
# Assigning a string
MY_NAME="CoddyKit"
# Assigning a number
LESSON_NUMBER=2
echo "Name: $MY_NAME"
echo "Lesson: $LESSON_NUMBER"変数の値にアクセスする
変数を宣言したら、名前の前に$記号を付けて値にアクセスできます。これにより、Bashは変数名を格納されている値に置き換えます。
たとえば、MY_VAR="Hello"とした場合、echo $MY_VARは「Hello」と表示します。
#!/bin/bash
CITY="New York"
TEMPERATURE=75
echo "The city is $CITY."
echo "The temperature is $TEMPERATURE degrees."
# You can also enclose in curly braces for clarity (optional)
echo "It's ${TEMPERATURE}F in ${CITY}."変数名のルール
適切な変数名を付けると、スクリプトが理解しやすくなります。次のルールとベストプラクティスを確認しましょう。
- 名前には、英字(a-z、A-Z)、数字(0-9)、アンダースコア(
_)を使用できます。 - 名前は、英字またはアンダースコアで始める必要があります。
- 変数名は大文字と小文字を区別します(
myVarとmyvarは異なります)。 - 環境変数やスクリプトの定数にはALL_CAPSを、ローカルなスクリプト変数にはmixedCaseまたはsnake_caseを使うのが一般的です。
読み取り専用変数
スクリプト全体で変数の値を一定に保ちたい場合があります。readonlyコマンドを使うと、変数を変更できないようにできます。
変数をreadonlyに設定すると、その値を再代入できなくなります。再代入しようとすると、エラーが発生します。
#!/bin/bash
APP_VERSION="1.0.0"
readonly APP_VERSION
echo "App Version: $APP_VERSION"
# Uncommenting the next line would cause an error:
# APP_VERSION="1.0.1"
# echo "New App Version: $APP_VERSION"対話型スクリプトを作成する
これまでのスクリプトは、実行中に入力を受け取らずにコマンドを実行していました。しかし、スクリプトからユーザーに情報を尋ねたい場合はどうすればよいでしょうか。
そこで役立つのがユーザー入力です。対話型スクリプトは、ユーザーが入力した内容に応じて動作を変えられるため、より柔軟で使いやすくなります。
`read`コマンド
ユーザーから入力を受け取る基本的なコマンドはreadです。readを実行すると、スクリプトは一時停止し、ユーザーが何か入力してEnterキーを押すのを待ちます。
ユーザーが入力したテキストは、指定した変数に格納されます。
#!/bin/bash
echo "Please enter your name:"
read USER_NAME
echo "Hello, $USER_NAME! Welcome to CoddyKit."`read -p`でプロンプトを追加する
前の例でも動作しますが、echoでプロンプトを表示する行と、readを実行する行の2行が必要です。readで-p(prompt)オプションを使うと、これらを1つにまとめられます。
これにより、スクリプトとのやり取りがよりすっきりし、直接的になります。
#!/bin/bash
read -p "What is your favorite animal? " ANIMAL
echo "Oh, so you like $ANIMAL! That's cool."`read -s`で入力を非表示にする
パスワードなどの機密情報を入力するときは、ユーザーの入力を画面に表示したくありません。readで-s(silent)オプションを使うと、入力中の表示を抑制できます。
read -sを使った後は、改行を表示するためにechoコマンドを追加するのがよい習慣です。そうしないと、次のプロンプトが非表示の入力と同じ行に表示されることがあります。
#!/bin/bash
read -sp "Enter your secret passphrase: " PASSPHRASE
echo # This adds a newline after the hidden input
echo "Passphrase received (not displayed for security)."確認:変数と入力
次のBashスクリプトについて考えてみましょう。
#!/bin/bash
FAVORITE_FOOD="Pizza"
read -p "What's your favorite drink? " DRINK
echo "I like $FAVORITE_FOOD and $DRINK!"復習:変数とユーザー入力
よくできました。Bashスクリプトを動的かつ対話型にするための基本を学びました。
- 変数は
NAME=valueを使って値を格納します。 $NAMEで変数の値にアクセスします。readonlyは変数を定数にします。readコマンドでユーザー入力を受け取ります。read -p "Prompt"を使うと、同じ行にプロンプトを表示できます。read -sは、機密性の高い入力を非表示にするために使います。
これらの機能は、柔軟で使いやすいスクリプトを作成するうえで重要です。
よくある質問
「変数とユーザー入力」レッスンは無料ですか?
はい。「変数とユーザー入力」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Linux Command Line & Bash Scripting Masteryコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Linux Command Line & Bash Scripting Masteryコースには全4レッスンが含まれています。
「変数とユーザー入力」で何を学びますか?
スクリプトで変数を定義して使う方法と、ユーザーに入力を求めて対話的なスクリプトにする方法を学びます。 ブラウザで直接実行するハンズオンコードでLinux Command Line & Bash Scripting Masteryを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Linux Command Line & Bash Scripting Masteryを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLinux Command Line & Bash Scripting Masteryは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「変数とユーザー入力」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLinux Command Line & Bash Scripting Masteryレッスンでコードを書いて実行できますか?
はい。すべてのLinux Command Line & Bash Scripting Masteryレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。