Linux研修ブログ

6.シェルスクリプトなどなど

ねぎ -2020-01-20

さいご

Vimエディタの使い方

シェルスクリプトを始める前に シェルスクリプトを編集するときに使われる Vimエディタの使い方について説明します。

Vimには3つのモードがあります。

コマンドモード→インサートモードやexモードへの移行、カーソル移動、文字削除など

インサートモード→文字を入力するモード、コマンドモードから「i」キーを押すと出現

exモード→exコマンドを利用するモード、コマンドモードから「:」キーを押すと出現

コマンドモードでのカーソル移動

入力 操作
:1 ファイル先頭
:$ ファイル末尾
0 行頭移動
$ 行末移動
K
L
J
H

文字列の検索、置換

入力 操作
/ 後方にある文字列を検索
? 前方にある文字列を検索
:%s/【検索文字列】/【置換文字列】/g マッチした文字列を全置換

exモードでのファイルの操作

入力 操作
:+w+q+! 保存して終了
:+q+! 保存せず終了
:+e ファイル名 指定したファイルを開く

そのほかのVimの便利技

$ vi +10 /etc/hosts #/etc/hostsファイルの10行目から開く

シェルスクリプトとは

複数のコマンドをまとめて実行したいときにシェルスクリプトを活用します。

テキストエディタとして標準で利用できるVimnanogeditを使用して作成します。

シェルスクリプトを書いてみる

エディタを起動してシェルスクリプトを書いてみましょう。

1行目にはシェバン(shebang)というシェルを実行するインタプリタを指定する行を追加します

以下がシェバンです。

#!/bin/sh

以下の内容を打ち込みtest.shとしてファイル保存しましょう

#!/bin/sh
for i in 1 2 3; do
    echo $i
done

実行権限を付与して実行

sudo chmod +x ./test.sh
sh test.sh

シェルスクリプトの書き方

改行する場合(バックスラッシュを改行したい末尾につける)

echo "01234\
45678"

変数の宣言と呼び出し

variable = "東京都"
echo $variable #東京都と出力される
echo "ようこそ$variable" #ようこそ東京都
echo 'ようこそ$variable' #ようこそ$variable

実行したコマンドの終了ステータスの取得

ls -ltr ~/
echo $? #成功:0 失敗:1

条件式

条件式はtestコマンドと呼ばれ[]で条件を囲い真だった場合は0、偽だった場合は1

を返します。

条件式でよく使う演算子

条件式 意味
-f ファイル 対象がファイルである場合は真
-e ファイル 対象が存在する場合は真
-d ファイル 対象がディレクトリである場合は真
-w ファイル 対象が書き込み可能である場合は真
-x ファイル 対象が実行可能である場合は真
数値A -eq 数値B 数値Aと数値Bが等しい場合
数値A -ne 数値B 数値Aと数値Bが等しくない場合
数値A -gt 数値B 数値Aが数値Bより大きい場合
数値A -lt 数値B 数値Aが数値Bより小さい場合
数値A -ge 数値B 数値Aが数値B以上の場合
数値A -le 数値B 数値Aが数値B以下の場合
! 条件式 条件が偽だった場合

ファイルが存在しているかどうかを確認

#!/bin/sh
if [ -e /etc/resolv.conf]; then
    echo "exists"
fi

コマンド置換

png_files = $(ls *.png)
echo $png_files

コマンドライン引数

以下のようなシェルスクリプトを用意

#!/bin/sh
echo $0
echo $1
echo $2
$ ./test.sh a b c 

a b c と出力される

for文

for i in 1 10 100; do
    echo $(expr 999 + $i)

上記のコマンドを実行すると、1000,1009,1099と出力される。

シェル関数

#!/bin/sh

check_param(){
if [ ! -z $1 ]
then
        echo "シェルの引数の値は存在します"
else
        echo "シェルの引数の値は存在しません"
fi
}

check_param $1

サービスとしてシェルスクリプトを実行する

アプリケーション起動や停止の管理をするsystemdというものに登録するとサービスとして活用できます。 jounaldというロギングシステムがあり、問題があった場合にはログ出力してくれます。

サービスの稼働はsysytemctl status 【アプリケーション名】で確認することができます

演習課題

  • Q1 リストの最後から10研修
  • Q2 リストから日付と研修と受講者
  • Q3 リストから人気の上位20研修
  • Q4 2019年12月の研修
  • Q5 2019年12月の上位5研修
  • Q6 15名以上集客できた研修
  • Q7 各月の受講者数、1番多かった月と少なかった月
  • Q8 あなたがもっとはったほうがよいと思った研修
  • Q9 川崎の公開の売り上げを上げるためのアドバイス
  • Q10 川崎の公開講座に1日に来る大体の人数

研修でやる演習のヒント

日付順

cut -d ',' -f 3,5,7 kawasaki_koukai.csv | sort -n -r -t ',' -k 3 | head -n 10

カラムをフィルタリング

cat kawasaki_koukai.csv | awk 'FS="," { if($34 < 100) {print $4 $5 $34}}'