シェルスクリプトアプリケーション - のために、whileループ

シェルスクリプトの応用(2)は、このような条件文などの条件ならば使用することを学びます。また、それが簡単に、より複雑で強力な完了すること、などの他のプロセス制御ループ構造、枝を含む、スクリプトプログラミング言語としてシェル。私たちは、特定のアプリケーションのcase文、しばらく今日のために知って来ます。

ループのため、

実際には、多くの場合、タスクを複数回実行する必要があるが、各時間は、ターゲットがちょうど同じ治療、他のコマンドと同じでない場合に遭遇します。たとえば:連絡先のシステムに応じて口座番号のリストを作成します。

リピートリストのさまざまなタスクに直面した場合、文は必要性を満たすことができないならば、あなたはfor文を使用する必要があります。

1.for文の構造

forループを使用するときは、異なる値のためのコマンドの同じシーケンスを繰り返し、可能な変数と値のリストを指定する必要があり、ループ変数疲れの出口の価値を知っています。

1)文の文法構造を循環させます。

for 变量名 in 取值列表
do
  命令序列
done

文構造は、変数の名前を指定するユーザのための文の動作のために、右、このタグでキーワードがスペースで区切られた値にプリセットされている複数の値を一覧表示します。ステートメントを実行するための変数は、タスクを達成するために適用する必要があり、......コマンドの間行う位置ループ配列と呼ば行わ。

2)ループ文のフローチャート用

シェルスクリプトアプリケーション(C)

3)ループの使用シナリオ用

1. 循环次数未知;
2.完整遍历整个取值列表。

2.for文のアプリケーション例

要求:
1.根据姓名列表批量创建用户;
2.用户的初始密码是“123456”
实施步骤:
[root@localhost ~]# vim /root/users.txt                 //新建一个取值列表
xiaozhang
xiaoli
xiaowang
xiaosun 
[root@localhost ~]# vim useraddfor.sh               //创建批量创建用户的脚本
#!/bin/bash
ULIST=$(cat /root/users.txt)
for UNAME in $ULIST
do
useradd $UNAME
echo "123456" | passwd --stdin $UNAME &> /dev/null
done
[root@localhost ~]# sh useraddfor.sh                //执行脚本
[root@localhost ~]# tail -4 /etc/passwd             //验证效果
xiaozhang:x:1001:1001::/home/xiaozhang:/bin/bash
xiaoli:x:1002:1002::/home/xiaoli:/bin/bash
xiaowang:x:1003:1003::/home/xiaowang:/bin/bash
xiaosun:x:1004:1004::/home/xiaosun:/bin/bash  

注意:文と他のさまざまなシェルスクリプトのステートメントは、ステートメントが使用されているネストすることができます。

二、whileループ

非常に不規則なオブジェクトのリストに適しており、ソースリストが修正された場合、必要なサイクル数を制御するためのループは、番号順に操作対象の数字は、特定の条件で繰り返し動作を行う場合には、それが使用サイクル--whileに適しています文。

構造1.while声明

ループは、一連のコマンドを繰り返し特定の条件に従って行うことが可能である一方で、この条件は、これまで知られて満足していない使用してください。スクリプトのアプリケーションでは、無限ループの発生を回避しようと、またはコマンド操作が実行できないの背後にあるはずです。したがって、ループ本体のコマンドシーケンスは、適切な時間がもはやそれによってサイクルを終了、確立されるように、試験条件、試験条件を変更していない文を含むべきです。

ループwhile文1)文法構造

while 条件测试操作
do
命令序列
done

2)一方フローチャートループ

シェルスクリプトアプリケーション(C)
whileループを使用する場合、二つの特別なテスト動作条件があります。それは、真(TRUE)とfalse(偽)です。条件として偽の使用は、ループが実行されない場合は、逆に、ループの真の条件として使用し、条件が常に確立表現され、本体はスクリプトを終了(またはexit文は、スクリプトを終了し使用)するように強制しない限り、コマンドの無限列は、それを実行することになります。

3)ループの使用シナリオ一方

1.循环次数已知;
2.必须有一个可以控制循环变量的语句。

2.while文のアプリケーション例

要求:
批量创建有规律编号的用户
实施步骤:
[root@localhost ~]# vim useraddwhile.sh
#!/bin/bash
PREFIX="stu"
i=1
while
[ $i -le 10 ]
do
useradd ${PREFIX}$i
echo "123456" | passwd --stdin ${PREFIX}$i &> /dev/null
let i++
done
[root@localhost ~]# sh useraddwhile.sh 
[root@localhost ~]# tail /etc/passwd
stu1:x:1005:1005::/home/stu1:/bin/bash
stu2:x:1006:1006::/home/stu2:/bin/bash
stu3:x:1007:1007::/home/stu3:/bin/bash
stu4:x:1008:1008::/home/stu4:/bin/bash
stu5:x:1009:1009::/home/stu5:/bin/bash
stu6:x:1010:1010::/home/stu6:/bin/bash
stu7:x:1011:1011::/home/stu7:/bin/bash
stu8:x:1012:1012::/home/stu8:/bin/bash
stu9:x:1013:1013::/home/stu9:/bin/bash
stu10:x:1014:1014::/home/stu10:/bin/bash

、身体の内部を循環ステートメント(I =等価「私は++う」によってexpr $i + 11だけ変数iの値)の条件が満たされるまでのサイクルまで。

三、ケース分岐文

構造1.case声明

文ケース1)文法構造

case  变量值  in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
 ……
* )
默认命令序列
esac

2)ケースステートメントフローチャート

シェルスクリプトアプリケーション(C)

文、いくつかの注目すべき機能を分岐する場合に使用します。
シェルスクリプトアプリケーション(C)

3)case文の使用シナリオ

変数の多くの値があり、必要性は、コマンドシーケンスのそれぞれ異なる値に対して別々に行われ、この場合、ステートメントがステートメントが異なる複数の条件を決定する必要がある場合以外は、非常に類似している場合、マルチブランチ、およびcase文は、単に変数の異なる値を判断します。

アプリケーション例2.case声明

[root@localhost ~]# vim hitkey.sh 
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "你输入的是字母 $KEY"
;;
[0-9])
echo "你输入的是数字 $KEY"
;;
*)
echo "你输入的是非法字符 $KEY"
esac
[root@localhost ~]# sh hitkey.sh 
请输入一个字符,并按Enter键确认:1
你输入的是数字 1
[root@localhost ~]# sh hitkey.sh 
请输入一个字符,并按Enter键确认:w
你输入的是字母 w
[root@localhost ~]# sh hitkey.sh 
请输入一个字符,并按Enter键确认:@
你输入的是非法字符 @

おすすめ

転載: www.linuxidc.com/Linux/2019-08/160120.htm