shell编程之随机数和嵌套循环
shell編程之隨機(jī)數(shù)和嵌套循環(huán)
文章目錄
- shell編程之隨機(jī)數(shù)和嵌套循環(huán)
- 一、隨機(jī)數(shù)
- 1. 如何生成隨機(jī)數(shù)?
- 2. 實(shí)戰(zhàn)案例
- 二、嵌套循環(huán)
- 三、expect
一、隨機(jī)數(shù)
關(guān)鍵詞:一切都是未知數(shù),永遠(yuǎn)不知道明天會抽什么風(fēng)🎐😅
1. 如何生成隨機(jī)數(shù)?
系統(tǒng)變量:RANDOM,默認(rèn)會產(chǎn)生0~32767的隨機(jī)整數(shù)
前言:要想調(diào)用變量,不管你是什么變量都要給錢,而且是美元💲
2. 實(shí)戰(zhàn)案例
㈠ 隨機(jī)產(chǎn)生以139開頭的電話號碼
具體需求1:
寫一個(gè)腳本,產(chǎn)生一個(gè)phonenum.txt文件,隨機(jī)產(chǎn)生以139開頭的手機(jī)號1000個(gè),每個(gè)一行。
① 思路
② 落地實(shí)現(xiàn)
#!/bin/env bash #產(chǎn)生1000個(gè)以139開頭的電話號碼并保存文件phonenum.txt file=/shell03/phonenum.txtfor ((i=1;i<=1000;i++))don1=$[$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" >> $filedone#!/bin/bash # random phonenum # 循環(huán)1000次產(chǎn)生電話號碼并保存到文件 for i in {1..1000}don1=$[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.txtdone#!/bin/bash i=1 while [ $i -le 1000 ]don1=$[$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.txtlet i++donecontinue:繼續(xù),跳過本次循環(huán),執(zhí)行下一次循環(huán) break:打斷,執(zhí)行循環(huán)體外的代碼do..done外 exit:退出程序#!/bin/bash for i in {1..1000}don1=$[$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.txtdone#!/bin/bash #create phone num file for ((i=1;i<=1000;i++))don1=$[$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" |tee -a phonenum.txtdone#!/bin/bash count=0 while truedon1=$[$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" |tee -a phonenum.txt && letcount++if [ $count -eq 1000 ];thenbreakfidone㈡ 隨機(jī)抽出5位幸運(yùn)觀眾
具體需求:
① 思路
② 落地實(shí)現(xiàn)
#!/bin/bash #定義變量 phone=/shell03/phonenum.txt #循環(huán)抽出5位幸運(yùn)觀眾 for ((i=1;i<=5;i++))do#定位幸運(yùn)觀眾所在行號line=`wc -l $phone |cut -d' ' -f1`luck_line=$[RANDOM%$line+1]#取出幸運(yùn)觀眾所在行的電話號碼luck_num=`head -$luck_line $phone|tail -1`#顯示到屏幕echo "139****${luck_num:7:4}"echo $luck_num >> luck.txt#刪除已經(jīng)被抽取的幸運(yùn)觀眾號碼#sed -i "/$luck_num/d" $phonedone#!/bin/bash file=/shell04/phonenum.txt for i in {1..5}dofile_num=`wc -l $file |cut -d' ' -f1`line=`echo $[$RANDOM%$file_num+1]`luck=`head -n $line $file|tail -1`echo "139****${luck:7:4}" && echo $luck >>/shell04/luck_num.txtdone#!/bin/bash for ((i=1;i<=5;i++))dofile=phonenum.txtline=`cat phonenum.txt |wc -l` 1000luckline=$[$RANDOM%$line+1]phone=`cat $file|head -$luckline|tail -1`echo "幸運(yùn)觀眾為:139****${phone:7:4}"done或者 #!/bin/bash # choujiang phone=phonenum.txt for ((i=1;i<=5;i++))donum=`wc -l phonenum.txt |cut -d' ' -f1`line=`echo $[$RANDOM%$num+1]`luck=`head -$line $phone |tail -1`sed -i "/$luck/d" $phoneecho "幸運(yùn)觀眾是:139****${luck:7:4}"done㈢ 批量創(chuàng)建用戶(密碼隨機(jī)產(chǎn)生)
需求:批量創(chuàng)建5個(gè)用戶,每個(gè)用戶的密碼為一個(gè)隨機(jī)數(shù)
① 思路
② 落地實(shí)現(xiàn)
#!/bin/bash #crate user and set passwd #產(chǎn)生一個(gè)保存用戶名和密碼的文件 echo user0{1..5}:itcast$[$RANDOM%9000+1000]#@~|tr ' ' '\n'>> user_pass.file #循環(huán)創(chuàng)建5個(gè)用戶 for ((i=1;i<=5;i++))douser=`head -$i user_pass.file|tail -1|cut -d: -f1`pass=`head -$i user_pass.file|tail -1|cut -d: -f2`useradd $userecho $pass|passwd --stdin $userdone 或者 for i in `cat user_pass.file`douser=`echo $i|cut -d: -f1`pass=`echo $i|cut -d: -f2`useradd $userecho $pass|passwd --stdin $userdone#!/bin/bash #crate user and set passwd #產(chǎn)生一個(gè)保存用戶名和密碼的文件 echo user0{1..3}:itcast$[$RANDOM%9000+1000]#@~|tr ' ' '\n'|tr ':' ' ' >> user_pass.file #循環(huán)創(chuàng)建5個(gè)用戶 while read user passdouseradd $userecho $pass|passwd --stdin $userdone < user_pass.filepwgen工具產(chǎn)生隨機(jī)密碼:[root@server shell04]# pwgen -cn1 12 Meep5ob1aesa [root@server shell04]# echo user0{1..3}:$(pwgen -cn1 12) user01:Bahqu9haipho user02:Feiphoh7moo4 user03:eilahj5eth2R [root@server shell04]# echo user0{1..3}:$(pwgen -cn1 12)|tr ' ' '\n' user01:eiwaShuZo5hi user02:eiDeih7aim9k user03:aeBahwien8co二、嵌套循環(huán)
關(guān)鍵字:大圈套小圈
🕒時(shí)鐘:分針與秒針,秒針轉(zhuǎn)?圈(60格),分針轉(zhuǎn)1格。循環(huán)嵌套就是外層循環(huán)?次,內(nèi)層循環(huán)?輪。
㈠ 打印指定圖案
1 12 123 1234 12345 5 54 543 5432 54321㈡ 落地實(shí)現(xiàn)1
X軸: for ((i=1;i<=5;i++));do echo -n $i;done Y軸: 負(fù)責(zé)打印換行 #!/bin/bash for ((y=1;y<=5;y++))dofor ((x=1;x<=$y;x++))doecho -n $xdoneechodone#!/bin/bash for ((y=1;y<=5;y++))dox=1while [ $x -le $y ]doecho -n $xlet x++doneechodone㈢ 落地實(shí)現(xiàn)2
Y軸:打印換行 X軸:打印數(shù)字 5-1 #!/bin/bash y=5 while (( $y >= 1 ))dofor ((x=5;x>=$y;x--))doecho -n $xdoneecholet y--done#!/bin/bash for (( y=5;y>=1;y--))dofor (( x=5;x>=$y;x--))doecho -n $xdoneechodone#!/bin/bash y=5 while [ $y -ge 1 ]dofor ((x=5;x>=$y;x--))doecho -n $xdoneecholet y--done#!/bin/bash y=1 until (( $y >5 ))dox=1while (( $x <= $y ))doecho -n $[6-$x]let x++doneecholet y++done三、expect
expect 自動應(yīng)答 tcl語言
需求1:A遠(yuǎn)程登錄到server上什么都不做
需求2:A遠(yuǎn)程登錄到server上操作
#!/usr/bin/expect set ip 10.1.1.1 set pass 123456 set timeout 5 spawn ssh root@$ip expect { "yes/no" { send "yes\r";exp_continue } "password:" { send "$pass\r" } } expect "#" send "rm -rf /tmp/*\r" send "touch /tmp/file{1..3}\r" send "date\r" send "exit\r" expect eof需求3:shell腳本和expect結(jié)合使用,在多臺服務(wù)器上創(chuàng)建1個(gè)用戶
[root@server shell04]# cat ip.txt 10.1.1.1 123456 10.1.1.2 123456 1. 循環(huán) 2. 登錄遠(yuǎn)程主機(jī)——>ssh——>從ip.txt文件里獲取IP和密碼分別賦值給兩個(gè)變量 3. 使用expect程序來解決交互問題 #!/bin/bash # 循環(huán)在指定的服務(wù)器上創(chuàng)建用戶和文件 while read ip passdo/usr/bin/expect <<-END &>/dev/nullspawn ssh root@$ipexpect {"yes/no" { send "yes\r";exp_continue }"password:" { send "$pass\r" }} expect "#" { send "useradd yy1;rm -rf /tmp/*;exit\r" }expect eofENDdone < ip.txt#!/bin/bash cat ip.txt|while read ip pass do { /usr/bin/expect <<-HOUspawn ssh root@$ipexpect {"yes/no" { send "yes\r";exp_continue }"password:" { send "$pass\r" }} expect "#"send "hostname\r"send "exit\r"expect eofHOU }& done wait echo "user is ok...."總結(jié)
以上是生活随笔為你收集整理的shell编程之随机数和嵌套循环的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shell编程之循环语句
- 下一篇: shell编程之case语句及函数