プログラミング奮闘記

難しいと評判!初心者がN予備校でプログラミングを学んだ感想と備忘録!
No.11:シェルスクリプトについて

N予備校 プログラミングコース 第11回

あなたは2019年の目標って立てましたか?
どんな目標を立てたか覚えていますか?

私は2018年末に2019年の目標を立てました。
その一つにプログラミングを学び仕事として使えるようにすることをあげました。
そして、思い立ったが吉日と「N予備校のプログラミングコース」を申し込みました。

そして受講と同時に自身の振替と、これから始めようと考えている人の参考になればとブログを書き始めました。
今回ブログの移設にともない、再度そのブログを読み返しながら、今思うことを加えて記載していきたいと思います。

また私が受講したのは【2018年度】で、現在公開されている【2019年度】との違いについても書いていきたいと思います。

このブログは、初心者が学びながら書いているため、間違っている場合があります。
分かり次第修正していくつもりです。

そのあたりも含め楽しんでいただければと思います。 

最後に進めていてわからなかったところや気になったところをまとめています。

プログラミング入門 webアプリコース 第11回

前回は、Linuxの後基本的なコマンドを扱いました。

今回は、複数のコマンドを組み合わせて使うことを学びます。

  • 今回の内容まとめ(第2章 4~6)
    ・標準入力、標準出力、標準エラー出力について
    ・viについて
    ・シェルプログラミング(シェルスクリプト)について

 

  • 今回の目標
    標準出力、vi、シェルプログラミングについて知り、扱えるようになる

  • 今回新しく扱っているコマンド等
    ・>, >>, 2>, 2>&1
    ・cat
    ・less
    ・|
    ・grep
    ・:w
    ・:q
    ・:q!
    ・:wq
    ・i , I, a, A
    ・dd
    ・p
    ・chmod
    ・touch
    ・echo 
    ・read
    ・if

標準入力、標準出力、標準エラー出力について

Linuxでは、何かを指示すると実行結果もしくはエラーを表示しひます。
この指示をすることを「標準入力」、実行結果を表示することは「標準出力」、エラーを表示することを「標準エラー出力」と言います。
またこの標準出力をファイルに書き出すことをリダイレクトと言います。

  • 標準入力
    コマンドに引数を指定したり、オプションを指定したりすること

  • 標準出力
    コマンドを実行した結果、コンソールに出てくる色々な表示のこと

  • 標準エラー出力
    コマンドを入力した時にエラーが出ること

  • リダイレクト
    標準出力をファイルに書き出すこと

リダイレクト( > , >>, 2>, 2>&1)

標準出力だけでなく、標準エラー出力もファイルに保存することができます。

標準出力のファイル保存( > , >> )

コマンドの最後に > を記述することで、標準出力をファイルに保存(リダイレクト)することが出来ます。
ここで、 >> と記述することで、すでに存在しているファイルに追記して保存されます。(元のファイルの後ろに追記されます)

標準エラー出力の保存( 2> )

標準エラー出力をファイルに保存する場合は、 2>と記述することで行えます。

標準出力と標準エラー出力の保存 ( 2>&1 )

2>&1と記述すると、標準出力と標準エラー出力の両方が保存されます。

ファイル名を指定しての保存

ls > ○○/××.txt
lsコマンドを実行した結果を、○○ディレクトリの中に××.txtというファイル名で保存します。

 

保存したファイルの表示(cat, less)

catはconcentenateの略で、ファイルの中身を出力することに使います。

cat ○○/××.txt
○○ディレクトリの中に保存されている××.txtファイルの中身が表示されます

表示量が多くなるとcatではページ送りが出来ないので、ページ送りをできるように表示する際にlessコマンドを使用します。
表示されたページでは、Jキーで上に、Kキーで下に移動します。
終了したい場合は、Qキーを入力します。

 

コマンドの結合 (パイプ : |

| (shift + \ で入力可能)で、一つ目のコマンドの結果に対して、二つ目のコマンドを実行します。

ls ○○ | less
ls ○○の結果を、lessコマンドで開きます。

ファイル内の検索 ( grep )

Global Regular Expression Printの略で、文字列を検索することが出来ます

grep AA ○○
○○というファイルの中に、AAという文字列が含まれているかを調べます

パイプ機能を利用した場合、以下のようなことが出来ます。

ls ○○ | grep AA
ls ○○の結果の中で、AAという文字列が含まれている結果のみが表示されます。

保存したファイルを別のファイルに書き出す

cat ○○>××
○○という名前のファイルの中身を、××という名前のファイルとして保存します
(○○と××のファイルの中身は同じ)

また複数あるファイルの中身を結合して標準出力に出力することができます。

cat ○○>>××
○○という名前のファイルの中身を、××という名前のファイルに追記します。
(○○の中身がAAであり、××の中身がBBだった場合、この操作で××の中身はAABBになります。)

viについて

viとは、Linuxにおけるテキストエディタです。
テキストエディタとは、テキスト(文字)を編集するためのソフトです。
つまりLinuxで、Windowsの「メモ帳」にあたるソフトがviです。
Ubuntuでは、vimとよばれるソフトウェアがインストールされています。

vim ○○
○○というファイルを、vimというソフトで開きます。
このとき○○というファイルが存在しない場合は、○○というファイルを作成してそのファイルを開きます。

vimには大きく分けて二つのモード「コマンドモード」「インサートモード」が存在します。

コマンドモード

Escキーを押すことで、コマンドモードになります
コマンドモードでは、以下のようなことが実行できます。

・カーソル移動
hキー:左方向、jキー:右方向、kキー:上方向、jキー:下方向にそれぞれ移動します。

・ファイル保存

・vimの終了

・他のモードへの切り替え

・切り取り、貼り付け

・検索、置換

インサートモード

コマンドモードで、i,aなどを入力することで切り替わり、ファイルに文字を入力することができます。

・i でインサートモードに切り替えた場合は、カーソルの前側に文字を入力できます。

・Iでインサートモードに切り替えた場合は、行の先頭に文字を入力できます。

・aでインサートモードに切り替えた場合は、カーソルの後側に文字を入力できます。

・Aでインサートモードに切り替えた場合は、行の最後に文字を入力できます。

vim内でのコマンドについて

:w

write(書き込む)の略で、vimで開いたファイルを保存することができます。

:q

quit(終了)の略で、vimで開いたファイルを閉じることができます。

:q!

vimで開いたファイルを、編集内容を破棄して終了することが出来ます。 

:wq

:wコマンドと:qコマンドを組み合わせたコマンドで、ファイルを保存して終了します。

 i , I, a, A

それぞれInsert(挿入)、Append(追加)の略で、インサートモードに切り替えます。

dd

カーソルのある行を1行削除します

〇dd (〇には数字を入力)

カーソルのある行から下に〇行分削除します

p

最後に削除した行をカーソルの後ろに張り付けます

  

シェルプログラミング(シェルスクリプト)について

VS Codeで作成したプログラムをLinuxで実行します。
ここでWindowsを使用する場合は、下図のように改行コードをCRLFからLFに変更する必要があります。

また、シェルスクリプトで使用するファイルには先頭に下記のコードを入れる必要があります。
#!/bin/bash

Linuxのファイル権限

Linuxのファイルには、3つのアカウント集団(ファイルの所有ユーザー、所属グループ、その他のユーザー)、3つの権限(読み込み可、書き込み可、実行可)があります。

シェルスクリプトでのコマンド

chmod

chmod ○○ ×× △△
○○にはユーザー(所有ユーザー:u、所属グループ:o、その他のユーザー:o、すべてのユーザー:a)、××にはアクセス権限(実行可:x、書き込み可:w、読み取り可:r)を、△△にはファイル名を入れます。

chmod a+x test.sh
 test.shというファイルに対して、すべてのユーザー(a)に実行可(x)というアクセス権限を追加(+)します

*削除する場合は、+のところを‐にします。

touch

touch ○○
○○という名前のファイルが存在しなかった場合は、○○という名前のファイルを作成します。存在した場合は、○○の更新日時を更新します。

echo 

echo ○○
○○という文字列を表示します

echo テスト
 上記のプログラムを実行すると下のように表示されます。

テスト
 

read

JavaScriptの時のように、変数を設定することが出来ます

read message
 readのコマンドを入力すると文字が打ち込める状態になるので、キーボードで打ち込みます。「変数message = キーボードで打ち込んだ内容」になります。

$をつけることで変数の値を使うことが出来ますので、下記のコマンドでは、キーボードで打ち込んだ内容が、echoコマンドにより表示されます。

echo $message
*応用

read -p “2は偶数ですか? [y/n]” ○○
-pを入れることで、「2は偶数ですか? [y/n]」と表示された上で文字を入力できる状態になります。その後キーボードで入力した内容を、変数○○とします。(○○=「キーボードで入力した内容」)

if

JavaScriptで使用したifコマンドと 似ていますが、少し書き方が異なります

if [ $○○ = ×× ]; then
  echo △△
else
  echo □□
fi
 変数である○○が××の時は△△と表示され、○○が××出ない時は□□と表示されます

 *シェルスクリプトでは、スペースやタブの有無が判断されるので注意が必要です。


以上のように、標準出力、vi、シェルプログラミングについて知り、扱えるようになるのが今回の目標です。

 

ABOUT ME
GoodAmbition
オンライン塾経営者(大阪大学工学部出身の元開発技術者) 自身も家庭教師や塾講師として働きつつ、後輩の育成やオンライン塾を経営しています。 私自身も約10年にわたり家庭教師や塾講師として100人以上の受験生と向き合ってきました。 色々な学生、保護者の方とかかわる中でよく質問される内容や、受験に必要な内容について書いています。 独学で頑張っている人たちへ勉強計画や悩み相談なども受け付けていますので気軽にお問い合わせください。 就職活動や資格の勉強などで悩んでいる方もご連絡ください。 教育・就活、書籍、食べ歩きに関するお話がメインです。 最近取り組んでいること プログラミング、筋トレ、マラソン、ライティングスキル向上etc. 苦手なことを克服しようと頑張っています。