2020年7月29日星期三

bash Shell の基本ルール

① 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変数のため、関数外の参照はできない、出力結果はなし

没有评论: