① shellのコマンドは基本的に、小文字で書きます。
② `cmd`よりcmdを実行します。
③ 関数()にパラメータ名がなくても、$iによりパラメータ参照が可能です。
1、shファイルの宣言
#!/bin/bash
2、変数
#コメント、文字列宣言&初期化
s1="hello"
#変数使用
echo $s1 :hello
echo "$s1" :hello
echo "${s1}" :hello
echo $s1$s1 :hellohello
echo '$s1' :$s1 ''の場合、変数値ではなく、そのまま
echo "$s1abc$s1" :helloabchello
echo "$s1 $s1" :hello hello
#数値変数宣言&初期化
s2=10
#変数使用
echo $s1 :10
echo $s1+2 :10+2 計算ではなく、。文字列とされる
echo `expr $s1+2` :12 計算にはexpr計算式で
echo `expr $s1-2` :8 計算にはexpr計算式で
#読み取り専用変数
readonly y=10
3、配列
a=(2 4 6)
echo $a :2 0番と見なされ
echo ${a[0]} :2 0番出力。{}が必須
echo ${a[1]} :4 1番出力
echo ${a[2]} :6 2番出力
echo ${a[@]} :2 4 6 全出力
echo ${#a[@]} :3 配列数を出力される
※注意:
echo $a[0] :2[0] 原因:2と[0]の文字列結合とみなされる。
#要素の追加
a+=(20 30)
echo ${a[@]}: 2 4 6 20 30
#要素内容変更
a[2]=10
4、条件
数値比較(eq=, ne!=or<>, gt>, ge>=, le<=, lt<)、$?結果
test 1 -eq 2; echo $? :1
test 1 -eq 1; echo $? :0
test 1 -ne 2; echo $? :0
test 1 -gt 2; echo $? :1
文字列比較 =, !=
ファイル日付比較
-nt newerthan, -ot olderthan
論理 -a and, -o or, !否定
5、if文
x=80
if test $x -gt 60
then
echo "$x>60 is true"
fi #endif=fi
######## test =[] #######
if [$x -gt 60]; then
echo "$x>60 is true"
elif [$x -gt 50]; then # 同じ行に複数処理を書く時に ";"が必須
echo "$x>50 is true"
else
echo "$x>50 is false"
fi
6、case文
signal="red"
case $signal in
"red")
echo "stop!"
;; #;; により、break
"yellow")
echo "caution!"
;;
"green")
echo "go!"
;;
*) #default:
echo "..."
;;
esac #caseの逆
7、while文
i=0
while [ $i -lt 10]
do
i = `expr $i+1`
echo ${i}
done
#無限ループ
while :
do
j = `expr $j+1`
if [$j -gt 10]; then
continue
fi
if [$j -gt 20]; then
break
fi
echo ${j}
done
8、for文
for i in 1 2 3 4 5
do
echo ${i}
done
a=(1 2 3 4 5 7 9 10)
for i in ${a[@]}
do
echo ${i}
done
for i in `seq 1 5` # 1~5
do
echo ${i} # continue, break OK.
done
9、引数
echo $0 自身
echo $1 第一引数
echo $2 第二引数
echo ${10} 第10引数 10番目以降の引数には{}が必要
echo ${@} 引数全部
echo ${#} 引数の数
※stdin入力を受ける引数
while :
do
read key
echo "you pressed ${key}"
if [${key} = "end"]; then
break
fi
done
※選択項入力により受ける引数
echo "which language do you favorite?"
select option in JAVA JS C#
do
echo "I LIKE ${option} too."
break
done
--------------------------
1) JAVA
2) JS
3) C#
#? 2
I LIKE JS too.
10、ファイルから入力
data.txt:
hello
world
nagoya
hello.sh:
#!/bin/bash
i=1
while read line #受け取ったデータを1行ずつ処理
do
echo "${i}: ${line}"
i=`expr $i+1`
done <$1 #第一引数により、ファイル名data.txtを受け渡す
実行結果:
$ ./hello.sh data.txt
1: hello
2: world
3: nagoya
11、関数
hello.sh
#!/bin/bash
function test(){
echo "hello"
}
#functionを省略可能.
test2(){
echo "it's test2."
i=5
echo ${i}
local j=10
echo "${i} ${j}"
}
test2
echo "-------"
echo ${i}
echo ${j}
実行結果:
$ ./hello.sh
it's test2.
5 10
-------
5 #jは local変数のため、関数外の参照はできない、出力結果はなし
没有评论:
发表评论