1. 程式人生 > >Shell之三

Shell之三

shell

第1章 while循環語句

在編程語言中,while循環是一種控制流程的陳述,利用一個返回結果為布林值的表達式,當這個表達式的返回值為真時,則反復執行循環的條件,若表達式的返回值為假,則不在執行循環的條件

1.1 while語法:

while 條件

do

命令

done

1.2 while使用場景:

1.2.1 多用於創建守護進程

[root@nfs01 tmp]# cat test.sh

#!/bin/bash

##############################################################

# File Name: test.sh

# Version: V1.0

# Author: da ya

# Organization: [email protected]

# Created Time : 2018-03-24 19:48:06

# Description:

##############################################################

while true

do

echo "ok" | nc -l 81

done

[root@nfs01 tmp]# sh test.sh

GET / HTTP/1.1

User-Agent: curl/7.29.0

Host: 10.0.0.31:81

Accept: */*

GET / HTTP/1.1

User-Agent: curl/7.29.0

Host: 10.0.0.31:81

Accept: */*

1.2.2 可以創建定時任務,執行時間小於一分鐘的定時任務

[root@nfs01 tmp]# cat test.sh

#!/bin/bash

while true 使返回值總是為真,所以會一直循環

do

uptime

sleep 1

done

[root@nfs01 tmp]# sh test.sh

19:48:45 up 2 days, 4:12, 4 users, load average: 0.08, 0.04, 0.05

19:48:46 up 2 days, 4:12, 4 users, load average: 0.08, 0.04, 0.05

19:48:47 up 2 days, 4:12, 4 users, load average: 0.08, 0.04, 0.05

19:48:48 up 2 days, 4:12, 4 users, load average: 0.07, 0.04, 0.05

^C

1.3 while作用:

補充定時任務功能,執行小於一秒的任務

循環執行某些操作,例如水果菜單

1.4 遍歷文件中的每一行:

1.4.1 方法一:

while read i

do

echo "$i"

done < /etc/hosts

[root@nfs01 scripts]# sh test.sh

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.16.200 mirrors.aliyun.com

1.4.2 方法二:

cat /etc/hosts|while read i

do

echo "$i"

done

1.4.3 方法三:

exec < /etc/hosts

while read i

do

echo "$i"

done

獲取一行中每個單詞

while read i

do

echo "$i"

for w in $i

do

echo "$w"

done

done < /etc/hosts

技術分享圖片

技術分享圖片

第1章 循環控制腳本

技術分享圖片

1.1 示例:Break

for i in {1..5}

do

if [ "$i" -eq 2 ];then

break

fi

echo "$i"

done

echo OK

[root@nfs01 scripts]# sh test.sh

1

OK

1.2 示例:continue

for i in {1..5}

do

if [ "$i" -eq 2 ];then

continue

fi

echo "$i"

done

echo OK

[root@nfs01 scripts]# sh test.sh

1

3

4

5

OK

1.3 示例:exit

for i in {1..5}

do

if [ "$i" -eq 2 ];then

exit

fi

echo "$i"

done

echo OK

[root@nfs01 scripts]# sh test.sh

1

第2章 shell數組

簡答的說:數組就是多個變量的組合

技術分享圖片

[root@nfs01 scripts]# name=(jiang bo yang)

[root@nfs01 scripts]# echo ${name[1]}

bo

[root@nfs01 scripts]# echo ${name[2]}

yang

[root@nfs01 scripts]# unset name[1]

[root@nfs01 scripts]# echo ${name[1]}

[root@nfs01 scripts]# echo ${name[*]}

jiang yang

[root@nfs01 scripts]# echo ${name[@]}

jiang yang

[root@nfs01 scripts]# name[1]=bo

[root@nfs01 scripts]# echo ${name[@]}

jiang bo yang

第1章 shell函數

技術分享圖片

1.1 定義函數:

jiang(){

echo nihao

}

jiang 表示調用上面定義的函數

[root@nfs01 scripts]# sh test.sh

nihao

1.2 函數的擴展用法:添加一條命令

[root@nfs01 scripts]# source test.sh

nihao

[root@nfs01 scripts]# jiang

nihao

1.3 函數的傳參

jiang(){

echo nihao $1

}

daya(){

echo buhao $1

}

jiang $1

daya $1

[root@nfs01 scripts]# sh test.sh 1

nihao 1

buhao 1

1.4 basename命令的用法

[root@nfs01 scripts]# basename /server/scripts/test.sh

test.sh

[root@nfs01 scripts]# basename /server/scripts/test.sh .sh

test

第2章 shell調試技巧:

2.1 斷電調試:

jiang(){

echo nihao $1

}

daya(){

echo buhao $1

}

jiang

exit 在可能有問題地方加上exit,不在繼續向下執行腳本,縮小排查範圍

daya

2.2 使用-x參數:

[root@nfs01 scripts]# sh -x test.sh

+ jiang

+ echo nihao

nihao

+ daya

+ echo buhao

buhao

2.3 指定調試範圍:

[root@nfs01 scripts]# sh test.sh

nihao

+ daya

+ echo buhao

buhao

+ set +x


Shell之三