中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

腳本編程基礎

發布時間:2020-06-16 10:14:37 來源:網絡 閱讀:300 作者:90001丶冷眸 欄目:系統運維

程序編程風格

過程式:以指令為中心,數據服務于指令
對象式:以數據為中心,指令服務于數據

程序的執行方式

計算機:運行二進制指令
編程語言:人與計算機之間交互的語言
低級編程語言
機器:二進制的0和1的序列,稱為機器指令。與自然語言差異太大,難懂、難寫
匯編:用一些助記符號替代機器指令,稱為匯編語言
????如:ADD A,B 將寄存器A的數與寄存器B的數相加得到的數放到寄存器A中
????匯編語言寫好的程序需要匯編程序轉換成機器指令
????匯編語言稍微好理解,即機器指令對應的助記符,助記符更接近自然語言

高級編程語言

    編譯:高級語言-->編譯器-->機器代碼-->執行
????C,C++
?解釋:高級語言-->執行-->解釋器-->機器代碼
????shell,python,php,JavaScript,perl

shell腳本

包含一些命令或聲明,并符合一定格式的文本文件

格式要求

首行聲明序列
???#!/bin/bash
添加注釋
???注釋以#開頭
運行腳本
???給予腳本執行權限,在命令行指定腳本的絕對或相對路徑
???直接運行解釋器,將腳本作為解釋器程序的參數運行

shell腳本的用途有

自動化常用命令
執行系統管理和故障排除
創建簡單的應用程序
處理文本或文件

腳本調試

檢測腳本中的語法錯誤
??bash -n path

調試執行

bash -x path

Shell中變量命名法則

1、不能使程序中的保留字:例如if, for
2、只能使用數字、字母及下劃線,且不能以數字開頭
3、見名知義
4、統一命名規則:駝峰命名法

Shell中命名建議規則

1、變量名大寫
2、局部變量小寫
3、函數名小寫
4、用英文名字,并體現出實際作用

bash中變量的種類

根據變量的生效范圍等標準劃分下面變量類型

局部變量:生效范圍為當前shell進程;對當前shell之外的其它shell進程,包括當前shell的子shell進程均無效
環境變量:生效范圍為當前shell進程及其子進程
本地變量:生效范圍為當前shell進程中某代碼片斷,通常指函數
位置變量:$1, $2, ...來表示,用于讓腳本在腳本代碼中調用通過命令行傳遞給它的參數

特殊變量:$?, $0, $, $@, $#,$$
??$0 這個程式的執行名字
??$n 這個程式的第n個參數值,n=1..9,n=10...時,用${n}表示
??$* 傳遞給腳本的所有參數,全部參數合為一個字符串
??$# 這個程式的參數個數
??$$ 這個程式的PID(腳本運行的當前進程ID號)
??$! 執行上一個背景指令的PID(后臺運行的最后一個進程的進程ID號)
??$? 執行上一個指令的返回值 (顯示最后命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤)
??$- 顯示shell使用的當前選項,與set命令功能相同
??$@ 跟$*類似,傳遞給腳本的所有參數,每個參數為獨立字符串

局部變量

變量賦值:name=‘value’
可以使用引用value
?(1) 可以是直接字串:name=“root"
?(2) 變量引用:name="$USER"
?(3) 命令引用:name=COMMAND
???name=$(COMMAND)
變量引用:${name} 或者 $name
?" " 弱引用,其中的變量引用會被替換為變量值
?' ' 強引用,其中的變量引用不會被替換為變量值,而保持原字符串

顯示已定義的所有變量:set
刪除變量:unset name

環境變量

變量聲明、賦值:
??export name=VALUE
??declare -x name=VALUE
變量引用:
??$name, ${name}
顯示所有環境變量:
??env
??printenv
??export
??declare -x
刪除變量
?unset name

算術運算

bash中的算術運算:help let
??+, -, *, /, %取模(取余), \**(乘方),乘法符號有些場景中需要轉義
實現算術運算:
??(1) let var=算術表達式
??(2) var=$[算術表達式]
??(3) var=$((算術表達式))
??(4) var=$(expr arg1 arg2 arg3 ...)
??(5) declare –i var = 數值
??(6) echo ‘算術表達式’ | bc
bash有內建的隨機數生成器變量:$RANDOM(0-32767)
??示例:生成 0 - 49 之間隨機數
????echo $[$RANDOM%50]

賦值

增強型賦值:
??+=, -=, \*=, /=, %=
let varOPERvalue
?例如:let count+=3
??自加3后自賦值
??自增,自減:
????let var+=1
????let var++
????let var-=1
????let var--

邏輯運算

rue,false
??1,0
與: &
??1與1=1
??1與0=0
??0與1=0
??
或 :|
??1或1=1
??1或0=1
??0或1=1
??0或0=0
非: !
??!1=0??!true
??!0=1??!false
異或:^
??異或的兩個值,相同為假,不同為真 ?
短路運算
短路與
??第一個為0,結果必定為0
??第一個為1,第二個必須要參與運算
短路或
??第一個為1,結果必定為1
??第一個為0,第二個必須要參與運算

示例

正確是1,錯誤是0
腳本編程基礎
與運算:
腳本編程基礎
或運算
腳本編程基礎
非:取反:
腳本編程基礎
AB值進行對調
腳本編程基礎
短路與 &&

腳本編程基礎

短路或 ||

腳本編程基礎

與 && :
成功繼續往后執行
腳本編程基礎
失敗就無需往后執行
腳本編程基礎
或 || :
失敗繼續往后執行,成功則無需往后執行
腳本編程基礎
與或:
腳本編程基礎
腳本編程基礎

條件測試

判斷某需求是否滿足,需要由測試機制來實現 專用的測試表達式需要由測試命令輔助完成測試過程 ?
評估布爾聲明,以便用在條件性執行中 :
??若真,則返回0
??若假,則返回1 ?
測試命令:
??test EXPRESSION
??[ EXPRESSION ]
??[[ EXPRESSION ]]
注意:EXPRESSION前后必須有空白字符

bash的數值測試

-v VAR
??變量VAR是否設置
??示例:判斷 NAME 變量是否定義
????????[ -v NAME ] ?
數值測試:
??-gt 是否大于
??-ge 是否大于等于
??-eq 是否等于
??-ne 是否不等于
??-lt 是否小于
??-le 是否小于等于

bash的字符串測試

字符串測試:
??-z "STRING" 字符串是否為空,空為真,不空為假
??-n "STRING" 字符串是否不空,不空為真,空為假
??= 是否等于 > ascii碼是否大于ascii碼
??< 是否小于
??!= 是否不等于
??== 左側字符串是否和右側的PATTERN相同
??注意:此表達式用于[[ ]]中,PATTERN為通配符
??=~ 左側字符串是否能夠被右側的PATTERN所匹配
??注意: 此表達式用于[[ ]]中;擴展的正則表達式

Bash的文件測試

存在性測試
??-a FILE:同 -e
??-e FILE: 文件存在性測試,存在為真,否則為假 ?
存在性及類別測試
??-b FILE:是否存在且為塊設備文件
??-c FILE:是否存在且為字符設備文件
??-d FILE:是否存在且為目錄文件
??-f FILE:是否存在且為普通文件
??-h FILE 或 -L FILE:存在且為符號鏈接文件
??-p FILE:是否存在且為命名管道文件
??-S FILE:是否存在且為套接字文件

Bash的文件權限測試

文件權限測試:
??-r FILE:是否存在且可讀
??-w FILE: 是否存在且可寫
??-x FILE: 是否存在且可執行 ?
文件特殊權限測試:
??-u FILE:是否存在且擁有suid權限
??-g FILE:是否存在且擁有sgid權限
??-k FILE:是否存在且擁有sticky權限

Bash的文件屬性測試

文件大小測試:
??-s FILE: 是否存在且非空 ?
文件是否打開:
??-t fd: fd 文件描述符是否在某終端已經打開
??-N FILE:文件自從上一次被讀取之后是否被修改過
??-O FILE:當前有效用戶是否為文件屬主
??-G FILE:當前有效用戶是否為文件屬組
雙目測試:
??FILE1 -ef FILE2: FILE1是否是FILE2的硬鏈接
??FILE1 -nt FILE2: FILE1是否新于FILE2(mtime)
??FILE1 -ot FILE2: FILE1是否舊于FILE2

Bash的組合測試條件

第一種方式:
??[ EXPRESSION1 -a EXPRESSION2 ] 并且
??[ EXPRESSION1 -o EXPRESSION2 ] 或者
??[ ! EXPRESSION ] 取反
??-a 和 -o 需要使用測試命令進行,[[ ]] 不支持 ?
第二種方式:
??COMMAND1 && COMMAND2 并且,短路與,代表條件性的AND THEN
??COMMAND1 || COMMAND2 或者,短路或,代表條件性的OR ELSE
??! COMMAND 非
??示例:
??[ -f “$FILE” ] && [[ “$FILE”=~ .*\.sh$ ]]

示例:

test:
腳本編程基礎
[ ] :
腳本編程基礎
判斷用戶magedu:如果存在則輸出結果,如果不存在則創建該用戶并輸出結果
腳本編程基礎
判斷用戶wang:如果存在則輸出結果,如果不存在則創建該用戶并輸出結果
腳本編程基礎
[[ ]] :支持正則表達式,通配符
=后跟的是擴展正則表達式;
腳本編程基礎
==后面跟的是通配符
腳本編程基礎
找.log/.xlog結尾的文件,輸出結果
腳本編程基礎
如果hello.sh這個文件是.sh后綴的,則添加執行權限,
腳本編程基礎
如果hello.txt文件是.sh后綴,則添加執行權限,如果不是則不添加
腳本編程基礎
看文件hello.txt是.sh后綴或者.txt后綴
腳本編程基礎
-gt -a -o -lt :
判斷n的數值是否大于等于90并且小于等于100;判斷n的數值是否大于等于90或者小于等于100
腳本編程基礎
-f -a -r : 判斷/etc/issue是否為一個文件并且是否可讀
腳本編程基礎

練習

編寫腳本 hostping.sh,接受一個主機的IPv4地址做為參數,測試是否可連 通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通,則提 示用戶“該IP地址不可訪問”
腳本編程基礎
腳本編程基礎
編寫腳本 checkdisk.sh,檢查磁盤分區空間和inode使用率,如果超過80%, 就發郵件警告空間將滿
腳本編程基礎
腳本編程基礎
編寫腳本 nologin.sh和 login.sh,實現禁止和允許普通用戶登錄系統
禁止:
腳本編程基礎
允許:
腳本編程基礎

使用read命令來接受輸入

使用read來把輸入值分配給一個或多個shell變量
常用選項

-p 指定要顯示的提示
-s 靜默輸入,一般用于密碼
-n N 指定輸入的字符長度N
-d ‘字符’ 輸入結束符
-t N TIMEOUT為N秒
read 從標準輸入中讀取值,給每個單詞分配一個變量 所有剩余單詞都被分配給最后一個變量
read -p “Enter a filename: “ FILE

示例:

read -p :指定要顯示的提示
腳本編程基礎
腳本編程基礎
腳本編程基礎
read -sp : 隱藏輸入的密碼
腳本編程基礎
腳本編程基礎
read -n :只取前三個字符
腳本編程基礎
read -d :看到指定字符就結束
腳本編程基礎
read -t : 以秒為單位,超時不輸則直接退出
腳本編程基礎

練習

編寫腳本 hostping.sh,讓用戶輸入IP,測試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通,則提 示用戶“該IP地址不可訪問”
腳本編程基礎
腳本編程基礎
腳本編程基礎

條件選擇if語句

擇執行: ?
注意:if 語句可嵌套 ?
單分支
??if 判斷條件;then
????條件為真的分支代碼
??fi ?
雙分支
??if 判斷條件; then
????條件為真的分支代碼
??else
????條件為假的分支代碼
??fi
多分支
??if 判斷條件1; then
????條件1為真的分支代碼
??elif 判斷條件2; then
????條件2為真的分支代碼
??elif 判斷條件3; then
????條件3為真的分支代碼
??else
????以上條件都為假的分支代碼
??fi ?
逐條件進行判斷,第一次遇為“真”條件時,執行其分支,而后結束整個if語句

練習

雙分支
編寫腳本IP提示用戶不可訪問,如果不是非法IP則提示可訪問
腳本編程基礎
多分支
編寫腳本,根據BMI進行身體質量衡量
腳本編程基礎
腳本編程基礎

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

柳江县| 吉木萨尔县| 罗定市| 正镶白旗| 闽侯县| 旺苍县| 绥阳县| 砀山县| 河北省| 温泉县| 来安县| 巨鹿县| 黄山市| 循化| 江源县| 鲁甸县| 通化县| 电白县| 临西县| 阳山县| 中阳县| 乐山市| 高尔夫| 右玉县| 正安县| 那坡县| 连州市| 西丰县| 公主岭市| 苗栗市| 桃园县| 固阳县| 东乌珠穆沁旗| 许昌市| 明水县| 黄大仙区| 曲麻莱县| 汶川县| 盱眙县| 淳化县| 砀山县|