シェルスクリプト echo・readコマンド

シェルスクリプト

Ubuntuで作業ディレクトリを作成してカレントディレクトリにしたらソースコードのファイルを作成

touch ファイル名.sh

作成したファイルをVSCodeで開いて編集

#! ... シバン シェルスクリプトをどのシェルで実行するか指定するため1番最初に記述。

#!/bin/bash

今回はbashシェルを指定

シェルスクリプトを実行する

./ファイル名

./ を含めた相対パスで実行。 ./ を含めずに実行できるのは、どのディレクトリにいる時にも共通して使えるよう設定した特定のディレクトリ内にあるファイルのみ。

コマンドとなる実行ファイルが置いてあるディレクトリをパスが通ったディレクトと呼ぶ。

echoコマンド

第一引数で与えられた文字列をそのまま標準出力に出力する。

  • 変数を表示 $ 変数名

  • 計算値 `バッククォート で計算式囲む 足し算+ 引き算- 割り算/ 掛け算\ (ワイルドカードという意味を持つためバックスラッシュをつける)

オプション 説明
-n 最後の改行をしない
-e エスケープシーケンスを解釈
-E エスケープシーケンスを解釈しない

-e オプションでエスケープシーケンスを有効にできる |エスケープシーケンス|説明| | :---: | :---: | |\a|アラート文字| |\b|バックスペース文字| |\c|以降の出力を抑止| |\e|エスケープ| |\f|フォームフィード文字| |\r|キャリッジリターン| |\n|改行| |\t|水平タブ| |\v|垂直タブ|

引用符("または')の中では \n 引用符がない場合は \\n\ を一つ増やす

' ... シングルクォートの中は全て文字列と解釈

" ... ダブルクォートは変数の内容を表示

` ... バッククォートはコマンドと解釈し実行結果や変数内容などを表示

readコマンド

read 変数
  • キーボード入力された値が代入される
  • 引数に複数の変数を指定した場合、入力した行は単語毎に区切られ変数に代入される。(区切り文字は環境変数IFSで決められる)
  • 入力した単語が変数より多い場合は、最後の変数に残りの行がすべて代入される。

read var1 var2
echo $var1
echo $var2

キー入力

a b c

シェルスクリプトの実行結果

a
b c

readコマンドで変数が何も指定されない場合は入力した行は変数REPLYに代入される。

-a オプション (配列変数)

-aオプションの後に変数を指定 ... 配列変数となり入力した行を単語毎に区切り配列変数に代入する。配列変数は0から順に代入される。

read -a var const
echo ${var[0]}
echo $const

入力

a b c

結果

a
     //-aオプションを用いた場合、readコマンドで指定する他の変数は無視される。

-d オプション (入力を終了する文字を指定)

read -d';' -a var
echo ${var[0]}
echo ${var[1]}
a b c;
a b

-e オプション (入力で補完などの機能を使用)

-i オプション (入力時に事前に入力される)

ディレクトリにmy-fileがあると仮定

read -i'my' -e var

入力時

my

と既に入力されている。この時にTabキーを押すと

my-file

と入力を補完する。

-n オプション (入力文字数を制限)

read -n 3 var

入力時に指定した文字数(上記では3文字)を入力した時点で終了する。Enterでいつでも終了できる

-N オプション (文字数を指定)

read -N 5 var

-nオプションと同じだが指定した文字数(上記では5文字)を入力するまで終了しない。Enterを押すと空白文字となり文字数1カウントになる

-p オプション (入力時に指定のプロンプトを表示)

read -p '>' var

入力時に指定したプロンプトが表示される

>

-r オプション (エスケープ文字を無効)

\エスケープ文字として扱わない。

-s オプション (サイレントモード)

入力時に入力文字を表示しない。

-t オプション (入力時間の制限)

時間は秒単位で指定