シェルチートシート

シェルチートシート

シェルのifの条件で2つの条件がある場合はand条件を使います。

シェルではand条件は-aを使用します。

以下、0以外、かつ、1以外の条件の例です。

if文

シェルのif構文です。

シェルの半角スペース

シェルでは半角スペースは区切り文字として意味のある文字として扱われます。

半角スペースはIFS(Internal Field Separator)に区切り文字として設定されています。

その為以下のようなファイルがあると思わぬ動作をしてしまいます。

このファイルをシェルのfor文でループすると、半角スペースを区切り文字(改行)と見なし、2回ループされます。

これを防ぐには、環境変数IFSをシェル内でLFに設定します。

シェルの演算子-eqと-ne

シェルのif文で=と≠の判断をするときに-eqと-neを使います。

-eqはequal、-neはnot equalの略です。

以下、使い方の例です。

シェルでexec > ファイル名 2>&1

シェルで

と記述すると、標準出力、標準エラー出力が上記のファイル名に出力されるようになります。

シェルでディレクトリ配下のファイルを全削除する

シェルでディレクトリ配下のファイルを全削除する例です。

今使用しているシェルを調べる

今使用しているシェルを調べるには

と打つとわかります。

linuxでファイルを検索する

linuxでファイルを検索するコマンドです。

.はカレントディレクトリ配下を探す意味です。

対象ファイル名は*aaなどとすると、末尾がaaのファイルを探すことができます。

-printとすることでファイル名を出力してくれます。

$(cd $(dirname $0) && pwd)

シェルのワンライナーでdirname $0というのを良く見ます。

以下のようなディレクトリ構成でシェルがあるとします。

$0というのはechoするとわかると思いますがシェルスクリプトファイル名(フルパス)を表します。

上記では

を表します。

dirname $0とすると、$0のディレクトリ部分を表します。

以下は、よく見るワンライナーです。

&&は左辺のコマンドが実行されれば右辺を実行するので、上記のワンライナーは以下を順次実行しているのと同じになります。

シェルスクリプトファイル内で以下を記述すると、変数にシェルスクリプトファイルのカレントディレクトリを格納します。

ls -l | grep

上記でlsコマンドの結果から対象文字列が含まれる行のみが表示されます。

対象文字列はシングルクォーテーションで囲っても囲まなくても一緒です。

期待してないtoken fiのあたりにシンタックスエラー

シェルを作成していると「期待してないtoken fiのあたりにシンタックスエラー」というエラーが出たりします。

これの原因はif文の分岐でなにも処理を書いていないと、このエラーが発生します。

分岐する以上は何かしら処理を記述しなくてはいけません。

シェルでzipファイルを解凍する

シェルでzipファイルを解凍するには、unzipコマンドを使います。

batch.zipファイルを解凍する例です。

シェルで複数ディレクトリを削除する

シェルで複数ディレクトリを削除するには、rm -rコマンドを使います。

hulftとlogディレクトリを削除する例です。

シェルでif -eでファイル存在チェックをする

シェルでif文でファイルが存在する場合、しない場合を判断したい場合、-eを使います。

シェルで複数ディレクトリを指定のディレクトリにコピーする

複数ディレクトリを指定のディレクトリにコピーするには、cp -rコマンドを使います。

hulft,logディレクトリをbkディレクトリにコピーする例です。

シェルの引数にファイル名を指定して読み込む

sh a.sh a.txtというようにしてa.txtファイルを読み込むには、while readを使用します。

シェルは以下のように書きます。a.txtは$1変数に入るのでそれを指定しても良いです。

hoge変数にファイルの各1行が入ります。

変数から部分文字列を取得する

変数の値の部分文字列を取得するには、${変数名:オフセット:長さ}とします。

変数Aの値が12345の場合で考えます。

変数
${A:0:2} 12
${A:2:2} 34
${A:0:3} 123

bashの機能なので、それ以外のシェルだとBad substitutionとエラーが出ます。

シェルでexpr lengthで文字列長を判断する

シェルでexpr lengthで文字列長を判断することができます。

結果は文字列長である4を返します。

シェルの特殊変数$?、$#

シェルの$?は、直前に実行されたコマンドのステータスを返します。

コマンドが成功していたら、$?には0が入ります。

$#はシェルスクリプトの引数の数を保持しています。

引数が3つあれば、$#は3になります。

また、引数は1を基底として$1,$2,$3に入っています。

シェルでif -nで文字列長チェックをする

シェルでif -nで文字列長チェックをする場合、しない場合を判断したい場合、-nを使います。

この時、変数$LINEはダブルクォーテーションで囲まなくてはいけません。

シェルでif -sでファイル容量0バイトチェックをする

シェルでif -sでファイル0バイトチェックをする場合、しない場合を判断したい場合、-sを使います。

case文を使用する

変数Aが1,2,その他の場合のcase文例です。

LANG=C date

現在日時を表示するにはdateコマンドで表示することが出来ます。

LNAG=C dateとすると税国表記になります。

シェルだとhoge=$(LANG=C date)というように書いたりするのをよく見ます。

スペース区切りの文字列をfor文でループする

“User Company Type”という文字列があった場合に、User,Company,Typeの順でループがしたいとします。

以下のように記述すると簡単にループすることが出来ます。

引数の数だけループ処理を行う

引数の数だけループ処理を行うには、$@を使います。

a.sh

実行すると以下のように出力されます。

変数の%%

変数に%%と使うのをよく見ます。変数展開した値の末尾を削除してくれます。

変数 第一引数 戻り値
${1%%.*} hoge.com hoge
${1%% *} hoge1 hoge2 hoge1
スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA