讃岐小僧のEngineering×Techメモ

未経験から挑戦中のプログラミングや、趣味の野球や狩猟について、その他、ビジネスやテクノロジーをテーマに様々なことをつぶやく場所です。

【Linuxの標準教科書9章】シェルの取り扱い等について

はじめに

本記事も前回の記事に続きLinux標準教科書の内容をメモしていきます。

シェルによるプログラミング

Linuxの標準教科書ではプログラミングの要素としてマスターせよ、という内容として下記の4点を挙げている。

  • 順次実行
  • 条件分岐
  • 繰り返し
  • サブルーチン

それでは小僧もこの内容を見ていく。

シェルスクリプトを書いてみる

$ vi lsdate.sh

これまで作成していないファイルなので空白のファイルが表示される。

f:id:keisuke8925gdk:20190922205853p:plain

このファイルに下記のようにプログラムを記載する。

#!/bin/bash
ls
date

一行目の記述#!/bin/bashについて。

ファイルの一行目には利用するシェルの種類とそのコマンドの位置を記述する。
ちなみにMacで現在自分がどのシェルを利用しているのか確認したい場合はこちらのコマンドを実行してみてください。

$ echo $SHELL

小僧の場合はこちらの通りでした。

/bin/bash

今回のシェルはbashを利用していますが、bash以外にも、tcshzshといったシェルも存在するようです。
それぞれのシェルの違い等に関しては私は説明できませんが、お使いのシェルを確認して自分が使っているものについてはどのようなものなのか確認するのも必要かもしれませんね。

それでは早速作成したファイルを実行してみましょう。

$ ./lsdate.sh

> -bash: ./lsdate.sh: Permission denied

あら、実行権限が無いようです。。

## ファイルのパーミッションを確認する

先ほど作成したlsdate.shファイルのパーミッションを確認してみます。

$ ls -la

> -rw-r--r--   1 keisuke  staff     20  9 22 21:07 lsdate.sh

やはり実行権限が無いようです。

パーミッションを変更する

パーミッションを変更するにはchmodコマンドを使います。
下記の通りコマンドを流します。

$ chmod u+x lsdate.sh

chmodコマンドのオプションについてはこちらも参考になると思います。

それでは権限が変更されているか確認してみます。

$ ls -la

> -rwxr--r--   1 keisuke  staff     20  9 22 21:07 lsdate.sh

無事変更されているみたいです。
それでは再度実行してみます。

$ ./lsdate.sh

> Applications Desktop     Documents   Downloads   Library     Movies      Music       Pictures    Public      lsdate.sh   projects
2019922日 日曜日 212651秒 JST

無事に実行されたみたいです。

echoコマンド

echoコマンドは引数で与えた文字列を標準出力に出力するコマンドです。

$ echo [オプション] 文字列

変数を定義する

macのターミナル上で変数を定義できることを知らなかった...(恥)^^;
変数の参照は$変数、下記の例でいうと$abcで参照することができる。

$ abc = 123
$ echo $abc

> 123

bashシェルは一次元配列を使用できる

一次元配列の式展開については{}でくくってあげて、さらにindex番号を[]で指定してあげる必要がある。
これはどのプログラム言語でも同じ感じだと思う。

$ abc[0]=123
$ abc[1]=456
$ echo ${abc[0]} 

> 123

$ echo ${abc[1]} 

> 456

当然このとうな書き方だけでなくインデックス番号を変数にして[]に入れてあげてインデックスを指定することだって可能

$ index = 1
$ echo ${abc[$index]}

> 456

シェル変数と環境変数

シェル変数には、シェル変数と環境変数の2つが存在する。
シェル変数は実行しているシェルの内部でのみ有効、その一方で環境変数は、そこから実行されたコマンド内でも有効になる。

これは普通のプログラミング言語の変数の範囲と同じような考え方だろうという印象だ。

環境変数の作成

環境変数の作成にはexportコマンド利用する。
例えば、「シェル変数abcを環境変数abcにする」場合は下記の通り。

export abc

ただし上記の場合は環境変数としてabcを設定してはいるが、値は格納されていない。
ここで環境変数に値を設定する場合は下記のようにする

export xyz=234

今回はここまで、次回の記事もよかったら眺めてください。