**
For 循环 指定次数循环 遍历 把集合中每个元素按个读取一遍
**
1、for语句的结构:
for 变量名 in 取值列表
do 命令序列
done
#!/bin/bash 固定开头声明
for ((i=1;i<=10;i++))
do
echo $i
Done 执行一次就显示出一行
运用实例
1)批量添加用户
用户名存放在users.txt文件中,每行一个
初始密码均设为123456
验证脚本
实验代码:
1、#!/bin/bash
list=$(cat /opt/users.txt)
for user in $list
do
#添加用户
useradd $user
#添加密码q
echo "123" | passwd --stdin $user
echo "创建$user成功!!!"
done
2、 2)根据ip地址检查主机状态
IP地址地址存放在ipadds.txt文件中,每行一个
使用ping命令测试主机的联通性
#!/bin/bash
list=$(cat /opt/ipaddr.txt)
for ip in $list
do
ping -c 3 -i 0.2 -w 3 $ip > /dev/null -c 3:发3个包 -i:时隔0.2秒 -w 等待3秒
if [ $? -eq 0 ];then
echo "${ip} is up"
else
echo "${ip} is down"
fi
done
Exit 1 1为状态码 退出应用程序
Break 跳出循环
1、计算1-100的奇数和:
#!/bin/bash
for ((i=1;i<=100;i++))
do
if [ `expr $i % 2` -eq 1 ];then
let sum+=$i
fi
done
echo 和为:$sum
2、计算1-100的偶数和:
#!/bin/bash
for ((i=1;i<=100;i++))
do
if [ `expr $i % 2` -eq 0 ];then
let sum+=$i 中间不能有空格
fi
done
echo 和为:$sum
运算需要需要配合let来配合使用!!! 或者用(( xxx ))
++ 自身变量加1
+=5 自身变量加5
-=5 自身变量减5
\*= 自身变量乘5
/= 自身变量除5
%= 自身变量除5余数
2、while语句的结构:
重复测试某个条件,只在条件成立则反复执行
while 条件测试操作
do
命令序列
done
$( ):运算
${ }:变量
$[ ]:表达式
(( )):运算
Let:运算
[ ]:判断
Test
If 只执行一次 for
While 反复执行
1、100以内不能被3整除的数:
#!/bin/bash
i=100
while [ $i -gt 0 ]
do
if [ ! `expr $i % 3` -eq 0 ];then
echo $i
fi
let i--
done
2、另一种实现方法:
#!/bin/bash
i=100
while [ $i -gt 0 ]
do
if [ `expr $i % 3` -eq 0 ];then
let i--
continue
else
echo $i
fi
let i--
done
3、until语句的结构:
重复测试某个条件,只有条件不成立则反复执行。
until
do
命令序列
done
运用实例:
实例1:
计算1-50的和
#!/bin/bash
i=1
sum=0
until [ $i -eq 51 ]
do
let sum+=$i
let i++
done
echo "和:$sum"
实例2:
为指定用户发送在线消息
若用户不在线(未登录系统),则每5s试一次,直至用户登录系统后再发送信息。
用户名与消息通过位置参数传递给脚本。
#!/bin/bash
username=$1
#格式参数不能为空
if [$# -lt 1 ];then
echo "Usage:`basename $0` <username> [<message>]"
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}发送成功!!!"
shell函数:
概念:
1、将命令序列按格式写在一起
2、可方便重复使用命令序列
定义:
[ funciton ] 函数名(){
命令序列
[ return x ]
}
调用函数的方法:
函数名 [参数1] [参数2]
#!/bin/bash
function sum(){
read -p "请输入第一个整数:" num1 #######下面的4行代码是此函数的公式模板,只在本>函数体内有实际含义,不涉及到函数体之外!!!!!
read -p "请输入第二个整数:" num2
SUM=$[$num1+$num2]
echo $SUM
echo 100
}
number=`sum` ######## `sum`代表上面的整个函数体的返回值(里面设定是100)故返回$?是100
echo $?
echo $number
#number=`sum`
#echo $number ####### $? 返回的是“echo $number ”处理是否成功?
# $? #####正常完成就返回0!!!
递归
1、调用自己本身的函数
实例1:
递归遍历目录:
#!/bin/bash
function list_files(){
for f in `ls $1`
do
if [ -d "$1/$f" ];then
echo "$2$f"
list_files "$1/$f" " $2"
else
echo "$2$f"
fi
done
}
list_files "/var/log" " "