国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 操作系統 > 正文

bash腳本編程知識儲備

2024-06-28 13:22:59
字體:
來源:轉載
供稿:網友
bash腳本編程知識儲備

bash腳本編程:

????腳本程序:解釋器解釋執行;

  1. 首先得理清一些瑣碎的知識點,我盡量把我所學的幫朋友一起梳理一下
    1. 編程環境:(我會在接下來的篇章,圖文例子三結合的方式帶大家一起學習)

      ???????????? 流程控制語句;

      ???????????????? 順序執行;

      ???????????? 循環執行;

    ???????????????? 選擇執行;

    2. ????????bash變量是弱類型;默認字符型;

    ?

    ????????變量引用:${VAR_NAME}

    ????????引號:

    ????????????弱引用:" " //可以實現變量的替換

    ????????????強引用:' ' //不可完成變量替換

    ????????????命令引用: ` `

    3.

    ????????聲明某變量為整型變量:

    ????????????let VAR_NAME=VALUE

    ????????????declare -i VAR_NAME=VALUE

    如:在腳本想聲明 變量sum為整型,并且給其賦值為0

    ???????????????? declare -i sum=0

    ?

    ????????聲明某變量為環境變量:

    ????????????export VAR_NAME=VALUE

    ????????????declare -x VAR_NAME=VALUE

    如:

    ????????????export -i sum=0

    4. 腳本的編寫格式:

    ????第一行:寫明解釋器; #!/bin/bash

    ????注釋行:所有以#開頭的行均為注釋行;會被解釋器忽略;

    ?

    ????執行腳本:

    ????????賦予執行權限;指明路徑執行;

    ????????直接傳遞腳本給bash解釋器

    ?

    ????????bash的選項:

    ????????????-n: 測試腳本中是否有語法 錯誤;

    ????????????-x: 調試執行;

    5 . 算術運算:

    ????????$[EXPRESSION]

    ????????let VAR_NAME=EXPRESSION

    ????????$((EXPRESSION))

    ????????$(expr argu1 argu2 argu3)

    ????5.1 例 a=1,b=2 求 a+b?

    ?

    ????第一種方法:

    ????????[root@localhost ~]# a=1

    [root@localhost ~]# b=2

    [root@localhost ~]# echo $[a+b]

    3

????????第二種方法:let 命令的用法

????????????????????格式:

????????????????????let 賦值表達式

????????????????【注】let 賦值表達式功能等同于:((賦值表達式))

????????????5.2????范例 1:給自變量 I 加5

????????????????????????[changsheng@localhost ~]$ i=2

[changsheng@localhost ~]$ let i=i+5

[changsheng@localhost ~]$ echo $i

7

==>去掉 let 定義

[changsheng@localhost ~]$ i=i+5

[changsheng@localhost ~]$ echo $i

i+5

提示: let i=i+5 等同于 ((i=1+5)),但后者效率更高

????????????5.3????范例2 :利用let計數監控web服務狀態的小項目(如果看不懂,可以跳過去,這個只是提升題)

????#########################################################################

# File Name: _server_monitor.sh

# Author: changsheng

# mail: 1210982521@QQ.com

# Created Time: Fri 05 Dec 2014 03:48:07 PM CST

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

#!/bin/bash

#監控服務狀態

ServerMonitor(){

????#服務狀態監控

????timeout=10

????fails=0

????success=0

????while true

????do

????/usr/bin/wget --timeout=$timeout --tries-1 http://172.16.0.1/ -q -O /dev/null

????????if [ $? -ne 0 ]

????????then

????????????let fails=fails+1

????????????success=0

????????else

????????????fails=0

????????????let success=1

????????fi

????????if [ $success -ge 1 ]

????????then

????????????exit 0

????????fi

????????if [$fails -ge 2 ];then

????????????Critical=" TMS 應用服務出現故障,請緊急處理!! "

????????????echo $Critical | mutt -s " 服務 down " www.magedu.com

????????????exit

????????fi

????done

?

}

?

6. 以空格為分割,打印1-10之間的數字:

????????[root@localhost test-scripts]# seq -s " " 10

1 2 3 4 5 6 7 8 9 10

注解: -s 是指定分隔符

7. shell 的特殊變量

????如下圖所示:

????????

?

?

????????7.1 $* 和$@區別例子:

???????????????? $* 將所有的命令行的所有參數視為單個字符串,等同于"$1$2$3

???????????? $@ 將命令行的每個參數視為單獨的子串,等同于"$1" "$2" " $3".這是將參數傳遞給其它程序的最佳方式,因為他會保留所有內嵌在每個參數的任何空白。

實戰演示:

[root@localhost test-scripts]# set -- "I am" handsome boy #===》傳入三個參數

[root@localhost test-scripts]# echo $# #==è現在有三個參數

3

[root@localhost test-scripts]# for i in $*;do echo $i;done #循環打印這些參數用$*,無引號

I

am

handsome

boy

[root@localhost test-scripts]# for i in $@;do echo $i;done #沒有引號的情況下和$*結果一樣

I

am

handsome

boy

[root@localhost test-scripts]# for i ;do echo $i;done #--無in變量列表,相當于 in "$@"

I am

handsome

boy

[root@localhost test-scripts]# for i in "$@";do echo $i;done #------在有雙引號的情況下,參數里引號內內容當做是一個參數輸出了,這才是符合我們傳入參數的要求set – "I am" handsome boy .

I am

handsome

boy

[root@localhost test-scripts]# for i in "$*";do echo $i;done #--加了雙引號,$*表示一個字符串

I am handsome boy

[root@localhost test-scripts]# shift #---用shift 去掉第一個參數

[root@localhost test-scripts]# echo $#

2

[root@localhost test-scripts]# for i in "$@";do echo $i;done #--再次打印只剩后面的參數

handsome

boy

?

8.變量子串的常用操作

????我來為朋友們舉例說明:

定義changsheng變量,內容為"I am chang sheng "

[root@localhost etc]# changsheng="I am chang sheng"

[root@localhost etc]# echo ${changsheng}

I am chang sheng????

  1. 返回字符串changsheng變量字符串的長度

[root@localhost ~]# echo ${#changsheng}

16

?

2)截取changsheng變量字符串從第二個字符之后開始取,默認取后面字符的全部,第2個字符不包括在內。????????也可以理解為刪除前面的多少字符

[root@localhost ~]# echo ${changsheng:2}

Am  chang sheng

?

?

3)截取changsheng變量字符從第二個字符之后,取兩個字符。

[root@localhost ~]# echo ${changsheng:2:2}

am

提示:類似 cut –c 參數

[root@localhost ~]# echo ${changsheng}|cut -c 1-4

I am

[root@localhost ~]# echo ${changsheng}|cut -c 3-4

am

?

?

4)從變量$changsheng開頭開始刪除最短匹配"I am " 子串

[root@localhost ~]# echo ${changsheng#I am}

Chang sheng

?

?

5)從變量$changsheng開頭開始刪除最長匹配"I am chang子串"

[root@localhost ~]# echo ${changsheng##I am chang}

 Sheng

6)    ????${var%Word*}: 自右而左,刪除第一次word出現處的字符開始直到尾部的所有字符;

????????????${var%%word*}:自右而左,刪除最后一次word出現處的字符開始直到尾部的所有字符;

?

系統腳本里的實例:

[ -z "${COLUMNS:-}" ] && COLUMNS=80

??

[ -z "${CONSOLETYPE:-}" ] && CONSOLETYPE="$(/sbin/consoletype)"

?

?

下面依次舉例說明:

(1)${value:-world}

當變量未定義或者為空時,返回world內容,否則返回變量的值

[root@localhost ~]# result=${test:-UNSET}

[root@localhost ~]# echo $result

UNSET

[root@localhost ~]# echo $test

[root@localhost ~]#

結論:當test變量沒有內容時,就返回了后面的UNSET。但是并沒有給 result 賦值

(2)${value:=word}

[root@localhost ~]# unset result

[root@localhost ~]# echo $result

?

?

[root@localhost ~]# unset test

[root@localhost ~]# echo $test

?

[root@localhost ~]# result=${test:=UNSET}

[root@localhost ~]# echo $result

UNSET

[root@localhost ~]# echo $test

UNSET

?

提示:變量不存在時,會給變量賦值后面的內容

?

?

9.變量替換表

13. 常用文件測試操作

?

整數二元比較操作符

?

?

?

?

?

?

多分支結構

?

?

?

?

?

?

?

?

?

函數:

?


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜昌市| 密山市| 禄劝| 清镇市| 巴彦县| 吉水县| 道孚县| 民乐县| 泰顺县| 濮阳市| 迁西县| 明光市| 平舆县| 历史| 渑池县| 屏南县| 巴彦县| 普兰店市| 雷波县| 武城县| 静海县| 博乐市| 潮安县| 昭平县| 嘉义市| 蒙阴县| 榆社县| 英山县| 巴中市| 阳城县| 高州市| 西宁市| 定结县| 石阡县| 蕉岭县| 北川| 醴陵市| 关岭| 饶河县| 湖南省| 石楼县|