シェルについて
シェルとは、ユーザーインターフェースのひとつで、コンピュータに指示をだすためのプログラムのことです。Ubuntuでは端末でシェルを使うことが可能で、これによって様々なプログラムの起動や制御ができます。
シェルにはいくつかの種類があるようですが、今回はLinuxで標準実装されている
bashの使い方について調べてみました。
コマンドについて
シェルでコンピュータに指示をだすことをコマンドと呼ぶようです。コマンドには様々な種類があり、"ー"のついたアルファベットで表されるオプションによって動作を細かく指定することができる場合もあります。
入力補完機能
途中まで入力された内容からコマンドやファイル名が特定可能な場合には、Tabキーを押すことで入力を補完することが出来ます。
また、Tabキーを2回押すことで入力できる候補の一覧を表示することが出来ます
コマンドの履歴
以前に入力したコマンドの履歴を「↑」や「↓」を入力することで呼び出すことが出来ます。
画面のクリア
Ctrl+l を押すことで画面の文字を消すことができて、ちょっと見やすくなります。
変数
変数には名前をつけて値を設定することができます。この変数は、シェルの中で使用されるため、シェル変数とも呼ばれています。
現在設定されているシェル変数の一覧を見るには set というコマンドを実行します。
※ シェル変数の一覧表示
$ set
変数には名前=値という書式で値を設定することができますが、このとき = の前後に空白を開けることはできません。
変数は大文字と小文字が区別されるので注意が必要です。
文字列もそのまま格納できますが、スペースなどを含む場合には””(ダブルクォート)で囲む必要があります。
※ 変数名=値 で値を設定
$ var=123
$ var=abc
$ var="ls -l"
コマンドの実行結果を格納することもできます。
※ 実行結果の格納
$ var=pwd
変数の値を参照するには、変数の前に$をつけます。
変数の値を明確にしたい場合には{}で囲む必要があります。
※ $変数名 で変数の値を表示
$ echo $var
$ echo ${var}
シェル変数とは別に環境変数とよばれる変数も存在しており、env というコマンドで一覧を表示することができます。
環境変数に値を設定する場合には、一度シェル変数を作成した後、export とすることでシェル変数を環境変数にすることができます。
※ 環境変数の表示
$ env
※ 環境変数の設定
VAR="abc"
export VAR
環境変数は実行中のシェルの中だけでなく、他のシェルやプログラムにも影響を与えるため、変更には注意が必要です。
コマンドサーチパス
コマンドは環境変数PATHで指定された順番にしたがって実行されます。
(echo $PATH で表示された左側のパスから順に実行されます)
このため、コマンドはPATHで指定された場所に格納する必要があり、同じ名前のコマンドが存在する場合には先に指定されているコマンドが実行されることになります。
パイプ
パイプという機能を使うとコマンドの結果を次のコマンドに受け渡すことができます。
実行は左から順に行われ、右のコマンドに渡されます。
※ 結果の受け渡し(コマンド1 | コマンド2 | コマンド3 ...)
$ ls --help | more
リダイレクション
キーボードを使った入力を標準入力、端末を使った画面出力を標準出力、端末を使ったエラー画面の出力を標準エラー出力といい、これらの入力や出力をファイルに変更することをリダイレクションといいます。
実行結果を書き込みたい場合は">"、追加で書き込みたい場合は">>"を使ってファイルに書き出すことが出来ます。
また、エラーは"2>"のように2をつけることでファイルに書き出すことが出来ます。
応用として、画面に実行した結果を出力したくない場合にはリダイレクトでファイルを書き出す場所に /dev/null とすることで捨ててしまうこともできます。
※ ファイルに実行結果を書き込む
$ who > date.txt
※ ファイルに実行結果を追加して書き込む
$ date >> date.txt
※ ファイルにエラー内容を追加して書き込む
$ ./hoge.sh 2>> error.txt
※ ファイルに実行結果とエラー内容を別々に追加して書き込む
$ ./hoge.sh >> success.txt 2>> error.txt
エイリアス
コマンドに
別名をつけて覚えやすく、簡単に使えるようにします。
※ alias 名前='コマンドライン'
$ alias rm='rm -i'
終了ステータス
最後に実行したコマンドの状態(終了ステータス)は、特殊な変数 $? に設定されます。
設定される値は、正常に終了した場合は0、失敗した場合は0以外になります。
また、コマンドが成功した場合のみ次のコマンドを実行するには
$ コマンド1 && コマンド2
とし、コマンドが失敗した場合のみ次のコマンドを実行するには
$ コマンド1 || コマンド2
と記述することができます。
ワイルドカード
ファイル名、ディレクトリ名は、ワイルドカードとよばれる文字列で置き換えることが加能です。
*などの文字を展開してほしくない場合は、シングルクオートでくくります。
※ * : 0文字以上の任意の文字列に置き換え
※ ? : 1文字の任意の文字に置き換え
※ [] : 囲まれている任意の1文字に置き換え。[0-9][a-z][A-Z]という指定もできる
※ {} : 囲まれている任意の複数文字に置き換え。カンマで区切って記述する
$ find -name file.*
$ find -name file.???
$ find -name [fF]ile.txt
$ find -name file[0-9a-fA-F].txt
$ find -name fle.{png,jpg,gif}
ジョブの制御
Ctrl+c を押すことで実行中のコマンドを停止することができます。
シェルスクリプトについて
テキストファイルに書いたコマンドを、記述した順序に実行することができます。
このテキストファイルをシェルスクリプトと呼びます。
この機能によって、毎回コマンドを記述する必要がなくなり、時間がかかる処理の終了を待つ必要もなくなります。
シェルスクリプトの先頭には、シェル(/bin/sh)で実行することを明示し、実行属性を付与する必要があります。
※ シェルとして実行することを明示
$ !/bin/sh
※ 実行属性を付与必要
$ chmod u+x ファイル名.sh
シェルスクリプトの実行は、
$ sh ./ファイル名.sh
またはファイル名の記述で行うことができます。
$ ./ファイル名.sh
実行結果はリダイレクトによって知ることが出来ます。
感想
ほかにも、ファイル名などの置き換えや、条件判断や繰り返しなど、いろんな機能があるみたいですが、このあたりは必要になったら調べて追記していきたいと思います。