Linux入門 2-4 read_only、PID、trapの使い方


[Linux入門 3-1]:

はじめに

Linux初学者である自分向け用の記事です。Udemyの動画講座を参考にしました。
僕の勉強法は動画を見る実際に動かしてみる問題演習という流れです。

前回まで:Linux入門 2-3


2. シェルスクリプト(問題、テスト、演習、発展問題)

2-9. read_onlyの使い方

値を変更できないようにするためには、readonlyを用いる。

ファイルの中身
[test@ advance]$ cat ad2.sh 
#!/bin/bash
var=12
echo $var
readonly var
var=20
echo $var
実行結果
[test@ advance]$ ./ad2.sh 
12
./ad2.sh: line 5: var: readonly variable
12

関数におけるreadonlyのときは、オプション-fをつける。

ファイルの中身
[test@ advance]$ cat ad2-a.sh 
#!/bin/bash
function hello(){
  echo 'A'
}
hello
readonly -f hello
function hello(){
  echo 'B'
}
hello
実行結果
[test@ advance]$ ./ad2-a.sh 
A
./ad2-a.sh: line 9: hello: readonly function
A
2-10. PID, trapの使い方

シェルスクリプト内で以下の場合にプロセスIDを用いることがある。
・特定のプロセスを落とす
・プロセスIDをファイルに記憶する

ファイルの中身
[test@ advance]$ cat ad3.sh 
#!/bin/bash
echo PID is $$
sleep 100
//実行結果
[test@ advance]$ ./ad3.sh 
PID is 625
//プロセスの確認
[test@ advance]$ ps -ef | grep 625
test         625     298  0 11:40 pts/1    00:00:00 /bin/bash ./ad3.sh
test         626     625  0 11:40 pts/1    00:00:00 sleep 100
test         629     605  0 11:41 pts/2    00:00:00 grep --color=auto 625
//プロセスキル
[test@ advance]$ kill -9 625
//反映結果
[test@ advance]$ ./ad3.sh 
PID is 625
Killed
trap

trapコマンドでプログラム終了時の挙動を設定します。

//プログラム終了時に実行されるコマンド
$ trap “echo exit command is detected” 0
//kill -15でのプロセス終了時に実行されるコマンド
$ trap “echo Exit “ 15
//終了時、割り込み時に実行される
$ trap “rm –f $file && echo file deleted” 0 2

1:再起動、2:割り込み(Ctrl+c)、9:強制停止(trapは設定できない)、15:プロセスの終了
ファイルの中身
[test@ advance]$ cat ad3.sh 
#!/bin/bash
echo PID is $$
trap "echo process end" 0
for i in `seq 1 1 10`;
do
  echo $i
done
実行結果
[test@ advance]$ ./ad3.sh 
PID is 631
1
2
3
4
5
6
7
8
9
10
process end
2-11. DEBUGの方法

・デバッグモードで実行する方法(2つ)

1. $ bash –x ./hello.sh

2. ファイル内に記載
$ vi hello.sh
#!/bin/bash –x
...(省略)
ファイルの中身
[test@ advance]$ cat ad4.sh 
#!/bin/bash -x
echo 'hello world'
arg=$1
echo arg: $arg
実行結果
[test@ advance]$ ./ad4.sh ABC
+ echo 'hello world'
hello world
+ arg=ABC
+ echo arg: ABC
arg: ABC

・プログラム内で動的にデバッグにするか変更する方法

ファイル内に記載する
//デバッグモード
set –x
//元に戻す
set +x 
ファイルの中身
[test@ advance]$ cat ad4.sh 
#!/bin/bash
echo AAA
set -x
echo BBB
set +x
echo CCC
実行結果
[test@ advance]$ ./ad4.sh    
AAA
+ echo BBB
BBB
+ set +x
CCC

シェルスクリプト講義を終えて...

ここまで学べばシェルスクリプトの文法に関してはマスターしたといってもいいと思います。(動画内解説参照)
次回から、LPICの問題編に突入です!!!

Keep up the good work!
[Linux入門 3-1]