读取不同的变量值,用来逐个执行同一组命令
for语句结构
for 变量名 in 取值列表
do
命令序列
done
++ 自身变量+1
– 自身变量-1
+=5 自身变量+5
-=5 自身变量-5
*=5 自身变量*5
/=5 自身变量/5
%=5 自身变量%5
Let sum+=$1 两个用法一样 ((sum+=$1))
$()与``都是运算,命令替换
${}跟变量
$[]与(())整数运算
[]判断
#!/bin/bash
for ((i=1;i<=10;))
do
echo $i
let i++
done
或
#!/bin/bash
for ((;;))
do
if [ $i -le 10 ];then
echo $i
let i++
else
break //退出当前循环
fi
done
#!/bin/bash
for ((;;))
do
if [ $i -le 10 ];then
echo $i
let i++
else
exit 0/1 //退出应用程序 0正常退出,1异常退出,返回的状态值
fi
done
echo $?
#!/bin/bash
list=$(cat /opt/users.txt) //定义集合
for user in $list //遍历创建用户
do
useradd $user //添加用户
echo "123456" | passwd --stdin $user
echo "创建$user成功"
done
#!/bin/bash
list=$(cat /opt/ipaddr.txt)
for IP in $list
do
ping -c 3 -i 0.2 -W 3 $IP > /dev/null
if [ $i -eq 0 ];then
echo "${IP} is up"
else
echo "${IP} is down"
fi
done
echo “最终i的值是:$i”
#!/bin/bash
sum=0
for ((i=1;i<=100;i++))
do
if [ `expr $i % 2` -eq 0 ];then
let sum=$sum+$i
fi
done
echo "$sum"
或
#!/bin/bash
sum=0
for ((i=0;i<=100;i+=2))
do
let sum+=$i
done
echo "$sum"
#!/bin/bash
sum=0
for ((i=1;i<=100;i++))
do
if [ `expr $i % 2` -eq 1 ];then
let sum+=$i(或者let sum=$sum+$i)
fi
done
echo "$sum"
或者
#!/bin/bash
sum=0
for ((i=1;i<=100;i+=2))
do
let sum+=$i
done
echo "$sum"
重复测试某个条件,只要条件成立则反复执行
while语句结构
while 条件测试操作
do
命令序列
done
break 退出本层循环
continue 跳过continue以下语句直接进入下一次循环
#!/bin/bash
while [ $i -le 20 ]
do
echo $i
let i++
done
一共添加20个用户,stu1,stu2…stu20
初始密码123456
#!/bin/bash
name="stu"
i=1
while [ $i -le 20 ]
do
useradd ${name}${i}
echo "123456" | passwd --stdin ${name}${i}
let i++
done
#!/bin/bash
i=1
while [ $i - le 100 ]
do
if [ `expr $i % 3` != 0 ];then
echo $i
fi
let i++
done
外层循环执行一次,内层循环执行一遍
#!/bin/shell
for ((i=1;i<=9;i++))
do
for((j=1;j<=i;j++))
do
echo -n "$i*$j= `echo $(($i*$j))` "
done
echo " "
don
#!/bin/bash
read -p "Please input the length: " len
for i in `seq 1 $len`
do
for((j=1;j<=$i;j++))
do
echo -n "* "
done
echo
done
#!/bin/bash
for ((i=1;i<=5;i++))
do
for ((j=5;j>=i;j--)) //倒直角三角形
do
echo -n " "
done
for((k=1;k<=2*i-1;k++)) //等腰三角形
do
echo -n "*"
done
echo ""
done
重复测试某个条件,只要条件不成立则反复执行
until 条件测试操作
do
命令序列
done
#!/bin/bash
i=1
until [ $i -eq 51 ]
do
echo $i
sum=$sum+$i
let i++
done
echo $sum
若用户不在线,则每10分钟试一次,直至用户登录系统后在发送信息
用户名与消息通过位置参数传递给脚本
1:位置参数个数大于1
2:姓名属于系统用户 /etc/passwd
3:用户是否在线 until who
4:发送消息echo “消息” | write 用户名
#!/bin/bash
username=$1
#格式参数不能为空
if [ $# -lt 1 ];then
echo "Usage:`basename $0` []"
exit 1
fi
#验证是否属于系统用户
if grep "^$username" /etc/passwd > /dev/null;then :
else
echo "not user"
exit 2
fi
#测试用户是否在线,如果不在线,每5s联系一次
until who | grep "$username" > /dev/null;do
echo "user not login"
sleep 5
done
#发送消息
echo "$2" | write "$username"
echo "${username}发送成功"