随机数+嵌套循环

echo的参数
-e
-n 不换行

echo -e 处理特殊字符

若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\ 插入\字符;

示例

echo -e "a\adddd" //输出同时会发出报警声音

echo -ne "$x*$y=$[$x*$y]\t"

1. 随机数

bash默认有一个$RANDOM的变量 默认0-32767
使用set |grep RANDOM 查看上一次产生的随机数

[root@yw7 server]# set | grep RANDOM
[root@yw7 server]# echo $RANDOM
16055
产生0~1之间的随机数
echo $[$RANDOM%2]

产生0~2之间的随机数
echo $[$RANDOM%3]

产生0~3之间的随机数
echo $[$RANDOM%4]

产生0~9内的随机数
echo $[$RANDOM%10]

产生0~100内的随机数
echo $[$RANDOM%101]


产生50-100之内的随机数
echo $[$RANDOM%51+50]

产生三位数的随机数
echo $[$RANDOM%900+100]

1.1 写一个脚本,产生一个phonenum.txt文件,随机产生以139开头的手机号1000个,每个一行。

#!/bin/bash
for i in {1..1000}
do
	n1=$[$RANDOM%10]
	n2=$[$RANDOM%10]
	n3=$[$RANDOM%10]
	n4=$[$RANDOM%10]
	n5=$[$RANDOM%10]
	n6=$[$RANDOM%10]
	n7=$[$RANDOM%10]
	n8=$[$RANDOM%10]
	echo "139$n1$n2$n3$n4$n5$n6$n7$n8" >> phonenum.txt
done

1.2 在上面的1000个手机号里抽奖5个幸运观众,显示出这5个幸运观众。但只显示头3个数和尾号的4个数,中间的都用*代替

#!/bin/bash
phone=/tmp/phone1.txt
for i in {1..5}
do
  line=`wc -l $phone | cut -d' ' -f1`
  luck_line=$[RANDOM%$line+1]
  luck_num=`head -$luck_line $phone | tail -1`
  echo "139****${luck_num:7:4}"
  echo $luck_num >> luck.txt
  sed -i "/$luck_num/d" $phone
done

1.3 批量创建5个用户,每个用户的密码为一个随机数

#!/bin/bash
#批量创建5个用户,每个用户的密码为一个随机数

for i in {1..5}
do
echo "user$i:$[$RANDOM%9000+1000]" >> /server/userpw.txt   
done

if [ -f /server/userpw.txt ];then 
   for i in {1..5}
     do
        user=`head -$i userpw.txt|tail -1|cut -d: -f1`
        pass=`head -$i userpw.txt|tail -1|cut -d: -f2`
        useradd $user
        echo $pass| passwd --stdin $user
   done
   echo "ok"
else 
  echo "密码文件没有生成!!!"
fi

for i in {1..5}
do 
  id user$i  >> userid.txt
done 
echo "slelect is ok"

2. 嵌套循环

一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。在外部循环的每次执行过程中都会触发内部循环,直至内部完成一次循环,才接着执行下一次的外部循环。for循环、while循环和until循环可以相互嵌套。

2.1 打印12 123 1234

#!/bin/nash

for i in {1..5}
do
   for((j=1;j<=i;j++))
   do
    echo -n  "$j"
   done
echo
done

#!/bin/nash
i=5
while [ $i -gt 0 ]
do
   for((j=5;j>=i;j--))
   do
    echo -n  "$j"
   done
echo
  let i--
done

2.2 99乘法

#!/bin/nash

for i in {1..9}
do
   for((j=1;j<=i;j++))
   do
    echo -ne  "$j*$i=$[$j*$i]\t"
   done
echo
echo
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长安有故里y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值