shell循环--for

1. for循环

1.1 语法结构

for variables in {list} 
  do
     command
     command
   done

或者

for varianles  in  a b c
do 
 command
 command
done

举例

for var in {1..10};do echo $var;done
for var in $(seq 10);do echo $var;done

for var in 1 2 3 ;do echo $var;done

for var in $(seq 10);do echo $var;done

1.2 不带列表循环

由用户指定参数和 参数的个数

for variables 
do 
 command
done

举例

#!/bin/bash
for var 
do 
 echo $var
done


echo "脚本后边有$#个参数"

1.3 类似于C语言的循环

for((expr1;expr2;expr3))
do
 command
done

for((i=1;i<5;i++))
do
 command
done

1.4 举例

1.4.1 计算1到100之间奇数的和

#!/bin/bash
sum=0
for i in {1..100..2}
do 
  sum=$[ $sum + $i ]
  或者
  let sum=sum+i
  或者
  let sum=$sum+$i

done

echo  "和为i:$sum"




for((i=1;i<100;i+=2))
do
 let sum+i
done

2. 循环体的控制

do done之间的内容

continue跳出本次循环,执行下一次
break结束循环,执行循环体外边的内容
exit直接跳出

案例:

#!/bin/bash
for i in {1..5}
do
 [ $i -eq 2 ] && break || echo "iwei$i"
done
echo "hahah"

2.1 输入一个正整数,判断是否为质数

#!/bin/bash
read -p "请输入一个正整数:" ZS

if [ $ZS -eq 1 ];then
   echo "$ZS不是质数" && exit
elif [ $ZS -eq 2 ];then
   echo "$ZS 是质数" && exit
fi


for((i=2;i<ZS;i++))
do 
  if [ $[$ZS%$i] -eq 0 ];then
     echo "$ZS 不是质数"
     exit
  fi  
done
echo "$ZS是质数"
for i in `seq 2 $[$ZS-1]`

2.2 批量加5个新用户,以u1到u5命名,并统一加一个新组,组名为class,统一改密码为123

#!/bin/bash
#批量加5个新用户,以u1到u5命名,并统一加一个新组,组名为class,统一改密码为123

grep -w class /etc/group
[ $? -ne 0 ] && groupadd class
for i in {1..5}
do 
 useradd u$i -G class 
 echo 123 |passwd --stdin u$i
done

2.3 批量新建5个用户stu1~stu5,要求这几个用户的家目录都在/rhome.提示:需要判断该目录是否存在

#!/bin/bash
#判断/rhome是否存在
[ -f /rhome ] && mv /rhome /rhome.bak
test ! -f /rhome -a ! -d /rhome && mkdir /rhome
或者
[ -f /rhome ] && mv /rhome /rhome.bak || [ ! -d /rhome ] && mkdir /rhome 
#创建用户,循环5次
for ((i=1;i<=5;i++))
do
	useradd -d /rhome/stu$i stu$i
	echo 123|passwd --stdin stu$i
done

2.4 写一个脚本,局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里,这是一个局域网内机器检查通讯的一个思路。

#!/bin/bash
ip=192.168.80

for i in {40..50}
do
 ping -c1 $ip.$i &>/dev/null
 if [ $? -eq 0  ];then
   echo "$ip.$i id ok"  >> /tmp/ping.txt
 else
   echo "$ip.$i is no" >> /tmp/noping.txt

 fi

done

并行执行:
{程序}&表示将程序放到后台并行执行,如果需要等待程序执行完毕再进行下面内容,需要加wait

#!/bin/bash
ip=192.168.80

for i in {40..50}
do
{
 ping -c1 $ip.$i &>/dev/null
 if [ $? -eq 0  ];then
   echo "$ip.$i id ok"  >> /tmp/ping.txt
 else
   echo "$ip.$i is no" >> /tmp/noping.txt

 fi
}&
done
wait
echo "ip is ok"

2.5 输入一个年份,判断是否是润年

#!/bin/bash
read -p "请输入一个年份:" year
if [ $[$year%4] -eq 0 -a $[$year%100] -ne 0 ];then
    echo "$year 是闰年"
elif [ $[$year%400] -eq 0 ];then
    echo "$year 是润年" 
else
   echo "$year不是闰年"

fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长安有故里y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值