はじめに
本記事も前回の記事に続きLinux標準教科書の内容をメモしていきます。
シェルによるプログラミング
Linuxの標準教科書ではプログラミングの要素としてマスターせよ、という内容として下記の4点を挙げている。
- 順次実行
- 条件分岐
- 繰り返し
- サブルーチン
それでは小僧もこの内容を見ていく。
シェルスクリプトを書いてみる
$ vi lsdate.sh
これまで作成していないファイルなので空白のファイルが表示される。
このファイルに下記のようにプログラムを記載する。
#!/bin/bash ls date
一行目の記述#!/bin/bash
について。
ファイルの一行目には利用するシェルの種類とそのコマンドの位置を記述する。
ちなみにMacで現在自分がどのシェルを利用しているのか確認したい場合はこちらのコマンドを実行してみてください。
$ echo $SHELL
小僧の場合はこちらの通りでした。
/bin/bash
今回のシェルはbashを利用していますが、bash以外にも、tcsh
,zsh
といったシェルも存在するようです。
それぞれのシェルの違い等に関しては私は説明できませんが、お使いのシェルを確認して自分が使っているものについてはどのようなものなのか確認するのも必要かもしれませんね。
それでは早速作成したファイルを実行してみましょう。
$ ./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 2019年 9月22日 日曜日 21時26分51秒 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
今回はここまで、次回の記事もよかったら眺めてください。