はじめに
ドットインストールのシェルスクリプト入門を見たので、その視聴メモをまとめておきたいと思います。
この記事は、後半(#10~#18)のまとめです。
前半(#01~#09)のまとめは、こちら。
#10 if文で条件分岐をしてみよう (1)
if文
- if文の書き方
if test 条件式; then 処理 fi
- testコマンドは、 [](大括弧)で書き換えることができる
X=70 # if test $x -gt 60; then と同じ if [ $x -gt 60 ]; then echo "OK!" fi
実行結果
$ ./hoge.sh OK!
参考
[](大括弧) は、testを代替する命令。
$ which [ [: shell built-in command
#11 if文で条件分岐をしてみよう (2)
else文とelsif文
- elif は、 else if文。
X=20 if [ $x -gt 60 ]; then echo "OK!" elif [ $x -gt 40]; then echo "Soso..." else echo "NG..." fi
実行結果
$ ./hoge.sh NG...
#12 case文で条件分岐をしてみよう
case文
- case文の書き方
case 値 in パターン1) 処理;; パターン2) 処理;; ... パターンn) 処理;; *) 処理;; (どれにも当てはまらないパターン) esac
# case文 signal="red" case $signal in "red") echo "Stop!" ;; "yellow") echo "Caution!" ;; "green") echo "Go!" ;; # どれにも当てはまらないパターンは *) を使う *) echo "..." ;; esac
実行結果
$ ./hoge.sh Stop!
#13 while文でループ処理をしてみよう
while文
- while文の書き方
while 条件式 do 処理 done
# while文 i=0 while [ $i -lt 10 ] do i=`expr $i + 1` echo $i done
実行結果
$ ./hoge.sh 1 2 3 4 (中略) 9 10
while文で無限ループ
- while文で無限ループさせる場合は、 ヌルコマンド(:(コロン))を使う
- break文でループから抜ける
# while文 i=0 while : do i=`expr $i + 1` if [ $i -eq 3 ]; then continue fi if [$i -gt 10]; then break fi echo $i done
実行結果(3をスキップした結果)
./ foo.sh 1 2 4 5 6 (中略) 9 10
#14 for文でループ処理をしてみよう
for文
- for文の書き方
for 変数 in 値リスト do 処理 done
- seq コマンドは連番を出力するコマンド `seq 1 5` は、1から5までの数字、つまり「1 2 3 4 5」と同じ意味になる。
# for文 a=(1 2 3 4 5) # 全て同じ結果になる # for i in 1 2 3 4 5 # for i in ${a[@]} for i in `seq 1 5` do echo $i done
実行結果
$ ./hoge.sh 1 2 3 4 5
#15 コマンド引数を使ってみよう
コマンドライン引数
- コマンドライン引数の処理に使用する変数のいろいろ
# コマンドライン引数 # $0はプログラム自身 echo $0 # $1は1番目の引数 echo $1 # $2は2番目の引数 echo $2 # 10番目以降は{}を付けないといけない # echo ${10} # $@は引数全部 echo $@ # $#は引数の数 echo $#
実行結果
$ ./hoge.sh a b
./hoge.sh
a
b
a b
2
#16 ユーザーからの入力を受け付けよう
ユーザからの入力の受付
- read文 でユーザーからの入力を受け付ける。
# read while : do # ユーザからの入力を key に格納する read key echo "You pressed $key" if [ $key = "end ]; then break fi done
実行結果
$ ./hoge.sh hoge You pressed hoge foo You pressed foo end You pressed end (プログラムの処理終了)
ユーザからの入力を選択肢で受付
- select文 でユーザからの入力を選択肢で受け付ける。
# select # ユーザから入力を CODE DIE の中で選ばせる select option in CODE DIE do echo "You pressed $option" break; done
実行結果
$ ./foo.sh 1) CODE 2) DIE #? 1 (1を入力する) You pressed CODE
#17 ファイルから入力してみよう
ファイルから入力
- while文にリダイレクションするには done の直後に < を書く
# date.txt hoge foo bar piyo
i=1 # 1行ずつ読み込みlineに格納する while read line do echo "$i: $liine" i=`expr $i + 1` # 引数の1つ目に指定したファイルから入力を受け付ける done <$1
実行結果
$ ./hoge.sh date.txt 1: hoge 2: foo 3: bar 4: piyo
#18 関数を使ってみよう
関数
- 関数の宣言は function を使う(省略可)
fuction 関数名() { 処理 ruturn 値 }
- 関数の呼び出しは () を省略可
- 関数内で宣言した変数は関数外でも使える
# 関数 # 関数の宣言 hello()だけでも可 function hello() { # $1と$2は関数の1番目の引数と2番目の引数 echo "Hello $1 and $2" i=5 echo $i } hello Tom Mike # 関数内で宣言した変数も関数外でも使える echo $i
実行結果
$ ./hoge.sh Hello Tom and Mike 5 5