Shellスクリプトtestコマンド大全、プロセス制御文および関数の応用

5414 ワード

testテストコマンド大全、範囲:整数テスト、文字列テスト、ファイルテスト.
整数テスト
test v1 -eq v2 # 
test v1 -gt v2 # v1>v2
test v1 -ge v2 # v1>=v2
test v1 -lt v2 # v1

文字列テスト
test str1=str2 # 
test str1!=str2 # 
test str1 # 
test -n str1 # 
test -z str1 # 

ファイルテスト
test -d file # 
test -f file # 
test -x file # 
test -r file # 
test -w file # 
test -a file # 
test -s file # 0

注意:通常testコマンドは単独ではなくif文と連用されます.
プロセス制御文
一、if-else分岐構造
if構文フォーマット:
if条件
then
論理ブロック(通常はコマンド)
fi
1行書き:端末の書き方に適用:
if条件;thenロジック;fi
if-else構文フォーマット:
if条件
then
論理ブロック(通常はコマンド)
else
ろんりブロック
fi
#  1: , 50, 1; , 0
read -p " " num
if test $num -gt 50
then echo "1"
else echo "0"
fi

if else-if else構文フォーマット:
if条件1
then
論理ブロック(通常はコマンド)
Elif条件2
then
ろんりブロック
else
ろんりブロック
fi
#  2: , 90, “A”; 80, “B”; 70, “C”; , “D”;
read -p " " sc
if [ $sc -ge 90 ]     #test , [] 
then echo "A"
elif [ $sc -ge 80 ]
then echo "B"
elif [ $sc -ge 70 ]
then echo "C"
else echo "D"
fi

ブランチ構造はネストすることもできます.複数の条件が結合されている場合は、次のオプションがあります.
-a:論理と2つの条件が成立した場合、結果はtrue
-o:論理または2つの条件が1つ成立すればtrueとなる
#  3: a,b, a>=b a , a-b ; a

二、case多選択文
case文は値とパターンを一致させ、一致に成功し、対応する論理ブロックを実行します.
構文:
ケース値in
モード1)
ろんりブロック
;;
モード2)
ろんりブロック
;;
esac
#  2
read -p " " sc
nu=0
if [ $sc -ge 90 ]     #test , [] 
then nu=1
elif [ $sc -ge 80 ]
then nu=2
elif [ $sc -ge 70 ]
then nu=3
else nu=4
fi
case $nu in
1) echo "A";;
2) echo "B";;
3) echo "C";;
4) echo "D";;
esac

三、for循環構造
書式:
for変数in名前テーブル
do
ろんり
done
1行に書きます.
for変数inリスト;doロジック;done;
#  : 1-10
for num in {1..10}
do echo "num:$num"
done
#  
for num in {1..10};do echo "$num";done;

四、selectフォームループ
構文:
select変数inリスト
do
ろんりブロック
done
#  : 1-10
select num in {1..10}
do echo "num:$num"
done
#  
select num in {1..10};do echo "$num";done;

selectとforループの違いは、selectが出力されると、出力オブジェクトの前にシーケンスがあることです.
五、whileサイクル
構文:
while条件
do
ろんりブロック
done
#  : 1-10
w=1
while [ $w -le 10 ]
do echo "$w"
w=$[$w+1]
done

六、無限循環
構文:
while :
do
ろんりブロック
done
または
while true
do
ろんりブロック
done
七、untilサイクル
untilループが論理trueに実行されたときに停止
構文:
until条件
do
ろんりブロック
done
#---until 
#  1 100 , >100   
num=1
sum=0
until test $num -gt 100
do 
    sum=$[sum+num]
    num=$[num+1]
done
echo "1-100 :$sum"

八、breakとcontinue
ループを早期に終了したい場合(すなわちループから飛び出したい場合)はキーワードbreakを使用します
次のループを終了したい場合は、キーワードcontinueを使用します.
#  1:  100 ”hello shell“, 50 , 
i=1
while [ $i -le 100 ]
do
   echo " $i :hello world"
   i=$[i+1]
   if test $i -gt 50
   then
       break
   fi
done
#  2: ,  
read -p " " num
temp=$[num/2]
i=2
flag=0
while [ $i -le $temp ]
do
    if test $[num%i] -eq 0
    then  flag=1
    fi
    i=$[i+1]
done
if test $flag -eq 0
then echo "$num "
elif test $flag -eq 1
then echo "$num "
fi
#  3:  1 100 ,  25 50 75  
sum=0
for i in {1..100}
do
    if [ $i -eq 25 -o $i -eq 50 -o $i -eq 75 ]
    then continue
    fi
    sum=`expr $sum + $i`
done
echo "$sum"

九、shift指令
役割:パラメータを左に移動し、実行するたびに、パラメータシーケンスを順次左に移動し、$#の値を1つ少なくし、多くの場合、各パラメータを個別に処理するために使用され、移動したパラメータは使用できません.
#   , ,  " "
#   , 
sum=0
if [ $# -ne 0 ]
then
    echo " :$#"
    while [ $# -gt 0 ]
    do
         sum=$[$sum + $1]
         shift
    done
    echo " :$sum"
else
    echo " "
fi
#  
./file.sh 1 2 3 4 5
#  
 :5
 :15

関数の適用
一、基礎
shellスクリプトでは、関数を定義したり、論理をカプセル化したり、呼び出したりすることもできます.
構文:
[function] functionName(){
ろんり
}
呼び出すときは、()を持たずにfunctionNameを直接書けばいいです.
#  : 1-100 
sum=0
function sum(){
for i in {1..100}
do
        sum=`expr $sum + $i`
done
echo "1-100 :$sum"
}
sum

説明:1、キーワードfunctionは書かなくてもいいです.2、returnキーワード、プラスしてもプラスしなくても、需要を見ます.加算すると、戻り値は0-255の数字しかありません.追加しない場合は、最後のコマンドの結果を戻り値とします.
#  : 1-100 
a=0
function num(){
for b in {1..100}
do
        a=$[a+b]
done
return $a
}
num
result=$?
echo "result:$result"

入出力リダイレクト:
通常、システムコマンドは、端末から入力データを受信し、出力する情報を端末に送信します.入力する位置を指定したり、出力する位置を指定したりする必要がある場合があります.これが「リダイレクト」の概念です.リダイレクトコマンド
説明
command > file
出力をfileにリダイレクト
command < file
入力をfileにリダイレクト
command>>file出力を追加でfileにリダイレクト
shellファイルは外部スクリプトを導入します.
コンセプト:Shellスクリプトの内部では、他の外部スクリプトを参照することもできます.これにより、独立したファイルとして共通のコードを簡単にカプセル化できます.Shellスクリプトは外部スクリプトの構文を以下のように参照する.   fileName      #   .ファイルとの間には必ずスペースや
source    fileName
Shellスクリプトデバッグ:
1、sh-x scriptスクリプトを実行し、すべての変数の値を表示します2、sh-n scriptスクリプトを実行しないで文法をチェックするモードで、すべての構文エラーを返します