シェルスクリプトの練習

この記事は約10分で読めます。

ドットインストールで勉強した覚書!

ドットインストール
3分動画で初心者や独学の方でも無理なく勉強が続くプログラミング学習サービスです。Web制作の基礎から子供向けのゲーム制作レッスン、さらにシステム開発に使われるPHP、Ruby、Pythonなどの入門レッスンまで幅広く言語を体験できます。

 

練習コード

#!/bin/bash

#変数の代入はspaceなしで描くこと!
#使うときは$をつける、変数名が長くなったとき、配列では{}でくくる!
#文字列は””でくくる
#文字列の連結はそのままつなげるだけ
#”の中の変数は展開されない
#“の中は実行結果を返す!!!
echo “***********************************************”
echo “▶文字列 文字列の連結”
s=”hello”;
echo $s
echo “$s”
echo “${s}”
echo $s$s
echo “$s $s”
echo ‘$s’
# 四則演算 ##################################################################
echo “***********************************************”
echo “▶四則演算”
x=10
echo $x
echo $x+2
echo `expr $x + 2`
echo `expr $x – 2`
echo `expr $x / 2`
echo `expr $x \* 2`
echo `expr \( $x + 5 \) \* 2`
#############################################################################
#readonlyの変数を作ることができる。代入するとエラー
echo “***********************************************”
echo “▶readonly”
readonly FILE_NAME=”hello.sh”
FILE_NAME=”hello2.sh”
# 配列 ######################################################################
echo “***********************************************”
echo “▶配列”
a=(2 4 6)
echo $a
echo ${a[1]}
echo $a[1]

#すべての配列を表示
echo ${a[@]}

#要素の数を表示したい時
echo ${#a[@]}

#要素の変更
a[2]=10
echo ${a[@]}

#配列に要素を追加
a+=(20 30)
echo ${a[@]}

d=(`date`)
echo ${d[@]}
echo ${d[3]}
# 条件式 ##################################################################
#条件式の評価は正常終了(0)かどうかで判断することが多い
#$?は直前に行なった結果が正常終了かどうかを返す
echo “***********************************************”
echo “▶条件分岐”
test 1 -eq 2; echo $?
test 1 -eq 1; echo $?

#-eq 等しいか等しくないか
#-ne 逆
#-gt
#-ge
#-lt
#-le

#文字列の評価
#=
#!=

#ファイルの比較
#-nt (newer than)
#-ot
#-e
#-d
test -e test.sh; echo $?

#論理演算子
# -a (and)
# -o (or)
# !
test 1 -eq 1 -a 2 -eq 2; echo $?
# 条件分岐if文 ##############################################################
#test は命令文なので両側に空白を入れること!
#また、それを代介する[]も命令文なので、空白を入れること!
echo “.”
echo “▶条件分岐if文”
x=40

if test $x -gt 60;
then
echo “ok!”
fi

if [ $x -gt 60 ];then
echo “ok!”
elif [ $x -gt 40 ];then
echo “soso..”
else
echo “NG”
fi
# case文 ####################################################################
#case in で挟まれたものが比較対象
#)の前が比較する値
#)と;;で挟まれているのが処理内容
#;;でひとつのcase文の終わり
#*)でその他のケース
echo “***********************************************”
echo “▶case文”

signal=”red”
case $signal in
“red”)
echo “stop!”
;;
“yellow”)
echo “caution!”
;;
“green”)
echo “go!”
;;
*)
echo “…”
;;
esac

# while文 ###################################################################
echo “***********************************************”
echo “▶while文”

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

#1-10までただし,3を飛ばす!
#while : で無限ループ
#continu break が使える
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

# while文 ###################################################################
#contenu break も同様に使えるよ!
echo “***********************************************”
echo “▶for文”

for i in 1 2 3 4 5
do
echo $i
done

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

for i in `seq 1 20`
do
echo $i
done
# コマンド引数 ##############################################################
echo “***********************************************”
echo “▶コマンド引数を使う”

#./test.sh a b とコマンド実行してみると・・
echo $0
echo $1
echo $2
#echo ${10} 10以降の引数は{}でくくる

#すべての引数
echo $@

#引数の個数
echo $#
# ユーザからの入力 ###########################################################
echo “***********************************************”
echo “▶ユーザからの入力”

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

#select文は、breakがないと延々続くよ!
select option in CODE DIE END
do
echo “you pressed $option”
if [ $option = “END” ]; then
break
fi
done
# ファイルから入力 ###########################################################
echo “***********************************************”
echo “▶ユーザからの入力”
i=1
while read line
do
echo “$i: $line”
i=`expr $i + 1`
done <$1
# 関数 ######################################################################
#local 関数内の変数で使うとローカル変数になる
#functionは省略できる
echo “***********************************************”
echo “▶関数”

i=0;
#function hello() {
hello() {
echo “hello $1 and $2”
local i=5
echo $i
}

hello Mike Tom
echo $i

 

 

 

実行結果

varlal@varlal-FMVDA4E041:~/bush/lesten$ ./test.sh data.txt
***********************************************
▶文字列 文字列の連結
hello
hello
hello
hellohello
hello hello
$s
***********************************************
▶四則演算
10
10+2
12
8
5
20
30
***********************************************
▶readonly
./test.sh: 行 38: FILE_NAME: 読み取り専用の変数です
***********************************************
▶配列
2
4
2[1]
2 4 6
3
2 4 10
2 4 10 20 30
2013年 10月 28日 月曜日 03:55:21 JST
月曜日
***********************************************
▶条件分岐
1
0
0
0
.
▶条件分岐if文
NG
***********************************************
▶case文
stop!
***********************************************
▶while文
1
2
3
4
5
6
7
8
9
10
1
2
4
5
6
7
8
9
10
***********************************************
▶for文
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
***********************************************
▶コマンド引数を使う
./test.sh
data.txt

data.txt
1
***********************************************
▶ユーザからの入力
end
you pressed end
1) CODE
2) DIE
3) END
#? 3
you pressed END
***********************************************
▶ユーザからの入力
1: a
2: aa
3: aaa
***********************************************
▶関数
hello Mike and Tom
5
0

コメント

タイトルとURLをコピーしました