这里写目录标题
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