見出し画像

IT未経験アラサーの学習記録~Linux標準教科書メモ書き 第9章~

皆様こんにちは。Kです。
自己紹介はこちらにまとめているので、お時間がある方はぜひご覧ください。
ここ数日間、Linux標準教科書(Ver.3.0.4)を用いてハンズオン学習に取り組んでいるので、学習記録兼ノートのメモ書きとして記します。

教材
Linux標準教科書 PDF版(無料)

章末テスト解答参考
Yukishi log. 勝手ながらご紹介させていただきました。

学習方法
①教科書を読む ②ハンズオンで挙動を確認 ③新しい知識、教科書外で調べた内容をnoteにまとめる。必要があれば、Lucidchartで図を作成する。

学習環境
Windows PowerShell に Ubuntu-20.04 を入れました。

筆者ITスキル
AWS CLF-01、AWS SAA-03取得済み。
Web技術・ネットワーク・セキュリティ・クラウドの知識については、「イラスト図解式 この一冊で~」シリーズを1周読んだのみ。


第9章 シェルスクリプト(p139~p168)

9.1 シェルとシェルスクリプト

シェル:OSのカーネル部分を包み込む(貝殻)、コマンド入力を受け付け、その結果をユーザに返す対話機能を提供する。
シェルスクリプト:コマンドの繰り返し処理を自動化するための手段。シェルスクリプトファイル(.sh)に一連処理を書き込み、実行する。

エンジニアの入り口

9.2.2 プログラミングの要素

主に4つ
①順次実行 ②条件分岐 ③繰り返し ④サブルーチン

9.3.1 シェルスクリプトの作成

①vi等のテキストエディタで作成する。
1行目 シェルの指定 利用するシェルの種類とそのコマンド位置
2行目以降 実行するコマンドを1行ずつ記述

どんなシェルがあるのかは,/etc/shellsファイルを開いてみるとわかります。(中略)シェルは大きく分けて,sh系(sh,ksh,bash,zsh)とcsh系(csh,tcsh)の2種類があります。多くのLinuxディストリビューションでは,bashというシェルが標準的に使われており,(中略)シェルが異なると,制御構文や変数の扱い,内部コマンドなどが異なってきます。

日経クロステック リナックスアカデミー 第10回 シェル・スクリプト入門(1)

②パーミッション(アクセス権)を変更してファイルの実行権限をつける

【書式】 chmod u+x ファイル名

8章を参考

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

【書式】 ./ファイル名

./:パス指定。「カレントディレクトリにある(’ファイル名’を実行せよ)」パスが通っている際には不必要。

9.3.2 コメント

【書式】 #コメント

9.3.3 echoコマンド

引数で与えた文字列を標準出力

【書式】 echo [オプション] 文字列

【オプション】
-n 改行を抑制する。
-e 後述するエスケープ文字を有効にする。

9.3.4 変数

変数の代入は「=」を使い、内容の参照は「$」で行う。

$ abc=123
$ echo $abc
123
#変数abcの内容を参照

$ abc[0]=123
$ abc[1]=456
$ echo ${abc[0]}
123
#一次元配列変数を使用可能。要素は[]で囲む。内容表示は{}で配列変数を囲む。
$ index=1
$ index=1
$ echo ${abc[$index]}
456

一次元配列(array):同一の型のデータを(メモリ上に)一列に(隙間をあけずに)並べたもの。違う型のデータを混在して並べて配列とすることはできない。その配列全体を指す「配列名」がついている。繰り返し(for文、while文)と組み合わせて使われることが多い。

配列名はa
配列数N個の配列→添え字 i (index)には0~N-1が入る
a[ i ]=値

シェル変数:シェルの内部でのみ有効
環境変数
:そこ(シェルを指している?)から実行されたコマンド内でも有効

環境変数を作成する。

【書式】export 変数名

p156のコード記述1行目と9行目のcatはこういうシェルスクリプトをあらかじめ書いてくださいねっていう意味?
「3分クッキングのこちらが30分寝かしたものです」と一緒?

9.3.5 read コマンド

標準入力からデータを読み込む。既に変数にデータが入っていた場合上書き。

【書式】read 変数名

$ read abc efg
123 456
$ echo $abc
123
$ echo $efg
456
#複数の変数への代入もできる


9.3.6 シェル変数

一覧表示

【書式】set

変数がシェル変数が多い場合には、パイプとgrepで絞込

削除

【書式】unset 変数名

9.3.7 環境変数

一覧表示

【書式】env

削除 シェル変数と同じ

9.3.8 引用符

文字列を囲む引用符によって処理が分岐する。
引用符の中に引用符を入れることが可能。(入れ子)
’ ’(シングルクォート):内側の$は文字列として認識
” ”(ダブルクォート)
:内側の$付き変数は展開される
` `(バッククォート)
:コマンドとして解釈される
           ex)XYZ=`date` (現在の日時を出力)

9.3.9 引数

オプションを引数として参照する。
$0:コマンド名
$数字
:引数
$#
:引数の数

$ cat args.sh
#!/bin/bash

echo "$1:" $1;
echo "$2:" $2;
echo "$0:" $0;
echo "$#:" $#;

$ ./args.sh aaa bbb ccc
$1: aaa
$2: bbb
$0: ./args.sh
$#: 3

引数:プログラム中で関数やメソッド、サブルーチンなどを呼び出すときに渡す値。処理をする中で、値を代入し、結果を出力する場合に使うパラメータ。

9.3.1. shift 文

引数の順序を前に一つずらす。

$ cat argsshift.sh
#!/bin/bash

echo "$1:" $1;
echo "$2:" $2;
shift
echo "$1:" $1;

$ ./argsshift.sh aaa bbb ccc
$1: aaa
$2: bbb
$1: bbb #$1 がbbb に変わった

9.3.11 エスケープシーケンス

直後の1文字の扱いを変更する。(エスケープ文字/第4章正規表現の表が該当)

【書式】\(バックスラッシュ/日本語キーボードは¥)

行末に付与すると、その改行は無視される。視認性向上。

主なエスケープシーケンス
¥a:ベル文字(アラート)
¥b:1文字分戻る
¥f:ページ送り(クリア)
¥n:改行、復帰
¥r:同じ行の先頭に戻る
¥t:水平タブ
¥v:垂直タブ
¥0:ヌル
¥nnn(nは0~7の数字):8進数表記の文字 変換表

GiXo

9.3.12 source コマンド

シェルの内部コマンドで、指定したファイルを読み込んでシェル環境を設定する。ファイル内容はシェルコマンドと解釈して実行する。

$ cat set.sh
#!/bin/bash
abc=xyz
echo $abc

$ ./set.sh
xyz

$ echo $abc
#変数abc への値の設定はスクリプト内でしか有効でないので、何も表示されない

$ source set.sh #5source コマンドでset.sh を読み込む
xyz
#スクリプト内で設定された変数abc の値がecho で出力された
$ echo $abc
xyz
#sourceコマンドで読み込んだ以降は変数abcに値が格納されたまま

9.4.1 if 文

比較などによる条件分岐

【書式】
if 条件式1 then ~[elif 条件式2 ~ else ~]fi

else:条件が全てあてはまらなかった場合に実行

Linux標準教科(Ver.3.0.4) p154

9.4.2 ファイル属性の確認(test コマンド)

【書式】if test 演算子 ファイル名 ; then ~

Linux標準教科(Ver.3.0.4) p155

test コマンド:評価結果に従い、真(0) か偽(1) かの終了ステータスを返す。[]を使って略式表記もできる。

【書式】test[条件節]; then ~
    if test 条件節 ; then ~

9.4.3 複数の条件を重ねる

書き方がそれぞれ2通り。[]の位置に注意。
論理積(=AND):「AかつBが成立」

【書式】[A -a B] ~
    [A] && [B] ~

論理和(=OR):「AもしくはBが成立」

【書式】[A -o B] ~
    [A] || [B] ~

9.4.4 一対多の条件分岐

【書式】
case 変数 in
      値A)
            処理1;;
      値B)
            処理2;;
      *)
            処理3;;
esac

変数の値がAのとき、処理1を実行。値は |(パイプ)で複数指定可能。変数の値がAでもBでもない場合、処理3を実行。

9.5.1 for 文

値を列挙し、それを対象に繰り返し処理。

【書式】
for 変数 in 値のリスト
do
 処理
done

値のリストにはコマンドの実行結果を使うことができる。
` `でコマンドを囲む。

9.5.2 while/until 文

while:条件が成立する間ループを繰り返す。
until:条件が成立しない間ループを繰り返す。

【書式】
ehile 条件式
do
 処理
done
until 条件式
do
 処理
done

expr コマンドを用いてループカウンタ用の変数をインクリメント(またはデクリメント)しながら、while/until 文で処理できる。

$ cat loop.sh
#!/bin/bash
count=1
while [ $count -le 3 ]
do
echo "この処理は$count 回実行されました"
count=`expr $count + 1`
done

$ ./loop.sh
この処理は1 回実行されました
この処理は2 回実行されました
この処理は3 回実行されました

expr コマンド:引数を式として評価する。算術演算と比較演算ができる。比較演算の結果が真の場合は1、偽の場合は0を評価される。乗算演算子(*)や括弧はエスケープする。(参考:SE学院 v2.0
コマンドのため処理は遅い。bashシェルならば(( ))の記述法のほうが処理は速い。

応用① ファイルの内容を1行ずつ読み込む

while read line
do
 echo $line
done < FILE

応用② 無限ループ

while true
do
  echo LOOP
  sleep 1
done
#「Ctrl」キー+C で無限ループ終了

(参考:SAMURAI エンジニア

9.5.3 select 文

ユーザに対し数値による入力を促す。

【書式】
select 変数 in リスト
do
 処理
done

リストに附番された数値を入力すると、対応する値が返される。「Ctrl」キー+Cで処理を中止する。

9.5.4 繰り返し処理の制御

break:繰り返しを終了
continue
:繰り返しの先頭に戻る

$ cat ./sample.sh
while true
do
 echo "Continue? (y/n)"
 read input
 case $input in
  n) break
    ;;
  y) continue
    ;;
  *) echo "Please input y or n."
    ;;
 esac
done

9.6.1 関数

サブルーチン:プログラミングをする上で、一連の処理をまとめて、再利用できるようにしたもの。言語体系によりさまざまな呼ばれ方をしていて、シェルスクリプトでは関数と呼ばれる。
関数:引数を与え、処理をして結果を返すという機能の集まり。

【書式】
function 関数

 処理

または

関数名 ()

 処理

引数:実行時に関数に続けて記述。関数内部で $ 数値 で参照可能。

9.6.2 return 文

シェルスクリプトの関数で結果を返す。実行すると関数内の処理はそこで終了し、変数が関数の呼び出し元に返される。

【書式】return 変数名

9.7 実際のシェルスクリプト

CentOSを例に挙げているため割愛。

9.8 デバック

デバック:作成したプログラムが思うように動作しない原因を調べること。多くのプログラム言語にはデバック支援ツールが用意されている。

9.8.1 sh コマンド

【書式】sh [オプション] シェルスクリプト(./FILE)

【オプション】
-x:コマンドや変数の中身を表示しながらスクリプトを実行


章一覧

第1章 Linux とは
第2章 Linux のインストール(環境構築不要のため未実施)
第3章 基本的なコマンド
第4章 正規表現とパイプ
第5章 基本的なコマンド2
第6章 viエディタ
第7章 管理者の仕事
第8章 ユーザ権限とアクセス権
第9章 シェルスクリプト
第10章 ネットワークの設定と管理
第11章 プロセス管理
第12章 ファイル管理

この記事が気に入ったらサポートをしてみませんか?