日々の業務、お疲れ様です。
今日の記事は自分が試して、エラーが解消できたパターンを忘れないように整理したいと思います。
もし、シェルを修正したり、書いたりしてネットに転がっている対象法でも解決しない場合など参考にしていただければ助かります。
シェルを書いているということは、経験者が多いと思いますので、対処法だけを知りたい場合などは先にリンクへ飛んでも問題ありません。
・シェルとは?
・どんなことに使えるのか?
・エラーコードと対処法まとめ
まずは、シェルについての確認です。
シェル(Shell)とは、コンピュータのOSとユーザの間で、指示のやり取りを行うプログラムです。
LinuxやUNIXなどのオペレーティングシステムなどで使われます。
代表的なシェルの種類としては、Linuxでよく使われる、bash(バッシュ)やsh(シェル、エスエイチ)、zsh(ズィーセル)などがあります。
今の業務で使っているのはshファイルなので、ここでは、shをメインに解説していきたいと思います。
そして、シェルとは、ユーザが入力したコマンドをOSの核になるカーネルと呼ばれるOSに処理を実行させ、その結果をユーザに表示する役割のことをいいます。
簡単なイメージとしては、橋渡し的な役割です。
ユーザの入力を受け取り、OSに伝えるためのものと思ってもらってもよいです。
また、よくある勘違いとして、シェルとシェルスクリプトがあります。
シェルは実行環境であり、言語ではありあません。
シェルスクリプトは、シェルで実行される一連のコマンドなどをまとめたものをいいます。
今回は、このシェルスクリプトの内容になります。
シェルスクリプトはどんなことに使えるのでしょうか?
イメージ出来そうなものとしては、は繰り返しの作業の自動化などがあります。
ログイン、ログアウト作業や常に同じファイルをコピーするといった流れは毎日同じ文字列を入力するのはしんどいです。
そこでスクリプトを流せば簡単にできるので、この部分を自動化するのに役立ちます。
その他にも、バックアップの自動化やファイル・ディレクトリの管理、
システム管理メンテナンス、特定のソフトウェアのインストールやアップデートの際にもシェルスクリプトが活用されることがあります。
また、個人でもスクリプトを書けるようになると、自分でバッチを作ったり、連携させたりして、どんどん作業が楽になるメリットがあります。
企業では、cronなどのUnix系でスケジュールに従って、プログラムを自動実行するものもあります。
windowsに例えると、タスクスケジューラーのようなイメージです。
その他には、データ抽出作業がります。
LinuxやUnixを操作する際には、ログファイルやデータの出力結果から必要な情報を抜き出すデータ抽出作業をする場合があります。
その際にもgrepコマンドなどを使うことができ、if文やfor文を組み合わせてある条件で実行できれば、とても作業が楽になります。
その他にも、高度なものとして、ソフトウェア、プログラミング言語を併せた業務効率化ができるようになります。
コマンドの操作だけでなく、起動や停止、再起動なども自動的に実行できるようになります。
JavaやRuby、Pythonなどのプログラミング言語と組み合わせても可能になります。
スクリプトを学んだ次のステップアップにも向いていますし、需要もあるため、どんどん挑戦していきましょう。
シェルスクリプトを勉強することはエンジニアとしての第一歩となりますので、是非マスターしてきましょう。
プログラミングを勉強することは、エラーを対処していくことでもあります。
エラー対処のことをデバッグとも言います。
デバッグ作業が苦手としている方多いですが、自分で調べる力が身に付き、最終的には自力でエラー解決でき、
どんなプログラミングでもある程度はどこがおかしいか見当をつけることができるので苦手意識を持たずに精進していきましょう!
さて、ここからは自分で業務の中で調べながら解決したことや、復習の際に合うアウトプットとして、書いていきたいと思います。
沢山デバック、トレースなどをしていく中でエラーが起きたら都度解決したものを追記していきたいと思います。
基本前提:文字列がUTF-8になっているか?
LFモードで表示されているか?一文的にCRLFとかになっていないか?
最初から作成する際は、エラーがないファイルをローカルにコピーして使うか、設定を保存した後に新たに書き始める。
・構文エラー:予期しないファイル終了(EOF)です。
解決方法if文の[]部分が足りなかった。
NG例:
if [ ${START_P_TYPE} -gt ${Now_Time} ] ; then
echo $SHELL_NAME”_START_Time_val_Error!
exit 1
fi
OK例:
if [ ${START_P_TYPE} -gt ${Now_Time} ] ; then
※if文の中の[]が足りなかったため。
・予期しないトークン’fi’周辺に構文エラーがあります。
if文終了の前
後にセミコロンやfiが抜けていないこと。
また、fiではなく、ifとかになっていて正しく認識しない場合がある。
いかがでしょうか?
まだまだ、練習していく中で自分で対処できた方法などのエラーがあれば追記していきたいと思います。