Shell编程之循环语句实例
循环语句
for循环语句
-
读取不同的变量值,用来逐个执行同一组命令
for 变量名 in 取值列表 //连续范围取值可以{ 1..3} { 1 2 3 } $(seq 1 3) //for ((i=1;i <=3; i++)) //以行、空格、制表符来识别列表 //for i in { 2..10..2},for i in `seq 2 2 10`每次自增2 do(或"(") 命令序列 done(或")")
#!/bin/bash # 输出1到100的整数并判断奇偶 for i in { 1..100} do j=$[ $i % 2 ] # 除二取余,奇数得到1,偶数得到0 if [ $j -eq 0 ];then echo -ne "$i 为奇数\t" else echo "$i 为偶数" done
#!/bin/bash # 按给定文件中的用户名逐个创建用户,并设置密码 users=$(cat /etc/passwd | awk -F: '{print $1}') # 获取已存在的用户名 for username in $(cat /opt/users.txt) # 事先准备的一行一个用户名的txt文件 do echo $users | grep $name > /dev/null if [ $? -eq 0 ] then echo "$username 已存在" else echo "$username 不存在,将被创建" useradd $username echo 123456 | passwd --stdin $username &> /dev/null fi done tail /etc/passwd # 验证结果
#!/bin/bash # 探测一个网段中存活的主机 for ip in 192.168.42.{ 1..254} do { ping -c 3 -i 0.5 -w 2 $ip &> /dev/null #3个包,每0.5秒发送一个,最多等待两秒 if [ $? -eq 0 ] then echo "$ip online" >> /opt/hostlist.txt else echo "$ip offline" >> /opt/hostlist.txt fi }& # 大括号内的内容耗时长,后台运行 done wait # 等待上面的循环完成 cat /opt/hostlist.txt
#!/bin/bash # 实现生成只包含小写字母和数字的随机八位密码 warehouse='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890' length=${ #warehouse} # 获取warehouse长度 for i in { 1..8} { a+=${warehouse:$[$RANDOM % length]:1} #随机数RANDOM按warehouse长度取随机值并取对应下标位置的一个字符拼接为变量a } echo "随机密码为 $a"
#!/bin/bash #提示输入密码并验证,上限尝试五次 passwd='123456' for i in { 1..5} do read -p "输入密码:" tmp if [ "$tmp" -eq $passwd];then echo "密码正确!" exit 0 # exit是正常退出但可以指定返回的状态码 elif echo "输入错误,还有$[ 5 - $i ]次机会!" done echo "机会用完,无法登录" exit 1 #登陆异常返回1
-
for循环的IFS
#!/bin/bash IFS_OLD=$IFS #备份IFS IFS=$'\n'