0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【ShellScript】記述方法ついて

Posted at

インフラエンジニアのため、構築や運用等で使用するシェルスクリプトを作成するようになりました。
シェルスクリプトの作成は初めてのため、業務中に学習したことを記載します。

シェルスクリプトとは

Linux OSのコマンドを上から順に実施するスクリプトです。
普段ならMacのターミナルやWindowsのTeraTermでLinuxのコマンドを手動で実行しますが、
.shファイルにコマンドを記載し、そのファイルを実行することで.shファイルに記載されていることが実行されます。
bash, sh, csh, zshで書き方が少し異なります。

使用シェルを定義する

シェルスクリプトでは、ファイルの頭に以下のような記載をします

#!/bin/bash

こちらの意味は使用するシェルの場所を指定してます。
使用できるシェルはcat /etc/shellsで確認できます

$ cat /etc/shells
/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/zsh

私のMacbookでは上記シェルが使用できるようです

実行方法

まずファイルに実行権限を付与します

$ chmod 755 test.sh

実行方法は以下になります

$ ./test.sh

権限が足らないと以下のようにはじかれます。

$ ./test.sh
zsh: permission denied: ./test.sh

confファイル内の変数を読み込む

サーバ名はドメイン名などの固有情報を.shファイルに記載したくない場合、confファイルに
記載し、.shファイル内で読み込むことでconfファイルに記載している変数を読み込むことができます。
例として以下のように記載します

test.conf
USER="testuser"
SERVER="xxx.xxx.xx.xx"
test.sh
#!/bin/bash
. test.conf
echo ${USER}
echo ${SERVER}

以下で実行結果です。

$ ./test.sh 
testuser
xxx.xxx.xx.xx

confファイルに定義した内容がechoで表示されました。

if文

条件で処理を分岐させます。

if [ 条件式 ]; then
  処理内容
fi

if文は、ifで始まり、fiで終わります。
比較演算子では以下のようになります。

  • 数値の比較
    数値の比較は以下になります()の部分は個人的な覚え方です(あっているかどうかは)
比較演算子 内容
数値1 -eq 数値2 数値1と数値2が等しい(equal)場合True
数値1 -ne 数値2 数値1と数値2が等しくない(not equal)場合True
数値1 -gt 数値2 数値1が数値2より大きい(greater than)場合True
数値1 -ge 数値2 数値1が数値2以上(greater equal)の場合True
数値1 -lt 数値2 数値1が数値2より小さい(little than)の場合True
数値1 -le 数値2 数値1が数値2以下(little equal)の場合True
  • 文字列の比較
    文字列の比較は以下になります。
比較演算子 内容
文字列1 = 文字列2 文字列1と文字列2が等しい場合True
文字列1 != 文字列2 数値1と数値2が等しくない場合True
-n 文字列 文字列の長さが1以上の場合True
-z 文字列 文字列の長さが0の場合True

また、if文のつなげたい場合はelifで繋げることができる

if [ 条件式1 ];than
  内容1
elif [ 条件式2 ]; than
  内容2
else
  内容3
if

上記の場合、条件式1を満たす場合、内容1、
条件式2を満たす場合、内容2、
どれも満たさない場合、内容3が実行されます。

for文

繰り返し実行するものはfor文を使用します

for 変数名 in リスト名
do
  処理内容
done

以下実行例です

test.sh
#!/bin/bash
for FRUIT in apple banana cherry
do
  echo ${FRUIT}
done

実行結果は以下

$ ./test.sh
apple
banana
cherry

最後に

シェルスクリプトで運用スクリプトを作成するときは、
対象ログや標準出力等に表示するようにリダイレクトや、
awkなどを使用してこのファイルのこの部分を取得して変数に入れるなどの処理が多いと思います。
Linuxコマンドに詳しくなると幅広いシェルスクリプトが書けるようになると思うので、
特にインフラエンジニアでコードを書いたことがない人は、
シェルスクリプトとLinuxコマンドの学習が必要と感じました。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?