Bashはプログラミングするのにかなり強力な言語であり、開始するのも非常に簡単です。
結局のところ、これはほぼ普遍的に、ターミナルを開いたときに表示されるシェルです。そのため、慣れることは非常に便利です。
Bashには、その言語の使用にかなり慣れている場合でも、気付かない可能性のある強力なコマンドがいくつかあります。ただし、これらのコマンドはすべて非常に便利な目的を果たし、作成するシェルスクリプトを以前よりもクリーンで保守しやすく、完全に強力にすることができます。
読み取り:ユーザーに入力を求める
readコマンドを使用すると、ユーザーから入力を受け取り、それを変数内に格納できます。
#!/usr/bin/env bash
echo "What is your name?"
read name
echo "Your name is ${name}!"
これは、ユーザーであるあなたからの入力を待ってから、name
の値を設定します 入力する文字列の変数。
たとえば、名前をLinux Handbook
として指定した場合 上記のスクリプトを実行すると、Your name is Linux Handbook!
が出力されます。 。
-p
を指定することで、上記の例をよりコンパクトにすることもできます。 read
のオプション コマンド。-p
の後に指定された文字列を出力します。 、次にユーザーに入力を求めます:
#!/usr/bin/env bash
read -p "What is your name? " name
echo "Your name is ${name}!"
また、What is your name?
の後にスペースを追加したことにも気付くでしょう。 。追加しなかった場合、文字通りWhat is your name?
と表示されます。 スペースがないため、ユーザーが入力を入力しているときに少し奇妙に見えます:
Mapfile:変数にファイルの行の値を割り当てる
mapfile
を使用できます コマンドを実行してファイルの内容を読み取り、その出力をBash配列に割り当てます。各配列項目は、ファイルで新しい行が検出されるたびに作成されます。
たとえば、file.txt
というファイルを作成しましょう。 次のテキストが含まれています:
Line 1
Line 2
Line 3
Line 4
Line 5
次のコマンドを実行して、このファイルをBash配列に変換できます。これにより、ファイルのコンテンツがfile_var
に割り当てられます。 変数:
#!/usr/bin/env bash
mapfile file_var < file.txt
for i in "${file_var[@]}"; do
echo "${i}"
done
上記では、ファイル内の内容と一致しない奇妙な間隔の出力も生成されることに気付くでしょう。これは、-t
を追加することで解決できます。 mapfile
のオプション コマンド:
#!/usr/bin/env bash
mapfile -t file_var < file.txt
for i in "${file_var[@]}"; do
echo "${i}"
done
最後に、以下が機能しないことに気付くかもしれません:
#!/usr/bin/env bash
cat file.txt | mapfile -t file_var
これは、mapfile
が原因です。 パイプの右側のコマンドはサブシェル(つまり、Bashの新しいインスタンス)で実行され、現在のシェルに影響を与えることはできません。
ソース:ファイルからシェルの環境に変数を配置します
次の架空のファイルconfig.sh
があるとします。 、次の内容で:
username=linuxhandbook
domain=linuxhandbook.com
そのファイルのコンテンツを取得して、現在のシェルの環境に配置したい場合はどうなりますか?
これは、ソースコマンドを使用するだけで非常に簡単に実行できます:
source config.sh
次に、変数が期待どおりに割り当てられたことを確認できます。
内部的には、source
コマンドは実際には現在のシェルの環境で指定されたファイルを実行するため、そのファイルにコマンドを入力すると、source
の実行時に実際にコマンドが実行されます。 。
たとえば、次のようにconfig.sh
に入れましょう。 :
name="Linux Handbook"
echo "Hello ${name}!"
echo "Have a good day!"
次に、soure config.sh
を実行すると 、2つのecho
が表示されます コマンドとname
が実行されます 割り当てられる変数:
.
source
の代わりに 、source
とまったく同じように機能します
そして、そのように、Bashの内部にとどまることができる間、より強力で便利なタスクを実行するための道をさらに進んでいます。
Bashで頻繁に使用する他のコマンドはありますか?以下のコメントにそれらのいずれかを残してください。