初心者の皆さん、この大規模なチュートリアルでBashスクリプトに慣れましょう。
シェルはLinuxの中核部分であり、cd、ls、catなどの様々なコマンドを使ってLinuxカーネルと対話することができます。
BashはLinuxで利用可能な数多くのシェルの1つです。これらのシェルの主な構文は基本的に同じですが、まったく同じというわけではありません。Bashは圧倒的に人気のあるシェルで、ほとんどのLinuxディストリビューションでデフォルトのシェルとして設定されています。
ターミナルやSSHセッションを開いているときは、たとえ実際には見えなくても、実際にシェルを実行していることになります。
コマンドを入力すると、シェルがそれを解釈します。コマンドと構文が正しければ実行され、そうでなければエラーが表示されます。
Linuxコマンドを直接実行できるのに、なぜBashスクリプトが必要なのですか?
ターミナルに直接コマンドを入力すれば実行されます。
$ echo "hello world"hello world
また、スクリプトでも同じ操作が可能です:
$ cat >> script.sh#!/bin/bashecho "hello world"$ bash script.shhello world
では、なぜシェルスクリプトが必要なのでしょうか?同じコマンドを何度も入力する必要がなく、シェルスクリプトを実行すればいいからです。
また、スクリプトに複雑なロジックがある場合、すべてのコマンドをターミナルに入力するのは得策ではないかもしれません。
例えば、次のようなコマンドを打てば動きますが、わかりにくいですよね。同じコマンドを何度も入力するのは迷惑なことです。
if [ $(whoami) = 'root' ]; then echo "root"; else echo "not root"; fi
その代わりに、コマンドをシェルスクリプトにまとめることができます:
#!/bin/bashif [ $(whoami) = 'root' ]; thenecho "You are root"echo "You are not root"
これはまだ比較的単純な状況です。50行も100行もあるような複雑な台本を想像してみてください!
何を学ぶのですか?
このBashスクリプトチュートリアルには9つのパートがあります。学ぶ内容は以下の通りです:
- 最初のBashシェルスクリプトの作成と実行
hello world- Bashスクリプトでのパラメータの受け渡しとユーザー入力の受け付け
- 数学的計算の実行
echo "hello world"$ bash script.sh条件文を使用します。- for、
hello worldループの使用 - 関数の作成
すべてのセクションで簡単な例を挙げています。ご希望であれば、各セクションの詳細な章にアクセスすることで、より深く学ぶことができます。これらの各セクションには、実践的な練習問題も含まれています。
このチュートリアルの対象者は誰ですか?
このチュートリアルは、Bashシェルスクリプトを始めたい人のためのものです。
もしあなたが学生で、コースにシェルスクリプトが含まれているなら、このシリーズはあなたのためのものです。
デスクトップ Linux の常用ユーザーであれば、このシリーズを読めば、さまざまなソフトウェアを調べたり問題を修正したりする際に遭遇するシェルスクリプトのほとんどを理解できるようになるでしょう。また、よくある繰り返し作業を自動化するのにも使えます。
このBashスクリプト・チュートリアルが終わる頃には、簡単なBashスクリプトを書けるようになっているはずです。
Linuxのコマンドラインやプログラミング言語の基本的な知識はすでにお持ちだと思います。
Linuxのコマンドラインに全く慣れていないのであれば、まず基本を身につけることをお勧めします。
コマンドラインで特定の場所に移動する方法を理解する必要があります。そのためには、Linuxファイルシステムでパスがどのように機能するかを理解する必要があります。
次に、このチュートリアルシリーズでは、ディレクトリナビゲーションとファイル操作の基本を紹介します。
最初のBash Shellスクリプトが書かれます。
if [ $(whoami) = 'root' ]; then echo "root"; else echo "not root"; fi 名前の新規ファイルを作成します:
nano hello.sh
ターミナルでnanoエディターが開きます。そこに以下のコードを入力してください:
#!/bin/bashecho "Hello World"
Ctrl+X 保存し、nanoエディタを終了することができます。
これで、次のようにBashシェルスクリプトを実行できます:
bash hello.sh
次のような出力が表示されるはずです:
Hello World
もう一つの方法は、まずスクリプトに実行権限を与えることです:
chmod u+x hello.sh
そしてこのように実行します:
./hello.sh
GUIベースのテキストエディタを使ってスクリプトを書くこともできます。長いスクリプトを書くにはこちらの方が適しているかもしれません。ただし、スクリプトを実行するには、スクリプトが保存されているディレクトリに移動する必要があります。
おめでとうございます!あなたは今、最初のBashスクリプトを実行しました。
以下は、Bashスクリプトで使用できる変数のリストです。
変数は次のように宣言します:
var=some_value
変数はこのようにアクセスできます:
変数を宣言するとき、等号の前後にスペースを入れてはいけません。
変数を追加して、前のスクリプトを修正します。
#!/bin/bashmessage="Hello World"echo $message
このスクリプトを実行しても、出力は変わりません。
Hello World
以下は、Bashスクリプトにパラメータを渡す方法の例です。
Bashスクリプトの実行時には、以下の方法でパラメータを渡すことができます:
./my_script.sh arg1 arg2
スクリプトでは、1番目のパラメータに$1、2番目のパラメータに$2といった具合です。0は実行中のスクリプトの名前を表す特別な変数です。
次に、 arguments.sh名前の新しいシェルスクリプトを作成し、以下のコードを追加します:
#!/bin/bashecho "Script name is: $0"echo "First argument is: $1"echo "Second argument is: $2"
実行可能ファイルにして、次のように実行してください:
$ ./argument.sh abhishek prakashScript name is: ./argument.shFirst argument is: abhishekSecond argument is: prakash
特殊変数について簡単に見てみましょう:
$0 |
スクリプト名 |
| $1, $2...$9 | スクリプトパラメータ |
${n} | |
$# |
パラメータ数 |
$@ |
パラメータ数 |
$$ |
現在のシェルのプロセスID |
$! |
コマンドを最後に実行したプロセスのプロセスID |
$? |
最後に実行されたコマンドの終了ステータス |
キーボード入力を受け付けることで、Bashスクリプトをインタラクティブにすることもできます。
そのためには、readコマンドを使う必要があります。また、read -pコマンドを使えば、echoコマンドを使わずにキーボード入力を促すことができます。
#!/bin/bashecho "What is your name, stranger?"read nameread -p "What's your full name, $name? " full_nameecho "Welcome, $full_name"
このスクリプトを実行すると、"パラメータ "の入力を求められるので、入力してください。
$ ./argument.shWhat is your name, stranger?abhishekWhat's your full name, abhishek? abhishek prakashWelcome, abhishek prakash
算術演算が実行されます。
Bash Shellで算術演算を実行する構文は次のようになります:
$((arithmetic_operation))
以下は、Bashで実行できる算術演算のリストです:
+ |
追加 |
- |
引き算 |
* |
乗算 |
/ |
整数の除算 |
% |
モジュロ演算 |
** |
指数 |
以下は、Bashスクリプトでの足し算と引き算の例です:
#!/bin/bashread -p "Enter first number: " num1read -p "Enter second number: " num2sum=$(($num1+$num2))sub=$(($num1-$num2))echo "The summation of $num1 and $num2 is $sum"echo "The substraction of $num2 from $num1 is $sub"
シェルスクリプトは、任意の数値を引数として実行することができます。
Bashは整数しか使いません。デフォルトでは小数の概念がありません。そのため、10/3は3.333ではなく3になってしまいます。
浮動小数点演算には、次のようにbcコマンドを使う必要があります:
#!/bin/bashnum1=50result=$(echo "$num1/$num2" | bc -l)echo "The result is $result"
今度こそ、正確な結果を目にすることができるでしょう。
The result is 8.
以下は、Bashスクリプトでの配列の使い方の例です。
複数の変数を使う代わりに、Bashでは配列を使って同じカテゴリの値を格納することができます。
配列はこのように宣言できます:
distros=(Ubuntu Fedora SUSE "Arch Linux" Nix)
要素にアクセスするには
${array_name[N]}
他の多くのプログラミング言語と同様、配列は0からインデックスが付けられます。
このように配列のすべての要素を表示することができます:
${array[*]}
これは配列の長さを取得します:
${#array_name[@]}
Bashでの基本的な文字列操作
Bashは多くの文字列操作を実行できます。
これを使って文字列の長さを求めることができます:
${#string}
2つの文字列を連結します:
str3=$str1$str2
部分文字列を抽出するために、部分文字列の開始位置と長さを指定します:
${string:$pos:$len}
これがその例です:
指定した文字列の一部を置換することもできます:
${string/substr1/substr2}
また、与えられた文字列から部分文字列を削除することもできます:
${string/substring}
以下は、Bashで使用される条件文の例です。
Bashスクリプトに条件付きロジックを追加するには、if文またはif-else文を使用します。これらの文は fi で終わります。
if文の構文は次のとおりです:
if [ condition ]; thenyour code
と [ ... ]; 使い方に注意してください。
then 構文は次のとおりです:
if [ expression ]; then## execute this block if condition is true else go to nextelif [ expression ]; then## execute this block if condition is true else go to next## if none of the above conditions are true, execute this block
以下は、 if-else 使用したBashスクリプトのサンプルです:
#!/bin/bashread -p "Enter the number: " nummod=$(($num%2))if [ $mod -eq 0 ]; thenecho "Number $num is even"echo "Number $num is odd"
実行すると、このような結果が表示されるはずです:
-eqはテスト条件または条件演算子として知られています。このような演算子はたくさんあり、さまざまなタイプの比較を行うことができます:
これらは数値比較に使用できるテスト条件演算子です:
$a -lt $b |
$a < $b |
$a -gt $b |
$a > $b |
$a -le $b |
$a <= $b |
$a -ge $b |
$a >= $b |
$a -eq $b |
$a == $b |
$a -ne $b |
$a != $b |
文字列の比較を行う場合は、これらのテスト条件を使用できます:
"$a" = "$b" |
$a 等同于 $b |
"$a" == "$b" |
$a 等同于 $b |
"$a" != "$b" |
$a 不同于 $b |
-z "$a" |
$a 空です。 |
また、ファイルの種類をチェックするための条件もあります:
-f $a |
$a はファイル |
-d $a |
$a はディレクトリ |
-L $a |
aはリンク |
スペースには特に注意してください。開始括弧と終了括弧の間、および条件と条件の間にはスペースが必要です。同様に、条件演算子の前後にもスペースが必要です。
Bashスクリプトは
Bashはfor、while、untilの3種類のループをサポートしています。
これはforループの例です:
#!/bin/bashfor num in {1..10}; doecho $num
実行すると、次のような出力が表示されます:
上記の例を使う場合は、whileループを使ってこのように書き換えることができます:
#!/bin/bashwhile [ $num -le 10 ]; doecho $numnum=$(($num+1))
この場合も、 until ループを使って書き換えることができます:
#!/bin/bashuntil [ $num -gt 10 ]; doecho $numnum=$(($num+1))
whileループはuntilループとよく似ています。違いは、whileループは条件がtrueのときに実行され、untilループは条件がfalseのときに実行されることです。
以下は、Bashスクリプトで使用できる関数の例です。
Bashシェルは関数の使用をサポートしているので、同じコード・スニペットを何度も書く必要はありません。
これはBash関数を宣言するための一般的な構文です:
function_name() {commands
これは、パラメータ付き関数を使用するBashスクリプトのサンプルです:
#!/bin/bashsum() {sum=$(($1+$2))echo "The sum of $1 and $2 is: $sum"echo "Let's use the sum function"sum 1 5
スクリプトを実行すると、次のような出力が表示されます:
Let's use the sum functionThe sum of 1 and 5 is: 6
次は何?
これは最初の一瞥に過ぎません。このBashスクリプティングのチュートリアルは入門編に過ぎません。Bashスクリプティングにはもっとたくさんのことがあり、少しずつ探求していくことができます。
さらに、ここで紹介しきれなかったバッシュについてもっと知りたい方は、この無料の本をダウンロードしてください:
Bashの基本的な知識が十分に身についたら、この無料の本で高度なBashスクリプティングを学ぶことができます:
どちらも少なくとも10年以上前の本ですが、今でもバッシュを学ぶのに使えます。





