shell script

linux shell script
シェルスクリプトを操作していきます。

[vagrant@localhost shell]$ echo $SHELL
/bin/bash
[vagrant@localhost shell]$ vi hello.sh

vimを使って、hello.shを書き込みます。正常終了でexit 0とします。コメントは#を使います。

#!/bin/bash

echo "hello world"
exit 0

実行権限を与えます。

[vagrant@localhost shell]$ chmod +x hello.sh
[vagrant@localhost shell]$ ./hello.sh
hello world

変数

#!/bin/bash

s="hello"
echo $s$s
exit 0

数値演算はバッククォート`(shift + @)expr `で処理します。

#!/bin/bash

x=10
echo `expr $x + 2`
exit 0

掛け算は、\でエスケープが必要です。()も\( $x + 5 \)と\のエスケープが必要です。
echo `expr $x \* 2`

配列は添え字を使います。全ての要素は@を使います。

a=(2 4 6)
echo ${a[2]}

echo ${a[@]}
echo ${#a[@]}
exit 0

代入、要素の追加

a[2] = 10
a+=(20, 30)

-eqで正しいか否かの条件分岐を行っています。0は正常、1は不正となります。
-eq, -ne, -gt, -ge, -lt, -le、=, !=, -nt, -ot, -e, -dなどのコマンドがあります。

#!/bin/bash

test 1 -eq 2; echo $?

test -e new.sh; echo $?
論理演算子には、-a(and),-o(or),!などあります。

ifの条件分岐

#!/bin/bash

x=70
if test $x -gt 60
then
 echo "ok!"
fi
x=70
if [ $x -gt 60 ]; then
 echo "ok!"
else
 echo "soso.."
fi

case条件分岐

signal="red"
case $signal in
 "red")
  echo "stop!"
  ;;
  "yellow")
  echo "caution"
  ;;
  "green")
  echo "go!"
  ;;
  *)
  echo "...."
  ;;
esac

while文

i=0
while [ $i -lt 10 ]
do
 i=`expr $i + 1`
 echo $i
done

for文: `seq 1 100`

a=(1 2 3 4 5)
for i in ${a[@]}
do
 echo $i
done

コマンド引数を使うと柔軟にプログラムを書けるようになります。
ユーザからの入力を受け付ける。

while :
do
 read key
 echo "you pressed $key"
 if [ $key = "end" ]; then
  break
 fi
done

ファイルの読み込み

i=1
while read line
do
 echo "$i: $line"
 i=`expr $i + 1`
done <$1

関数

function hello(){
 echo "hello"
}

hello