シェルスクリプトの応用(2)は、このような条件文などの条件ならば使用することを学びます。また、それが簡単に、より複雑で強力な完了すること、などの他のプロセス制御ループ構造、枝を含む、スクリプトプログラミング言語としてシェル。私たちは、特定のアプリケーションのcase文、しばらく今日のために知って来ます。
ループのため、
実際には、多くの場合、タスクを複数回実行する必要があるが、各時間は、ターゲットがちょうど同じ治療、他のコマンドと同じでない場合に遭遇します。たとえば:連絡先のシステムに応じて口座番号のリストを作成します。
リピートリストのさまざまなタスクに直面した場合、文は必要性を満たすことができないならば、あなたはfor文を使用する必要があります。
1.for文の構造
forループを使用するときは、異なる値のためのコマンドの同じシーケンスを繰り返し、可能な変数と値のリストを指定する必要があり、ループ変数疲れの出口の価値を知っています。
1)文の文法構造を循環させます。
for 变量名 in 取值列表 do 命令序列 done
文構造は、変数の名前を指定するユーザのための文の動作のために、右、このタグでキーワードがスペースで区切られた値にプリセットされている複数の値を一覧表示します。ステートメントを実行するための変数は、タスクを達成するために適用する必要があり、......コマンドの間行う位置ループ配列と呼ば行わ。
2)ループ文のフローチャート用
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)一方フローチャートループ
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 + 1
1だけ変数iの値)の条件が満たされるまでのサイクルまで。
三、ケース分岐文
構造1.case声明
文ケース1)文法構造
case 变量值 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;; …… * ) 默认命令序列 esac
2)ケースステートメントフローチャート
文、いくつかの注目すべき機能を分岐する場合に使用します。
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键确认:@ 你输入的是非法字符 @