🥱

シェルスクリプトの基礎②~記述の基本~

2021/01/10に公開

はじめに

くーばねてすをやっつけるためにLinuxさんと仲良くさせていただいているが、Linuxさんにはシェルのコマンドを格納しておくシェルスクリプトというファイルがあるらしいのでそれをまとめてみた。

概要

■シェルスクリプトの記述の基本
■変数
■クォーティング

をまとめた^^

■シェルスクリプトの記述の基本

シェルスクリプトには色んな記述形式がある。

■順番書き方式
シェルスクリプトには複数のコマンドを実行したかったら順番に何行でも記述することができる。

$ cat rootls.sh
#! /bin/bash
echo "root directory"
cd /
ls -l
$ . ./rootls.sh
root directory
total 20
dr-xr-xr-x  18 root root  257 Nov 20 03:25 .
dr-xr-xr-x  18 root root  257 Nov 20 03:25 ..
-rw-r--r--   1 root root    0 Nov 20 03:25 .autorelabel
略

できた!

■;で区切り方式
シェルスクリプトは;で区切ることができる。

$ cat rootls.sh
#! /bin/bash
echo "root directory";cd /;ls -l
$ . ./rootls.sh
root directory
total 20
dr-xr-xr-x  18 root root  257 Nov 20 03:25 .
dr-xr-xr-x  18 root root  257 Nov 20 03:25 ..
-rw-r--r--   1 root root    0 Nov 20 03:25 .autorelabel
略

できた!('_')
またシェルスクリプトでは空行は無視されるので分かりやすく空行でかいてもOK。

■改行方式
コマンドラインが長くなって見ずらい時は、改行もできる。

$ cat rootls.sh
#! /bin/bash
echo \
"root directory";cd /;ls -l
$ . ./rootls.sh
root directory
total 20
dr-xr-xr-x  18 root root  257 Nov 20 03:25 略

この改行方式は普段シェルにコマンドラインを打ち込むときも使える('_')

$ echo \
> "hello\
> world"
helloworld

■コメント形式
シェルスクリプトにはコメントの記述ができる。
コメントの記述はコメントの頭に#を付ける。
#は行頭でも、行の途中でも指定できる。
ファイルが読み込まれるときに#がついたところから行末まではコメントとして無視される。

■変数

シェルスクリプトではコマンドだけでなく、変数を格納することができる。
シェルスクリプトに格納する変数なのでこれをシェル変数という。

注意点
■シェル変数を指定するときはシェルスクリプトの中では $ をつけない。
■変数の参照は $変数名 となる。

$ cat appdir.sh
#! /bin/bash
appdir=/home/suidou/myapp (変数を指定する$はつけない)
echo $appdir        (参照する時は$をつける)
$ ./appdir.sh
/home/suidou/myapp

できた!(><)
■=の前後もスペースはいらないので注意。色んな言語をやってる人はスペースをあけてしまうそう
■変数名に指定できるのは、**アルファベット、数字、
** だけになる。
■先頭に数字、_を指定することはできない。
■大文字小文字、どちらも使える。一般的に大文字が環境変数、シェル変数が小文字になる。
■変数名の後ろにコマンドが続くときは、後ろに続くコマンドも変数とみなされてしまうので、変数を区切る。区切るときは、変数を{}で囲む。

■クォーティング

コマンドの引数を指定するときは通常スペースを使うが、例えばスペースを含むファイルを引数として指定するのにはどうすればいいのか(>_<)

・スペースのある場合はクォートで囲む。
my file → "mt file"
・あとメタ文字を指定するときもこれまでのようにクォートで囲む
be.*r  →  'be.*r'

あっ!

■まって!そういえば" "と' 'の違いってなんなの('_')?

" " と' 'の違いは、変数が読み込まれるか読み込まれないかだ。

結構ちがうじゃん('_')

" "と' 'の違いを出力してみた
$ cat country.sh
#! /bin/bash
country=japan         (※countryはjapanに置き換えよ)
echo 'I came from $coutry'  (※それぞれ別に囲ってみる)
echo "I came from $coutry"
. ./country.sh
I came from $coutry      (※出力結果)
I came from japan

' 'で囲ったほうは変数が認識されなかったけど" "で囲った方はちゃんと変数が反映された!

まとめ

まよったら""だな!と思った('_')
まずい、銭湯閉店時間だから帰らないと!

Discussion