現場でのシェルについて(1)
この記事では、現場でよく使用するシェル操作のコマンドについてご紹介します。
現場の要件によっては、関数やループによる繰り返し処理やexpectなどのやや特殊コマンドを求められますが、基本的には下記コマンドや処理などが使えるレベルであれば現場で通じるかと思います。
あとは、実際に現場の既存コードを参照したり、再現したい処理をネットで調べ、組み込み・テスト環境で挙動を検証しながら、確認するということが大事になります。
- ファイル操作コマンド(ls,cd,cat,cut,rm,cp.mv,touch,grep,find,viまたはvimなど)
- 権限操作コマンド(chmod,chown)
- shellスクリプトコマンド(echo,sed,if,case,for,while,awkなど)
※shellスクリプトの中でもファイル操作系コマンドは普通に使用されます。 - shellスクリプト処理等(リダイレクト・configなどの外部ファイルの読込・戻り値取得・変数・シングルクォーテーション・ダブルクォーテーション・バッククォート・正規表現など)
目次
学習1:bashバージョンについて
現場では、あまりbashのバージョンを確認することはありませんが、システム構築やそのほか情報確認などでOSのバージョンを確認することはありますので
$ cat /etc/redhat-release (OSがRHELの場合)
$ cat /etc/centos-release (OSがCentOSの場合)
【参考】
https://dekiruengineer.com/engineer/linux_os_version_check
余談ですが、私が現場で経験してきたLinuxOSは殆ど「RHEL(RedHat Enterprice Linux)」です。逆にCentOSは、あまり見ることはありませんでした。
学習2:whichコマンドについて
whichコマンドは、環境変数PATHに登録されているディレクトリにある実行可能ファイルを検索します。検索はPATHの登録順で、デフォルトでは最初に見つかったファイルだけを表示します。
例)【sample@localhost】$which passwd
/usr/bin/passwd
※シェルスクリプトを記述するときに一行目にシェルのパスを打ちこむ必要があるため、確認しておいた方が良いと思います。
※シェルスクリプトは一行目に「シバン」と呼ばれる、そのシェルスクリプトが使用する言語のパスを記入します。
どの言語であるか?(usr/bin/bashだったり、/bin/shだったり、bi/kshだったり)これについては実際に参画する現場のプログラムを見て、最初に確認しておくと良いかと思います。
学習3:echoコマンドについて
下記はシェルスクリプトにおいて良く使用されるパターンになります。
(1)シェルスクリプト実行時のメッセージや、エラーメッセージを表示する処理の基本として
(2)コーディング中にシェルスクリプト内の変数にちゃんと値が取得出来ているかの確認として
(3)Bログやその他ファイルへのリダイレクトとして
例1:開始メッセージを出す場合など
# ツール名を変数${TEST_TOOL}に定義
TEST_TOOL=/home/yamada/test.sh
# 開始メッセージ出力
echo “処理を開始します。TEST_TOOL=${TEST_TOOL}” > test.log
↓実行するとターミナル(teratarm等)には下記の様に表示されます。
処理を開始します。TEST_TOOL=/home/yamada/test.sh
補足として
上記例のように、echoコマンドで文章の中の変数の値を出力する場合は、基本的にダブルクォーテーション(“)で囲む必要があります。シングルクォーテーション(‘)の場合は完全に変数も文字烈として扱います。
例2:シングルクォーテーション
# 開始メッセージ出力
echo ‘処理を開始します。TEST_TOOL=${TEST_TOOL}’ > test.log 2&>1
↓実行するとターミナル(teratarm等)には下記の様に表示されます。
処理を開始します。TEST_TOOL=${TEST_TOOL}’
学習4:リダイレクトについて
『学習3』にも記載していますが、主にログファイルや、その他必要なファイル(tmpファイル等)へ転記する目的で使用されることが多いです。
例えば、演習3の例①を実行する事で「処理を開始します。TEST_TOOL=/home/yamada/test.sh」という開始メッセージがtest.logへ転記されます。
<例:ファイルの内容を転記>
cat test.txt > aaaaaa.txt
→test.txtの内容がaaaaaa.txtに転記されます。
<注意点>
リダイレクト記号(>)は1つと2つでは意味が異なるので注意してください。
1つ(cat AAA.txt > BBB.txt):上書き(BBB.txtの内容はAAA.txtの内容になります)
2つ(cat AAA.txt >> BBB.txt):追記(BBB.txtの内容は残り、次行からAAA.txtの内容が追記されます)
学習5:sortコマンドについて
ファイルの内容をソートする際などに使用できます。基本的にパイプを経由します。shellスクリプトのチェック処理等で使用される場合があります。
ls -l /home/test | sort
→/home/testのls結果をソート
cat /home/test/test.txt | sort
→/home/test/test.txtの内容をソート
TEST=`cat /home/test/test.txt | sort`
→/home/test/test.txtの内容をソートし、その結果を変数${TEST}に定義
※変数定義時、バッククォート(`)は囲んだ内容のコマンドを実行し、その結果を変数に定義します。
これは使われる頻度は結構多いかと思いますので、ダブルクォーテーション、シングルクォーテーションと共にしっかり覚えておくとよいと思います。