LotosLabo

プログラミング技術とか気になった情報を載せていきます

Linuxシェルスクリプトについて

vi ファイル名.sh

例:

vi file1.sh
(file1.shというシェルスクリプトファイルを作成する)


<手順>
viにてfile1.shのスクリプトを記入していく。

#!/bin/bash
ls
date

シェルの種類であるbashというのを使用します。


コマンド上でシェルスクリプトを実行する際には ./file1.sh で実行できます。

echoコマンド

echo [オプション] 文字列

例:

echo hello

hello
(echoコマンドで指定された文字列を表示)

シェル変数

abc=123
echo $abc

abcに123を代入し
echoコマンドより、abcを変数にします。
変数にするには「$」を付けます。

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

出力結果

123
(abc[0]の内容を表示)


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

出力結果

456
(abc[1]の内容を表示)


シェル種類

シェルにはシェル変数と環境変数の2種類があります。


[環境変数の作成]

例:

export abc
(シェル変数abcを環境変数abcにする)

export xyz=234
環境変数xyzを作成し234を代入する)


シェル変数と環境変数の比較


まずは、二つのシェルスクリプトを作成します。

①vi AAA.sh
(AAAシェルスクリプトファイルを作成)

②vi BBB.sh
(BBBシェルスクリプトファイルを作成)

③viより内容を記入していく

AAAの内容
ーーーーーーーーーーーーーーーーーーーー
#!/bin/bash

xxx=123
export yyy=234
./BBB.sh
(シェル変数xxxと環境変数yyyに値を代入してBBB.shを実行)
ーーーーーーーーーーーーーーーーーーーー

BBBの内容
ーーーーーーーーーーーーーーーーーー
#!/bin/bash

echo xxx=$xxx
echo yyy=$yyy
(xxxとyyyの値を表示する)
ーーーーーーーーーーーーーーーーーー

④実行
./AAA.sh

出力結果
xx=
yyy=234

(AAA.shの中でBBB.shを動作させるとxxxは引き継がれないが、yyyは引き継がれた。)
シェルスクリプトBBB.shの中でxxxの値は表示されない。yyyは環境変数なのでBBB.shまで引き継がれた。

readコマンド

データの読み込みをします

read 変数名


例:

abc=123
echo $abc

123

read abc
[入力欄]ここでは123456と入力した
echo $abc

123456
(シェル変数abcの中身が入れ替わっている。)


基本コマンド

シェル変数一覧表示

set

シェル変数が表示される

シェル変数の削除

unset abc

(シェル変数abcが削除される)

環境変数一覧表示

env

環境変数が表示される

環境変数の削除

unset abc

環境変数abcの内容を削除

コメントの書き方

#コメントとして扱われる

引用符


'(シングルクォート)
"(ダブルクオート)
`(バッククオート)

' シングルクオートは文字列として認識される
" ダブルクオートは引用符内に変数があった場合は変数が展開される
` バッククオートは引用符内にコマンドがあるとそのコマンドを実行

基本プログラム

条件分岐


if文

if 条件式1 then ... elif 条件式2 .... else .... fi


◆文字列比較

a == b  等しい
a != b 等しくない

◆数値比較

a -eq b 等しい
a -ne b 等しくない

a -ge b aがb以上
a -le b aがb以下

a-gt b aがbより大きい
a -lt b aがbより小さい

複数の条件


論理積

[条件1] && [条件2] && [条件3]
[条件1 -a 条件2 -a 条件3]

論理和

[条件1 -o 条件2 -o 条件3]
[条件1] || [条件2] || [条件3]

一対多の条件分岐

if 条件式 then
.
elif 条件式 then
.
elif 条件式 then
.
.
fi


case 変数 in
値A )
処理1;;
値B)
処理2;;
esac



例:

vi case.sh
(作成)

case.sh内容

ーーーーーーーーーーーー
#!/bin/bash

case $1 in
a|A)
echo "引数にa またはA が入力されました";;
b|B)
echo "引数にb またはB が入力されました";;
esac
ーーーーーーーーーーーー

./case.sh a


引数にaまたはAが入力されました

./case.sh B


引数にbまたはBが入力されました



例2:

vi case2.sh

(作成)

case2.sh内容

ーーーーーーーーーーーーーーー
#!/bin/bash

case $1 in
 1)
echo "引数に1 が入力されました";;
 2)
echo "引数に2 が入力されました";;
 *)
echo "1,2 以外が入力されました";;
esac
ーーーーーーーーーーーーーーー

./case2.sh 1

引数に1 が入力されました

./case2.sh 2

引数に2 が入力されました

./case2.sh 0

1,2 以外が入力されました
(どの条件にもマッチしない場合、値*の処理が実行されます)

繰り返し

for 変数 in 値のリスト
do
      処理
done
繰り返しの処理


例:

for in a 1 2 3 4

>do
> echo $i
>done


1
2
3
4

while/until

while 条件式
do
処理
done
条件が成立している間

unitl 条件式
do
処理
done
条件が成立していない間



例:

vi loop.sh
(作成)

loop.sh内容

ーーーーーーーーーーーーーーーー
#!/bin/bash

i=1
while [ $i -le 10 ] 1 ~ 10
do
echo "この処理は$i 回実行されました"
count=`expr $i + 1`  // iに1足していく
done
ーーーーーーーーーーーーーーーー

./loop.sh

この処理は1 回実行されました
この処理は2 回実行されました
この処理は3 回実行されました
この処理は4 回実行されました
この処理は5 回実行されました
この処理は6 回実行されました
この処理は7 回実行されました
この処理は8 回実行されました
この処理は9 回実行されました
この処理は10 回実行されました

select文

select 変数 in リスト
do
処理
done

例:

select neme in "apple" "banana" "orange"
do
echo "You selected $name";
done


1)apple
2)banana
3)orange
$? 1
You selected apple

繰り返しの制御


例:

vi sample.sh
(作成)

sample.sh内容
ーーーーーーーーーーーーーーーーー
#!/bin/bash

 while true
 do
 echo "Continue? (y/n)"
 read input
 case $input in
 n) break
 ;;
 y) continue
 ;;
 *) echo "Please input y or n."
 ;;
 esac
 done
ーーーーーーーーーーーーーーーーー

./sample.shを実行

Continue? (y/n)
y(
y を入力)
Continue? (y/n)
(繰り返しの先頭に戻る)
a(
y,n 以外を入力)
Please input y or n.
Continue? (y/n)
n(
n を入力)
$
(繰り返しを終了する)

サブルーチン


<関数>

function 関数名
{
処理
}

関数名()

処理
}