Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2811

【シェルスクリプトBash入門②】 基本文法

$
0
0

この記事では、《シェルスクリプトの基本文法》について、
僕が学習した内容をまとめています。

  • 『変数』の使い方
  • 『条件分岐』と『繰り返し処理』の使い方
  • 『関数』の使い方

こういった内容についてまとめています。

※本記事は、自分で学習したことのまとめ用として書いています。
尚、解説で誤った点があれば、スローして頂ければ喜んでキャッチしますのでお願い致します。

--- 【シェルスクリプト入門】 ---

変数(文字列)

①: 変数の代入

--- 例題 ---

sample.sh
#!/bin/bashval="Hello World!!"

=の両端に半角スペースを入れないよう注意

②: 変数の展開

--- 例題 ---

sample.sh
#!/bin/bashval="Hello World!!"echo"${val}"

""だけでは変数展開されないので注意

--- 実行結果 ---

$ ./sample.sh
Hello World!!

変数(数値)

①: 変数の代入

--- 例題 ---

sample.sh
#!/bin/bashx=10

echo$xecho$x+1

=の両端に半角スペースを入れないよう注意

--- 実行結果 ---

$ . sample.sh
10
10+1

※計算されていないことに注意

計算するには…

sample.sh
#!/bin/bashx=10

echo$xecho$x+1
echo`expr$x + 1`

上記のように・・・

『計算結果』や『コマンドの出力結果』を変数に設定した場合は…

expr``(バッククォート)を使用する。

※半角スペースを忘れないよう注意

--- 実行結果 ---

$ . sample.sh
10
10+1
11

四則演算

--- 例題 ---

sample.sh
#!/bin/bashx=10

echo`expr$x + 1`# 足し算echo`expr$x - 1`# 引き算echo`expr$x\* 2`# 掛け算echo`expr$x / 2`# 割り算

--- 実行結果 ---

$ . sample.sh
11
9
20
5

条件分岐|if文、for文

  1. if文
  2. case文

条件分岐①: if文

--- 例題 ---

sample.sh
#!/bin/shstr="hello"if[$str= hello ];then
    echo"${str}"echo"Hello!!!"elif[$str= world ];then
    echo"${str}"echo"World!!!"else
    echo"Hello World!!!"fi
  • if文は[]内に条件を入れ、thenをつける
  • 複数の条件を扱うときはelifでつなぎ、if同様thenをつける
  • elseの後は何も書かず、条件分岐の終わりはfiで閉じる

--- 実行結果 ---

$ . sample.sh
hello
Hello!!!

【おまけ】 シェルスクリプト内で実行したコマンドが正常終了したかを判定

--- 例題 ---

sample.sh
#!/bin/bash. dummy.sh  # dummy.shを実行exit_flag=$?if["${exit_flag}"= 0 ];then
    echo"${exit_flag}"echo"dummy.shは正常終了"else
    echo"dummy.shは異常終了"fi

コマンド実行後に$?によって、直前に実行したコマンドのステータスコードが取得できる。

  • 成功(正常終了): 0
  • 失敗(異常終了): 0以外全て(1 〜 255)

--- 実行結果 ---

$ . sample.sh
0
dummy.shは正常終了

条件分岐②: case文

--- 例題 ---

sample.sh
#!/bin/shstr="hello"case$strin"hello")echo"Hello";;"world")echo"World";;*)echo"hello World!!";;esac
  • caseの後に判定したい変数などを指定し、その後に条件)といった形で記述する
  • *)は多くのプログラミング言語におけるswitch~case文のdefaultに該当する
  • 末尾に;;を付ける

--- 実行結果 ---

$ . sample.sh
Hello

繰り返し処理(ループ)|for文、while文

  1. for文
  2. while文

繰り返し処理①: for文

--- 例題①: 複数の文字列 ---

sample.sh
#!/bin/shfor str in hello world aaa
do
    echo"${str}"done

--- 実行結果 ---

$ . sample.sh
hello
world
aaa

--- 例題②: 配列 ---

sample.sh
#!/bin/sharray=(1 2 3 4 5)for i in${array[@]}do
    echo"${i}"done

--- 実行結果 ---

$ . sample.sh
1
2
3
4
5

--- 例題③: seq ---

seq 第一引数 第二引数と記述することで・・・

第一引数以上〜第二引数以下の整数を順番にループしてくれる。

for文を使うなら、seqコマンドは覚えておきたい

sample.sh
#!/bin/shfor i in`seq 1 5`do
    echo"${i}"done

--- 実行結果 ---

$ . sample.sh
1
2
3
4
5

繰り返し処理②: while文

--- 例題 ---

sample.sh
#!/bin/shi=0
while[$i-lt 10 ]do
    echo${i}i=`expr$i + 1 `done
オプション説明
num1 -lt num2num1 が num2 より小さいなら

--- 実行結果 ---

$ . sample.sh
0
1
2
3
4
5
6
7
8
9

関数 【3パターン】

  1. 基本系
  2. function省略系
  3. 引数を渡す

パターン①: 基本系

--- 例題 ---

sample.sh
#!/bin/bashfunction hello(){echo"hello"}

hello # 関数呼び出し

--- 実行結果 ---

$ ./sample.sh
hello

パターン②: function省略系

--- 例題 ---

sample.sh
#!/bin/bash

hello(){echo"hello"}

hello # 関数呼び出し

--- 実行結果 ---

$ . sample.sh
hello

パターン③: 引数を渡す

--- 例題 ---

sample.sh
#!/bin/bash

hello(){echo"hello $1 and $2"}

hello John Alex # 関数呼び出し

--- 実行結果 ---

$ . sample.sh
hello John and Alex↲

【おまけ】 現在の日付・時刻を取得する

今日の日付と現在の時刻が、2020年 3月4日 22時00分00秒だった場合

--- 例題 ---

sample.sh
#!/bin/bashtoday1=`date"+%Y%m%d%H%M%S"`today2=`date"+%Y_%m%d_%H%M%S"`echo"${today1}"echo"${today2}"

--- 実行結果 ---

$ . sample.sh
20200305215333
2020_0305_215333

まとめ・感想

surfing-1.jpg

これからしばらく『シェルスクリプト』を書きそうなので、しっかり基礎を理解していきたい。

今後は…

if文(test文)のオプション

をまとめる予定。


Viewing all articles
Browse latest Browse all 2811

Trending Articles