shell - for 循环

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

转载于:https://www.cnblogs.com/Afrafre/p/11405724.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值