for 循环语句
for var in [ 取值列表 ]
do
echo $var
done
例:
for i in 1 2 3 4 5
for j in {1..100}
# ls -l /etc/|wc -l
# 转义字符
for var in file1 file\'2 I\'s # 三次,斜杠用来转义
# 从变量中取值
list="file1 file2 file3"
for i in $list
# 从命令中取值
for i in 'cat /etc/hosts'
do
# for 循环可以自定义shell分隔符,默认以空格作为分隔。IFS来自定义
1. 冒号 IFS=:
2. 冒号,封号,双引号 IFS=:;"
3. 换行符 IFS=$'\n'
#!/usr/bin/bash
IFS=$'\n'
for i in `cat /etc/hosts`
do
# echo $i
echo $i|grep "root" # 输出包含root的
done
# 变量的自增和自减 C写法
for ((i=0;i<10;i++))
do
commands
done
for (( a=1,b=9;a<10;a++,b--))
do
echo num is $a $b
done
# 批量创建用户
#!/user/bin/bash
for i in $( cat user.txt )
do
user=$( echo $i|awk -F : '{print $1}' )
pass=$( echo $i|awk -F : '{print $2}' )
echo $user 密码是 $pass
id $user &>/dev/null
if [ $? -eq 0 ];then
echo " alreade exists "
else
useradd $user
echo "$pass"|passwd --stdin $user
fi
done
# 批量创建用户,用户输入数量和前缀, bax,10 表示从1到10
1. 批量 循环
2. 用户输入
#!/usr/bin/bash
read -p " please enter 前缀:" pre
read -p "please enter number: " num
for i in $(seq $num)
do
user=$pre$i
id $user &>/dev/null
if [ $? -eq 0 ];then
echo "already exist"
else
adduser $user cccc
echo " add successfully"
fi
done
批量创建用户,输入前缀(不能为空),输入用户数量(必须是整数) ,该脚本只能root 用户执行
# 只能root 用户运行该脚本
if [ ! $UID -eq 0 -o $user == "root" ];then
echo " 没有执行权限"
exit
fi
read -p "前缀:" qz
read -p "用户数量" num
# 判断前缀不能为空,数量必须为整数
if [ -z $qz ];then
echo " 不能为空"
exit
fi
if [[ ! $num=~[0-9]+$ ]];then
echo "请输入整数"
exit
fi
for i in $(seq $num)
do
user=$qz$i
id $user &>/dev/null
if [ $? -eq 0 ];then
echo "already exists"
else
useradd $user
echo "create successfully"
fi
done
# 密码写入到特定的文件中
echo "$pass" | passwd --stdin $user &>/dev/null
# 随机密码
$((RANDOM))|md5sum|cut 2-8
echo "用户:$user 密码: $pass" >> /tmp/user.log
# 删除用户命令
userdel -r $user
批量探测主机存活状态 172.16.1.{1..254}
1.需要使用循环,254次
2. ping命令探测主机
#!/usr/bin/bash
for i in {1..254}
do
# 并发效果
{
ping -c 1 -W 1 172.16.1.$i &>/dev/null
rs=$?
echo $rs
if [ $rs -eq 0 ];then
echo "172.16.1.$i is ok" >> /tmp/ip.log
else
echo "172.16.1.$i ping不通"
fi
} &
done
# wait等上面的全部结束以后,在输出下面这一行
wait
echo "ip is down"
# 注意并发的使用!!!
# 开始测试端口 nmap ip|grep "22"
echo 'test ssh post...'
IFS=$'\n'
for i in $(cat /tmp/ip.log)
do
ip=$(echo $i|awk '{print $1}'
nmap $ip|grep "22" &>/dev/null
if [ $? -eq 0 ];then
echo "$ip 22 is ok" >> /tem/port.log
fi
done
编写点名脚本
1. 名单文件
#!/usr/bin/bash
number=$(wc -l student.txt|awk '{print $1}')
for i in $(cat student.txt)
do
num=$((RANDOM % $number))
done
student=$(sed -n "${num}p" student.txt)
echo $student
随机产生一个100以内的数字,用户输入数字做对比,提示用户大了或小了,然后猜对退出
统计猜错的次数
#!/usr/bin/bash
sj=$((RANDOM % 100 +1))
i = 1
while true
do
read -p "请输入一个数字:" num
if [ ! $num=~^[0-9]+$ ];then
echo " 请输入整数"
continue
fi
if [ $num -ge $sj ];then
echo "大了"
elif [ $num -le $sj ];then
echo "小了"
else
echo "ok~~!"
break
fi
let i++
done
echo "失败了$i 次"
# 命令总结
# 查看执行过程
sh -x version.sh
# -n1 以列的方式显示、
echo tt{1..10}|xargs -n1
# 写入文件中
echo tt{1..10}|xargs -n1 > user.txt