linux基礎學習-19.6-Shell腳本-循環

1、循環(for、while)

一、循環語句語法

1)while條件語句
while 條件
    do
        指令
done
2)for循環結構語法
for 變量名 in 變量取值列表
    do
        指令...
done

二、while語句

休息命令:sleep 1 休息一秒,usleep 1000000休息1秒單位微妙

1)守護進程html

[root@oldboy scripts]# cat oldboy.sh 
#!/bin/bash
while true
do
    uptime >> /var/log/uptime.log
    sleep 2
done

#while true 表示條件永遠爲真,所以會一直運行,像死循環同樣。linux

[root@oldboy scripts]# cat /var/log/uptime.log 
 23:01:57 up  8:33,  2 users,  load average: 0.04, 0.03, 0.05
 23:01:59 up  8:33,  2 users,  load average: 0.04, 0.03, 0.05
 23:02:01 up  8:33,  2 users,  load average: 0.04, 0.03, 0.05

2)從1加到100git

[root@oldboy scripts]# cat oldboy.sh 
#!/bin/bash
i=1
sum=0
while [ $i -lt 100 ]
do
    ((sum=sum+i))
    ((i++))
done
echo $sum

3)倒計時github

[root@oldboy scripts]# cat oldboy.sh 
#!/bin/bash

i=10
while [ $i -gt 0 ]
do
    echo $i
    sleep 1
    ((i--))
done

三、防止腳本執行中斷的方法

1)sh while01.sh & #放在後臺執行shell

2)screen 分離 ctrl+a+d 查看screen -ls進入screen -r numbash

3)nohup while01.sh &dom

四、for循環語句

1)打印列表元素ssh

[root@oldboy scripts]# cat oldboy.sh 
#!/bin/bash

for i in 5 4 3 2 1   #用空格隔開
do
    echo $i
done
[root@oldboy scripts]# sh oldboy.sh 
5
4
3
2
1
[root@oldboy scripts]# for i in {5..1};do echo $i;done
5
4
3
2
1
[root@oldboy scripts]# echo 10.1.1.{1..10}
10.1.1.1 10.1.1.2 10.1.1.3 10.1.1.4 10.1.1.5 10.1.1.6 10.1.1.7 10.1.1.8 10.1.1.9 10.1.1.10
[root@oldboy scripts]# for i in `seq 5 -1 1`;do echo $i;done
5
4
3
2
1
#循環執行命令n次
[root@oldboy scripts]# for i in `seq 100`;do curl -I baidu.com;done

2)開機啓動項優化curl

[root@oldboy scripts]# cat oldboy.sh 
#!/bin/bash

LANG=en
for i in `chkconfig --list|grep "3:on"|awk '{print $1}'`
do
    chkconfig $i off
done

for name in sshd rsyslog crond network sysstat
do
    chkconfig $name on
done

3)在/oldboy目錄批量建立文件優化

[root@oldboy scripts]# cat oldboy.sh 
#!/bin/bash
Path=/oldboy
[ -d "$Path" ] || mkdir -p $Path
for i in `seq 10`
do
    touch $Path/oldboy_$i.html
done

4)批量更名

[root@oldboy scripts]# cat oldboy.sh 
#!/bin/bash
$Path=/oldboy
[ -d "$Path" ] || mkdir -p $Path
for file in `ls $Path`
do
    mv $file `echo $file|sed -r 's#oldboy(.*).html#linux\1.HTML#g'`
done

5)批量建立用戶並設置密碼

[root@oldboy scripts]# cat oldboy.sh 
#!/bin/bash

User=oldboy
Path=/tmp

for user in ${User}{01..10}
do
    useradd $user >/dev/null 2>&1
    if [ ! $? -eq 0 ];then
        echo "$user created faile!"
        echo "scripts begin to rollback!"
        for i in ${User}{01..10}
        do
            userdel -r $i >/dev/null 2>&1
            [ $? -eq 0 ] || exit 1
        done
        echo >$Path/user_passwd
        exit 1
    else
        passWD=`echo $RANDOM|md5sum|cut -c1-8`
        [ -d $Path ] || mkdir $Path
        echo $passWD | passwd --stdin $user
        echo "$user:$passWD">>$Path/user_passwd
    fi
done

6)獲取當前目錄下的目錄名作爲變量列表打印輸出

[root@oldboy ~]# cat /server/scripts/oldboy.sh
#!/bin/bash

Path=`pwd`
echo $Path
for filename in `ls`
do
    [ -d ${Path}/${filename} ] && echo $filename
done

7)九九乘法表

[root@oldboy ~]# cat /server/scripts/oldboy.sh 
#!/bin/bash

for ((i=1;i<10;i++))
do
    for ((j=1;j<=i;j++))
    do
        echo -n "$i * $j = $((i*j))"
        echo -n " "
    done
    echo " "
done
[root@oldboy ~]# sh /server/scripts/oldboy.sh
1 * 1 = 1  
2 * 1 = 2 2 * 2 = 4  
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9  
4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16  
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25  
6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36  
7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49  
8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64  
9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81

五、各類語句小結

1)while循環的特長是執行守護進程以及咱們但願循環不退出持續執行,用於頻率小於1分鐘循環處理(crond),其餘的while循環幾乎均可以被for循環替代。

2)case語句能夠被if語句替換,通常在系統啓動腳本傳入少許固定規則字符串用case語句,其餘普通判斷多用if

3)一句話,if,for語句最經常使用,其次while(守護進程),case(服務啓動腳本)

六、獲取隨機數的幾種方法

1)經過系統環境變量$RANDOM

[root@oldboy ~]# echo $RANDOM
6178
[root@oldboy ~]# echo $RANDOM
30890
[root@oldboy ~]# echo $((RANDOM%9)) #輸出0~9之間隨機數
2
[root@oldboy ~]# echo $((RANDOM%9)) 
[root@oldboy ~]# echo $((RANDOM%9))$((RANDOM%9)) #輸出00~99 隨機數
64
[root@oldboy ~]# echo $((RANDOM%9))$((RANDOM%9)) #輸出00~99歲?隨機數
10
[root@oldboy ~]# echo $((RANDOM%9))$((RANDOM%9)) #輸出00~99歲?隨機數
51
[root@oldboy ~]# echo $RANDOM|md5sum #隨機數長短不一,能夠用md5sum命令統一格式化
599e328a94329684ce5c92b850d32f26  -

2)經過openssl產生

[root@oldboy ~]# openssl rand -base64 8
aND8WMRM6vQ=
[root@oldboy ~]# openssl rand -base64 8
RsRdRq/9vi4=
[root@oldboy ~]# openssl rand -base64 8|md5sum
b1108cafbc2291392e41d2c914360138  -
[root@oldboy ~]# openssl rand -base64 10      
1frkA2kIJODxqQ==

3)經過時間得到隨機數

[root@oldboy ~]# echo $(date +%N)
361599138
[root@oldboy ~]# echo $(date +%N)
199271856
[root@oldboy ~]# echo $(date +%t%N)
950526316
[root@oldboy ~]# echo $(date +%t%N)
340140329

4)urandom

[root@oldboy ~]# head /dev/urandom | cksum
621330951 2535
[root@oldboy ~]# head /dev/urandom | cksum
404398617 2470

5)UUID

[root@oldboy ~]# cat /proc/sys/kernel/random/uuid
8a6c5bbe-2d42-44ac-9ef1-3e7683a613e3
[root@oldboy ~]# cat /proc/sys/kernel/random/uuid
c828c209-5b5f-4bc7-917c-678ed4215988
[root@oldboy ~]# uuidgen
961dc354-81b2-4564-9b85-6095ed4bc7b5

七、循環中的四個關鍵詞 break continue exit return

break continue exit用於循環結構中控制虛幻(for,while,if)的走向
1)break
[root@oldboy ~]# cat /server/scripts/oldboy.sh
#!/bin/bash

for ((i=0;i<=5;i++))
do
    [ $i -eq 3 ] && break
    echo $i
done
echo "ok"
[root@oldboy ~]# sh /server/scripts/oldboy.sh
0
1
2
ok

2)continue

[root@oldboy ~]# cat /server/scripts/oldboy.sh
#!/bin/bash

for ((i=0;i<=5;i++))
do
    [ $i -eq 3 ] && continue
    echo $i
done
echo "ok"
[root@oldboy ~]# sh /server/scripts/oldboy.sh
0
1
2
4
5
ok

3)exit

[root@oldboy ~]# cat /server/scripts/oldboy.sh
#!/bin/bash

for ((i=0;i<=5;i++))
do
    [ $i -eq 3 ] && exit 2
    echo $i
done
echo "ok"
[root@oldboy ~]# sh /server/scripts/oldboy.sh
0
1
2
[root@oldboy ~]# echo $?
2

4)return

[root@oldboy ~]# cat /server/scripts/oldboy.sh
#!/bin/bash

function xxxx {

    for ((i=0;i<=5;i++))
    do
        [ $i -eq 3 ] && return 7
        echo $i
    done
    echo "ok"

}

xxxx
echo $?
[root@oldboy ~]# sh /server/scripts/oldboy.sh
0
1
2
7

練習題:

一、while的基本語法

二、for的基本語法

三、防止腳本中斷的方法

四、解釋下循環中的四個關鍵詞 break continue exit return

相關文章
相關標籤/搜索