linuxfor⽆限循环语句,shelll脚本forwhileuntil循环流程控制
编程中的逻辑处理:
顺序执⾏
选择执⾏
循环执⾏
循环
循环执⾏
将某代码段重复运⾏多次
重复运⾏多少次
循环次数事先已知
循环次数事先未知
有进⼊条件和退出条件
for,while,until
for循环
for 变量名 in 列表;do
循环体
done
执⾏机制:
依次将列表中的元素赋值给“变量名”; 每次赋值后即执⾏⼀次循环体; 直到列表中的元素耗尽,循环结束
for循环
列表⽣成⽅式:
(1) 直接给出列表
(2) 整数列表:
(a) {d}
(b) $(seq [start [step]] end)
(3) 返回列表的命令
$(COMMAND)
(4) 使⽤glob,如:*.sh
(5) 变量引⽤
[email protected],$*
for特殊格式
I=10
((I++))
linux在线编程
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 >> /
echo $PASS | passwd --stdin user$NU &> /dev/null
passwd -e user$NU
echo "user$NU is created"
#!/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
#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" }&
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
循环控制语句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