shelll脚本 for while until 循环
发布时间:2020-12-16 01:43:03 所属栏目:安全 来源:网络整理
导读:流程控制 编程中的逻辑处理: 顺序执行选择执行循环执行 循环 循环执行 将某代码段重复运行多次 重复运行多少次 循环次数事先已知 循环次数事先未知 有进入条件和退出条件?for,while,until for循环 for 变量名 in 列表;do 循环体 done执行机制:依次将列表中
流程控制
编程中的逻辑处理:顺序执行 选择执行 循环执行 循环循环执行 将某代码段重复运行多次 重复运行多少次 循环次数事先已知 循环次数事先未知 有进入条件和退出条件 ?for,while,until for循环for 变量名 in 列表;do 循环体 done 执行机制: 依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束 for循环列表生成方式: (1) 直接给出列表 (2) 整数列表: (a) {start..end} (b) $(seq [start [step]] end) (3) 返回列表的命令 $(COMMAND) (4) 使用glob,如:*.sh (5) 变量引用 [email?protected],$* for特殊格式双小括号方法,即((…))格式,也可以用于算术运算 双小括号方法也可以使bash Shell实现C语言风格的变量操作 I=10 ((I++)) for循环的特殊格式: for ((控制变量初始化;条件判断表达式;控制变量的修正表达式)) do 循环体 done 控制变量初始化:仅在运行到循环代码段时执行一次 控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做条件判断 练习:用for实现1、判断/var/目录下所有文件的类型 read -p "input catalogue (eg:/var/):" DIRNAME for FILE in `ls -l ${DIRNAME} | tr -s ‘ ‘|cut -d‘ ‘ -f9` do NAME=${DIRNAME}$FILE [ -b $NAME ] && echo "${NAME} The is blockfile" [ -c $NAME ] && echo "${NAME} The is devicefile" [ -d $NAME ] && echo "${NAME} The is catalogue file" [ -f $NAME ] && echo "${NAME} The is flat file" [ -L $NAME ] && echo "${NAME} The is link file" [ -p $NAME ] && echo "${NAME} The is pipe file" [ -S $NAME ] && echo "${NAME} The is paper file" done ? 2、添加10个用户user1-user10,密码为8位随机字符 for NU in `seq 10` do useradd user$NU PASS=`cat /dev/urandom | tr -dc ‘0-9‘|head -c8` echo user$NU:$PASS >> /data/userpasswd.txt echo $PASS | passwd --stdin user$NU &> /dev/null passwd -e user$NU echo "user$NU is created" done 3、编写脚本,提示输入正整数n的值,计算1+2+…+n的总和 #!/bin/bash sum=0 read -p "pleass input positive integer:" N for (( i=1;i<=$N;i++ ));do let sum+=i done echo $sum 4、计算100以内所有能被3整除的整数之和 #!/bin/bash # #******************************************************************** #Author: wangyakun #Date: 2019-08-22 #FileName: for_3number.sh #URL: http://www.magedu.com #Description: The test script #Copyright (C): 2019 All rights reserved #******************************************************************** sum=0 for (( i=3;i<=100;i+=3 ));do let sum+=i done echo $sum 5、编写脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态 #!/bin/bash read -p " pleass input Network segment (eg:192.168.7.0):" IPS NET=`echo $IPS | sed -nr ‘s/(.*)..*.[^.]$/1/p‘` for i in {1..255};do { for j in {1..255};do { ping -c1 -w1 ${NET}.$i.$j &> /dev/null && echo "${NET}.$i.$j is up"||echo "${NET}.$i.$j is down" }& done }& wait done wait echo "scan hostis finished" while循环while CONDITION; do 循环体 done ?CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后 会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false” 终止循环 ?因此:CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被 修正 ?进入条件:CONDITION为true ?退出条件:CONDITION为false until循环?until CONDITION; do 循环体 ?done ?进入条件: CONDITION 为false ?退出条件: CONDITION 为true 循环控制语句continue?用于循环体中 ?continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为 第1层 while CONDTIITON1; do CMD1 ··· if CONDITION2; then continue fi CMDn ... done 循环控制语句break?用于循环体中 ?break [N]:提前结束第N层循环,最内层为第1层 while CONDTIITON1; do CMD1 ... if CONDITION2; then break fi CMDn ... done 循环控制shift命令shift [n] ?用于将参量列表 list 左移指定次数,缺省为左移一次。 ?参量列表 list 一旦被移动,最左端的那个参数就从列表中删除。while 循环遍 历位置参量列表时,常用到 shift ?./doit.sh a b c d e f g h ?./shfit.sh a b c d e f g h 示例:doit.sh #!/bin/bash # Name: doit.sh # Purpose: shift through command line arguments # Usage: doit.sh [args] while [ $# -gt 0 ] # or (( $# > 0 )) do echo $* shift done 示例:shift.sh #!/bin/bash #step through all the positional parameters until [ -z "$1" ] do echo "$1" shift done echo 创建无限循环while true; do 循环体 ?done ?until false; do 循环体 ?Done (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |