1. 程式人生 > 其它 >幾個經典的shell指令碼

幾個經典的shell指令碼

實現指令碼同步

#!/bin/env bash
# 該指令碼用於時間同步


ntp-server=10.1.1.1
count=0


while true
do
ntpdate $ntp-srever &>/dev/null
if [ $? -ne 0 ];then
echo "system date failed" |mail -s "check system date" root@lijingtest-VirtualBox


else
let count++
if [ $count -eq 2 ];then
echo "system date success" |mail -s "check system date" root@lijingtest-VirtualBox && count=0

fi

fi
sleep 3
done

until迴圈

until迴圈與while迴圈恰好相反,until在條件不成立時才進行迴圈,一旦判斷條件成立,就終止迴圈

用法如下:

until condition
do
command
done

執行流程:

對condition進行判斷,條件成立時,不執行command;若條件不成立,則進入迴圈
執行到done時,重新判斷condition是否成立,不成立再次進入迴圈
若一開始條件就成立,則直接不執行do done之間的程式碼
eg:求1-100的整數和

#!/bin/bash

i=1
sum=0
until ((i>100))
do
sum+=i
i++
done
echo "sum is:$sum"

隨機數

如何生成隨機數

系統變數 RANDOM 默產生0-32767的隨機整數

實戰案例

隨機產生以139開頭的電話號碼

具體需求

寫一個指令碼,產生一個phonenum.txt檔案,隨機產生以139開頭的手機號1000個,每個一行。

思路

產生1000個電話號碼,指令碼需要迴圈1000次 for while until
139+8位,後8位隨機產生,可以讓每一位數字都隨機產生 echo $[$RANDOM%10]
將隨機產生的數字儲存到變數裡,然後加上139儲存到檔案裡
實現

#!/bin/bash
#隨機產生1000個以139開頭的號碼並儲存到檔案中


file=/root/phonenum.txt
for ((i=1;i<=1000;i++))
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"  >>$file
done

隨機抽取五位幸運觀眾

在上面的1000個電話號碼中隨機抽取5個幸運觀眾,並展示出來 中間4位數字用*代替

#!/bin/bash
#隨機抽取五位幸運觀眾

phone=/root/phonenum.txt
for ((i=1;i<=5;i++))
do
line=`wc -l $phone |cut -d' ' -f1`
luck_link=$[RABDOM%$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