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次
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
posted on 2019-08-24 19:17  Afrafre  阅读(315)  评论(0编辑  收藏  举报