【初心者向け】シェルスクリプトの書き方入門 シェルスクリプトの基本文法を徹底解説

シェルスクリプトを書いていてこれどうやって書くんだろ?ってことは往々にしてあるかと思います。

そんなシェルスクリプト初心者が参考にできるよう、シェルスクリプトの書き方を徹底的に解説していきたいと思います。

シェルスクリプト初心者がつまづきやすいところも紹介できればと思います!

実行方法

まずはシェルスクリプトの実行方法です。3つの実行方法があります。

3つめだけファイルの実行権限を変更しなければいけませんが、どれでも問題ないです。

bash test.sh
sh test.sh
chmod 755 test.sh
./test.sh

標準出力

次にシェルスクリプトで、文字列を標準出力に出力させる書き方です。

console.logのようにデバックとして使ったりもします。

ダブルクオートでもシングルクオートでも大丈夫ですが、プロジェクトなどでルールを統一すべきだと思います。

シェルスクリプト

#!/bin/sh

echo "Hello World"
echo 'Hello World'
echo Hello World

実行結果

Hello World
Hello World
Hello World

変数

シェルスクリプト

#!/bin/sh

str1="test1"
str2='test2'
str3=test3

echo $str1
echo $str2
echo $str3

実行結果

test1
test2
test3

変数とイコールの間は、スペースを入れてはいけないというルールがあるので、気をつけましょう。

シェルスクリプト

#!/bin/sh

str1 = "test1"

echo $str1

実行結果

test.sh: line 3: str1: command not found

四則計算

シェルスクリプト

#!/bin/sh

integer1=4
integer2=2

echo $((integer1 + $integer2))
echo $((integer1 - $integer2))
echo $((integer1 * $integer2))
echo $((integer1 / $integer2))

実行結果

6
2
8
2

※ちなみにこういう書き方はできない

シェルスクリプト

#!/bin/sh

integer1=4
integer2=2
integer3=integer1+integer2

echo integer1+integer2
echo $integer1+$integer2
echo $integer3

実行結果

integer1+integer2
4+2
integer1+integer2

if文の書き方

文字列比較

シェルスクリプト

#!/bin/sh

str1="A"
str2="a"
str3="A"

if [ $str1 = $str2 ]; then
  echo "1と2は同じだよ!!"
elif [ $str1 = $str3 ]; then
  echo "1と3は同じ!!"
else
  echo "1と同じ文字はないよ!!"
fi

実行結果

1と3は同じ!!

> < (大なり小なり)で数値比較

シェルスクリプト

#!/bin/sh

######################################
######  > -gt (greater than or equal)
######################################

integer1=1
integer2=2


if [ $integer1 -gt $integer2 ] ; then
  echo "integer2はinteger1より大きい"
else
  echo "integer2はinteger1以下"
fi

#################################
######  < - le (less than equal)
#################################

integer3=3
integer4=4

if [ $integer3 -lt $integer4 ] ; then
  echo "integer3はinteger4より小さい"
else
  echo "integer3はinteger4以上"
fi

実行結果

integer2はinteger1以下
integer3はinteger4より小さい

ファイルの存在確認

シェルスクリプト

#!/bin/sh

file_name="test.sh"

if [ -f $file_name ] ; then
  echo "あるよ!"
else
  echo "ないよ!"
fi

実行結果

あるよ!

AND条件

シェルスクリプト

#!/bin/sh

str1="a"
str2="a"
str3="b"
str4="b"

if [ $str1 = $str2 -a $str3 = $str4 ] ; then
  echo "同じ"
else
  echo "違う"
fi

実行結果

同じ

OR条件

シェルスクリプト

#!/bin/sh

str1="a"
str2="a"
str3="b"
str4="c

if [ $str1 = $str2 -o $str3 = $str4 ] ; then
  echo "どっちかは同じ"
else
  echo "どっちも違う"
fi

実行結果

どっちかは同じ

for文の書き方

シェルスクリプト

#!/usr/bin/bash

for i in aa bb cc
do
  echo $i
done

実行結果

aa
bb
cc

よく使われるfor文の書き方(ループ回数が決まっている場合)

シェルスクリプト

#!/usr/bin/bash

for i in `seq 10`
do
  echo "test$i"
done

実行結果

test1
test2
test3
test4
test5
test6
test7
test8
test9
test10

シェル実行時に引数を使う

実行コマンド

bash test.sh a 1

シェルスクリプトでは、下記のように特別な変数が使える。

シェルスクリプト

#!/bin/sh

echo "$0" # スクリプト名
echo "$1" # 1番目の引数
echo "$2" # 2番目の引数
echo "$#" # 引数の数

実行結果

test.sh
a
1
2

よくあるキーボード入力(y/n)の書き方

シェルスクリプト

#!/bin/bash

echo "こちらでよろしいですか? [Y/n]"
read ANSWER

case $ANSWER in
    "" | "Y" | "y" | "yes" | "Yes" | "YES" ) echo "YES!!";;
    * ) echo "NO!!";;
esac

実行結果

ok? [Y/n]
y
YS!!

ok? [Y/n]
n
NO!!

ファイルを1行ずつ読み込む

inputファイル

% cat test.txt
ruby
java
python
c
c+

シェルスクリプト

#!/bin/sh

while read line
do
  echo $line
done < test.txt

実行結果

ruby
java
python
c
c+

関連

シェルスクリプトのif文の書き方を徹底解説
Linuxで特定の文字が含まれる行数を取得したい
シェルスクリプトのfor分の書き方を徹底解説
シェルスクリプトの関数の書き方を徹底解説
シェルスクリプトで変数と文字列を結合する

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA