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行ずつ記述
②パーミッション(アクセス権)を変更してファイルの実行権限をつける
③シェルスクリプトを実行する
./:パス指定。「カレントディレクトリにある(’ファイル名’を実行せよ)」パスが通っている際には不必要。
9.3.2 コメント
9.3.3 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文)と組み合わせて使われることが多い。
シェル変数:シェルの内部でのみ有効
環境変数:そこ(シェルを指している?)から実行されたコマンド内でも有効
環境変数を作成する。
p156のコード記述1行目と9行目のcatはこういうシェルスクリプトをあらかじめ書いてくださいねっていう意味?
「3分クッキングのこちらが30分寝かしたものです」と一緒?
9.3.5 read コマンド
標準入力からデータを読み込む。既に変数にデータが入っていた場合上書き。
$ read abc efg
123 456
$ echo $abc
123
$ echo $efg
456
#複数の変数への代入もできる
9.3.6 シェル変数
一覧表示
変数がシェル変数が多い場合には、パイプとgrepで絞込
削除
9.3.7 環境変数
一覧表示
削除 シェル変数と同じ
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章正規表現の表が該当)
行末に付与すると、その改行は無視される。視認性向上。
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 文
比較などによる条件分岐
else:条件が全てあてはまらなかった場合に実行
9.4.2 ファイル属性の確認(test コマンド)
test コマンド:評価結果に従い、真(0) か偽(1) かの終了ステータスを返す。[]を使って略式表記もできる。
9.4.3 複数の条件を重ねる
書き方がそれぞれ2通り。[]の位置に注意。
論理積(=AND):「AかつBが成立」
論理和(=OR):「AもしくはBが成立」
9.4.4 一対多の条件分岐
変数の値がAのとき、処理1を実行。値は |(パイプ)で複数指定可能。変数の値がAでもBでもない場合、処理3を実行。
9.5.1 for 文
値を列挙し、それを対象に繰り返し処理。
値のリストにはコマンドの実行結果を使うことができる。
` `でコマンドを囲む。
9.5.2 while/until 文
while:条件が成立する間ループを繰り返す。
until:条件が成立しない間ループを繰り返す。
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 文
ユーザに対し数値による入力を促す。
リストに附番された数値を入力すると、対応する値が返される。「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 関数
サブルーチン:プログラミングをする上で、一連の処理をまとめて、再利用できるようにしたもの。言語体系によりさまざまな呼ばれ方をしていて、シェルスクリプトでは関数と呼ばれる。
関数:引数を与え、処理をして結果を返すという機能の集まり。
または
引数:実行時に関数に続けて記述。関数内部で $ 数値 で参照可能。
9.6.2 return 文
シェルスクリプトの関数で結果を返す。実行すると関数内の処理はそこで終了し、変数が関数の呼び出し元に返される。
9.7 実際のシェルスクリプト
CentOSを例に挙げているため割愛。
9.8 デバック
デバック:作成したプログラムが思うように動作しない原因を調べること。多くのプログラム言語にはデバック支援ツールが用意されている。
9.8.1 sh コマンド
【オプション】
-x:コマンドや変数の中身を表示しながらスクリプトを実行
章一覧
第1章 Linux とは
第2章 Linux のインストール(環境構築不要のため未実施)
第3章 基本的なコマンド
第4章 正規表現とパイプ
第5章 基本的なコマンド2
第6章 viエディタ
第7章 管理者の仕事
第8章 ユーザ権限とアクセス権
第9章 シェルスクリプト
第10章 ネットワークの設定と管理
第11章 プロセス管理
第12章 ファイル管理
この記事が気に入ったらサポートをしてみませんか?