◆ readコマンド
readコマンドはユーザーからの入力値を受け取り、変数に格納してそれを次の処理で使用したい場合に
使用するコマンド。以下のスクリプトでは名前を入力することでその入力内容を使用して挨拶をします。
◆ hello.sh ファイルの確認
$ cat hello.sh
#!/bin/bash
echo -n " あなたのお名前は? "
read yourname
echo " こんにちは、$yourname さん "
|
◆ hello.sh ファイルの実行
$ source hello.sh
あなたのお名前は? cool
こんにちは、cool さん "
|
上記のようにhello.sh のシェルスクリプトを実行すると「あなたのお名前は?」と表示されるので、そこに
例えば「cool」と入力し、入力した文字列はシェル変数「youname」に格納されて次の行で出力されます。
◆ testコマンド
条件分岐が行われる条件式の真偽を判断して、その結果を返すためには、testコマンドを使用します。
条件文に書かれた式を評価して、条件が満たされる場合は真(0)、条件が満たされない場合は偽(1)
を返します。なお、条件式がエラーの場合は 0 や 1 ではない値が返されます。
◆ 構文 : test 条件式
◆ ファイルの形式に関する条件式
条件式 |
実行結果 |
-d ディレクトリ名 |
指定したディレクトリがあれば真 |
-f ファイル名 |
指定したファイルが通常ファイルであり、存在すれば真 |
-s ファイル |
指定したファイルのサイズが 0 より大きいファイルであれば真 |
-L ファイル |
指定したファイルがシンボリックリンクであるファイルであれば真 |
◆ ファイルの権限に関する条件式
条件式 |
実行結果 |
-r ファイル |
指定したファイルが存在して、かつ読み込み可能であれば真 |
-w ファイル |
指定したファイルが存在して、かつ書き込み可能であれば真 |
-x ファイル |
指定したファイルが存在して、かつ実行可能であれば真 |
◆ ファイルの特性に関する条件式
条件式 |
実行結果 |
-e ファイル |
指定したファイルがあれば真 |
ファイル1 -nt ファイル2 |
指定したファイル1が、指定したファイル2よりも修正時刻が新しければ真 |
ファイル1 -ot ファイル2 |
指定したファイル1が、指定したファイル2よりも修正時刻が古ければ真 |
◆ 文字列に関する条件式
条件式 |
実行結果 |
-n 文字列 |
文字列の長さが 0 より大きければ真 |
-z 文字列 |
文字列の長さが 0 であれば真 |
文字列1 = 文字列2 |
文字列1と文字列2が等しければ真 |
文字列1 != 文字列2 |
文字列1と文字列2が等しくなければ真 |
◆ 数値に関する条件式
条件式 |
実行結果 |
数値1 -eq 数値2 |
数値1と数値2が等しければ真 |
数値1 -ne 数値2 |
数値1と数値2が等しくなければ真 |
数値1 -ge 数値2 |
数値1が数値2よりも大きい、または等しければ真 |
数値1 -gt 数値2 |
数値1が数値2よりも大きければ真 |
数値1 -le 数値2 |
数値1が数値2よりも小さい、または等しければ真 |
数値1 -lt 数値2 |
数値1が数値2よりも小さければ真 |
◆ 論理結合に関する条件式
条件式 |
実行結果 |
!条件 |
条件式が偽であれば真 |
条件1 -a 条件2 |
条件1と条件2の両方の条件式が真であれば真 |
条件1 -o 条件2 |
条件1と条件2のどちらかの条件式が真であれば真 |
◆ 実行例 : 数値10と数値10を比較して、その結果を表示 ( 数値が同じなので 0 (真)が返される )
$ test 10 -eq 10 ; echo $?
0
|
◆ 実行例 : 数値5と数値10を比較して、その結果を表示 ( 数値が異なるので 1 (偽)が返される )
$ test 5 -eq 10 ; echo $?
1
|
◆ 実行例 : 文字列ABと文字列ABを比較して、その結果を表示 ( 文字列をこの条件式で比較できないので、2 (エラー)となる )
$ test AB -eq AB ; echo $?
2
|
※ このtestコマンドは、次ページで紹介する if 文と一緒によく使用されます。上記のような単体での使用は基本的にありません。
◆ seqコマンド
シェルスクリプトで、数値を1つずつ増加または減少させる処理を行うためにはseqコマンドを使用します。
◆ 構文 : seq 開始数値 終了数値
◆ 構文 : seq 終了数値
◆ 実行例 : 1 から 5 まで昇順に表示
◆ 実行例 : 5 から 1 まで降順に表示
◆ 実行例 : 1 から 5 まで昇順に表示
|