13,169
回編集
細 (文字列「</source>」を「</syntaxhighlight>」に置換) |
細 (文字列「<source lang」を「<syntaxhighlight lang」に置換) |
||
| 5行目: | 5行目: | ||
== 変数の定義と参照 == | == 変数の定義と参照 == | ||
変数へ値を代入する時は$を付けず、変数を参照するときは$を付ける。<br> | 変数へ値を代入する時は$を付けず、変数を参照するときは$を付ける。<br> | ||
< | <syntaxhighlight lang="sh"> | ||
#!/bin/sh | #!/bin/sh | ||
| 20行目: | 20行目: | ||
<br> | <br> | ||
未定義の変数を参照すると、空文字列と同様に扱われる。(エラーにはならない)<br> | 未定義の変数を参照すると、空文字列と同様に扱われる。(エラーにはならない)<br> | ||
< | <syntaxhighlight lang="sh"> | ||
#!/bin/sh | #!/bin/sh | ||
| 38行目: | 38行目: | ||
以下の例では、(1)環境変数LANGの0文字目から5文字分のみ取得、(2).(ドット)文字までを削除、(3).(ドット)文字以降を削除を行っている。<br> | 以下の例では、(1)環境変数LANGの0文字目から5文字分のみ取得、(2).(ドット)文字までを削除、(3).(ドット)文字以降を削除を行っている。<br> | ||
なお、操作を指定せず${変数名}とする場合、$変数名と同義になる。<br> | なお、操作を指定せず${変数名}とする場合、$変数名と同義になる。<br> | ||
< | <syntaxhighlight lang="sh"> | ||
#! /bin/bash | #! /bin/bash | ||
| 76行目: | 76行目: | ||
== 定数 == | == 定数 == | ||
以下のように実行すると、指定した変数や関数に対する代入、<code>unset</code>ができなくなる。<br> | 以下のように実行すると、指定した変数や関数に対する代入、<code>unset</code>ができなくなる。<br> | ||
< | <syntaxhighlight lang="sh"> | ||
readonly var # 変数varをreadonlyにする | readonly var # 変数varをreadonlyにする | ||
readonly -a arr # 配列arrをreadonlyにする | readonly -a arr # 配列arrをreadonlyにする | ||
| 83行目: | 83行目: | ||
<br> | <br> | ||
以下のように、変数の定義と同時にreadonlyを指定することも可能である。<br> | 以下のように、変数の定義と同時にreadonlyを指定することも可能である。<br> | ||
< | <syntaxhighlight lang="sh"> | ||
readonly USERNAME="Mike" | readonly USERNAME="Mike" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| 89行目: | 89行目: | ||
以下の例では、変数MAX_SIZEを100で初期化した後、200という値を代入しようとしている。<br> | 以下の例では、変数MAX_SIZEを100で初期化した後、200という値を代入しようとしている。<br> | ||
変数MAX_SIZEは定数化されているので、代入しようとした場合はエラーになる。<br> | 変数MAX_SIZEは定数化されているので、代入しようとした場合はエラーになる。<br> | ||
< | <syntaxhighlight lang="sh"> | ||
#!/bin/bash | #!/bin/bash | ||
| 112行目: | 112行目: | ||
==== 変数に値が代入されていることを確認する ==== | ==== 変数に値が代入されていることを確認する ==== | ||
以下の例では、変数NAMEの値がセットされているか調べている。<br> | 以下の例では、変数NAMEの値がセットされているか調べている。<br> | ||
< | <syntaxhighlight lang="sh"> | ||
#!/bin/bash | #!/bin/bash | ||
| 122行目: | 122行目: | ||
==== 変数に値が代入されていないことを確認する ==== | ==== 変数に値が代入されていないことを確認する ==== | ||
以下の例では、変数NAMEの値がセットされていないか調べている。<br> | 以下の例では、変数NAMEの値がセットされていないか調べている。<br> | ||
< | <syntaxhighlight lang="sh"> | ||
#!/bin/bash | #!/bin/bash | ||
| 137行目: | 137行目: | ||
==== 加算 / 減算 ==== | ==== 加算 / 減算 ==== | ||
変数の値に対して、加算および減算を行うには以下のように記述する。<br> | 変数の値に対して、加算および減算を行うには以下のように記述する。<br> | ||
< | <syntaxhighlight lang="sh"> | ||
#!/bin/bash | #!/bin/bash | ||
| 145行目: | 145行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
または | または | ||
< | <syntaxhighlight lang="sh"> | ||
#!/bin/bash | #!/bin/bash | ||
| 156行目: | 156行目: | ||
300 | 300 | ||
<br> | <br> | ||
< | <syntaxhighlight lang="sh"> | ||
#! /bin/bash | #! /bin/bash | ||
| 178行目: | 178行目: | ||
実数を演算では、bcコマンドを使用する。<br> | 実数を演算では、bcコマンドを使用する。<br> | ||
また、bcコマンドも制御構文を使用したスクリプト処理が可能である。<br> | また、bcコマンドも制御構文を使用したスクリプト処理が可能である。<br> | ||
< | <syntaxhighlight lang="sh"> | ||
#! /bin/bash | #! /bin/bash | ||
| 245行目: | 245行目: | ||
==== ランダムな数値の取得 ==== | ==== ランダムな数値の取得 ==== | ||
Bashのシェル変数$RANDOMを参照すると、0~32767の範囲のランダムな整数を取得することができる。<br> | Bashのシェル変数$RANDOMを参照すると、0~32767の範囲のランダムな整数を取得することができる。<br> | ||
< | <syntaxhighlight lang="sh"> | ||
#!/bin/bash | #!/bin/bash | ||
| 257行目: | 257行目: | ||
== 文字列の連結 == | == 文字列の連結 == | ||
複数の変数を連結するには、以下のように続けて記述する。<br> | 複数の変数を連結するには、以下のように続けて記述する。<br> | ||
< | <syntaxhighlight lang="sh"> | ||
#!/bin/sh | #!/bin/sh | ||
| 269行目: | 269行目: | ||
<br> | <br> | ||
また、以下のように変数を{}で括る。<br> | また、以下のように変数を{}で括る。<br> | ||
< | <syntaxhighlight lang="sh"> | ||
#!/bin/sh | #!/bin/sh | ||
| 299行目: | 299行目: | ||
<br> | <br> | ||
以下の例では、lsコマンドの実行結果を変数FILESに代入して、echoで出力している。<br> | 以下の例では、lsコマンドの実行結果を変数FILESに代入して、echoで出力している。<br> | ||
< | <syntaxhighlight lang="sh"> | ||
#!/bin/sh | #!/bin/sh | ||
| 306行目: | 306行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
または<br> | または<br> | ||
< | <syntaxhighlight lang="sh"> | ||
#!/bin/sh | #!/bin/sh | ||
| 404行目: | 404行目: | ||
<br> | <br> | ||
* 最初に一致する文字列のみ置換する。 | * 最初に一致する文字列のみ置換する。 | ||
< | <syntaxhighlight lang="sh"> | ||
# 実行 | # 実行 | ||
X=aaabbbccc | X=aaabbbccc | ||
| 415行目: | 415行目: | ||
<br> | <br> | ||
* パターンに一致する文字列を全て置換する。 | * パターンに一致する文字列を全て置換する。 | ||
< | <syntaxhighlight lang="sh"> | ||
# 実行 | # 実行 | ||
X=aaabbbccc | X=aaabbbccc | ||
| 426行目: | 426行目: | ||
<br> | <br> | ||
sedコマンドと同様の結果を、シェルスクリプトの機能だけで実現できていることがわかる。<br> | sedコマンドと同様の結果を、シェルスクリプトの機能だけで実現できていることがわかる。<br> | ||
< | <syntaxhighlight lang="sh"> | ||
X=aaabbbccc | X=aaabbbccc | ||
Y=$(echo $X | sed -e 's/bbb/BBB/g') | Y=$(echo $X | sed -e 's/bbb/BBB/g') | ||
| 434行目: | 434行目: | ||
*: 以下の例では、/aaa/bbb/cccという絶対パスから、basenameのcccを抽出している。 | *: 以下の例では、/aaa/bbb/cccという絶対パスから、basenameのcccを抽出している。 | ||
*: */というパターンで、先頭から最長一致させて、/aaa/bbb/を取り除いている。 | *: */というパターンで、先頭から最長一致させて、/aaa/bbb/を取り除いている。 | ||
< | <syntaxhighlight lang="sh"> | ||
# 実行 | # 実行 | ||
X=/aaa/bbb/ccc | X=/aaa/bbb/ccc | ||
| 445行目: | 445行目: | ||
<br> | <br> | ||
また、basenameを取得する場合、一般的に、basenameコマンドを使用した方が簡単である。<br> | また、basenameを取得する場合、一般的に、basenameコマンドを使用した方が簡単である。<br> | ||
< | <syntaxhighlight lang="sh"> | ||
basename $X | basename $X | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| 452行目: | 452行目: | ||
*: 以下の例では、/aaa/bbb/cccという絶対パスから、ディレクトリ名の/aaa/bbbを抽出している。 | *: 以下の例では、/aaa/bbb/cccという絶対パスから、ディレクトリ名の/aaa/bbbを抽出している。 | ||
*: /*というパターンで、末尾から最短一致させて、/cccを取り除いている。 | *: /*というパターンで、末尾から最短一致させて、/cccを取り除いている。 | ||
< | <syntaxhighlight lang="sh"> | ||
# 実行 | # 実行 | ||
X=/aaa/bbb/ccc | X=/aaa/bbb/ccc | ||
| 463行目: | 463行目: | ||
<br> | <br> | ||
また、ディレクトリ名を取得する場合、一般的に、dirnameコマンドを使用した方が簡単である。<br> | また、ディレクトリ名を取得する場合、一般的に、dirnameコマンドを使用した方が簡単である。<br> | ||
< | <syntaxhighlight lang="sh"> | ||
dirname $X | dirname $X | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| 469行目: | 469行目: | ||
* '#'以降のコメントを削除する。 | * '#'以降のコメントを削除する。 | ||
*: #*というパターンで、末尾から最長一致させて、変数LINEの#以降の部分を削除している。 | *: #*というパターンで、末尾から最長一致させて、変数LINEの#以降の部分を削除している。 | ||
< | <syntaxhighlight lang="sh"> | ||
# 実行 | # 実行 | ||
LINE="aaa bbb # This is a comment" | LINE="aaa bbb # This is a comment" | ||
| 507行目: | 507行目: | ||
* ${変数:?word} | * ${変数:?word} | ||
*: 例えば、以下のように記述すると、変数COUNTの値が無ければエラーを出力して終了する。 | *: 例えば、以下のように記述すると、変数COUNTの値が無ければエラーを出力して終了する。 | ||
< | <syntaxhighlight lang="sh"> | ||
# 実行 | # 実行 | ||
echo ${COUNT:?} | echo ${COUNT:?} | ||
| 516行目: | 516行目: | ||
<br> | <br> | ||
?の後ろに表示するメッセージを指定することもできる。<br> | ?の後ろに表示するメッセージを指定することもできる。<br> | ||
< | <syntaxhighlight lang="sh"> | ||
# 実行 | # 実行 | ||
echo ${COUNT:?パラメータが設定されていません} | echo ${COUNT:?パラメータが設定されていません} | ||
| 527行目: | 527行目: | ||
*: 変数に値が代入されている場合、代わりにwordの値を返す。 | *: 変数に値が代入されている場合、代わりにwordの値を返す。 | ||
*: 例えば、${COUNT:+1}は、変数COUNTが定義されていたら1と評価される。 | *: 例えば、${COUNT:+1}は、変数COUNTが定義されていたら1と評価される。 | ||
< | <syntaxhighlight lang="sh"> | ||
# 実行 | # 実行 | ||
COUNT=9999 | COUNT=9999 | ||
| 536行目: | 536行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
< | <syntaxhighlight lang="sh"> | ||
# 実行 | # 実行 | ||
COUNT=9999 | COUNT=9999 | ||
| 558行目: | 558行目: | ||
</center> | </center> | ||
<br> | <br> | ||
< | <syntaxhighlight lang="sh"> | ||
# 実行 | # 実行 | ||
HOGE=ABCDEFGHIJ | HOGE=ABCDEFGHIJ | ||
| 567行目: | 567行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
< | <syntaxhighlight lang="sh"> | ||
# 実行 | # 実行 | ||
HOGE=ABCDEFGHIJ | HOGE=ABCDEFGHIJ | ||
| 578行目: | 578行目: | ||
offsetやlength に負の値を指定して、末尾から文字列を抽出することもできる。<br> | offsetやlength に負の値を指定して、末尾から文字列を抽出することもできる。<br> | ||
ただし、offsetの前に1つ以上のスペースが必要である。(スペースを入れないと、${変数:-word}という形で初期値が指定されたとみなされる)<br> | ただし、offsetの前に1つ以上のスペースが必要である。(スペースを入れないと、${変数:-word}という形で初期値が指定されたとみなされる)<br> | ||
< | <syntaxhighlight lang="sh"> | ||
# 実行 | # 実行 | ||
HOGE=ABCDEFGHIJ | HOGE=ABCDEFGHIJ | ||
| 587行目: | 587行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
< | <syntaxhighlight lang="sh> | ||
# 実行 | # 実行 | ||
HOGE=ABCDEFGHIJ | HOGE=ABCDEFGHIJ | ||