腳本編程基礎(chǔ)

程序編程風(fēng)格

過程式:以指令為中心,數(shù)據(jù)服務(wù)于指令
對象式:以數(shù)據(jù)為中心,指令服務(wù)于數(shù)據(jù)

程序的執(zhí)行方式

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

高級編程語言

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

shell腳本

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

創(chuàng)新互聯(lián)提供成都網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)頁設(shè)計,成都品牌網(wǎng)站建設(shè),一元廣告等致力于企業(yè)網(wǎng)站建設(shè)與公司網(wǎng)站制作,十多年的網(wǎng)站開發(fā)和建站經(jīng)驗,助力企業(yè)信息化建設(shè),成功案例突破上千,是您實現(xiàn)網(wǎng)站建設(shè)的好選擇.

格式要求

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

shell腳本的用途有

自動化常用命令
執(zhí)行系統(tǒng)管理和故障排除
創(chuàng)建簡單的應(yīng)用程序
處理文本或文件

腳本調(diào)試

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

調(diào)試執(zhí)行

bash -x path

Shell中變量命名法則

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

Shell中命名建議規(guī)則

1、變量名大寫
2、局部變量小寫
3、函數(shù)名小寫
4、用英文名字,并體現(xiàn)出實際作用

bash中變量的種類

根據(jù)變量的生效范圍等標(biāo)準(zhǔn)劃分下面變量類型

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

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

局部變量

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

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

環(huán)境變量

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

算術(shù)運算

bash中的算術(shù)運算:help let
??+, -, *, /, %取模(取余), \**(乘方),乘法符號有些場景中需要轉(zhuǎn)義
實現(xiàn)算術(shù)運算:
??(1) let var=算術(shù)表達(dá)式
??(2) var=$[算術(shù)表達(dá)式]
??(3) var=$((算術(shù)表達(dá)式))
??(4) var=$(expr arg1 arg2 arg3 ...)
??(5) declare –i var = 數(shù)值
??(6) echo ‘算術(shù)表達(dá)式’ | bc
bash有內(nèi)建的隨機(jī)數(shù)生成器變量:$RANDOM(0-32767)
??示例:生成 0 - 49 之間隨機(jī)數(shù)
????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,結(jié)果必定為0
?第一個為1,第二個必須要參與運算
短路或
?第一個為1,結(jié)果必定為1
?第一個為0,第二個必須要參與運算

示例

正確是1,錯誤是0
腳本編程基礎(chǔ)
與運算:
腳本編程基礎(chǔ)
或運算
腳本編程基礎(chǔ)
非:取反:
腳本編程基礎(chǔ)
AB值進(jìn)行對調(diào)
腳本編程基礎(chǔ)
短路與 &&

腳本編程基礎(chǔ)

短路或 ||

腳本編程基礎(chǔ)

與 && :
成功繼續(xù)往后執(zhí)行
腳本編程基礎(chǔ)
失敗就無需往后執(zhí)行
腳本編程基礎(chǔ)
或 || :
失敗繼續(xù)往后執(zhí)行,成功則無需往后執(zhí)行
腳本編程基礎(chǔ)
與或:
腳本編程基礎(chǔ)
腳本編程基礎(chǔ)

條件測試

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

bash的數(shù)值測試

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

bash的字符串測試

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

Bash的文件測試

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

Bash的文件權(quán)限測試

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

Bash的文件屬性測試

文件大小測試:
?-s FILE: 是否存在且非空 ?
文件是否打開:
?-t fd: fd 文件描述符是否在某終端已經(jīng)打開
?-N FILE:文件自從上一次被讀取之后是否被修改過
?-O FILE:當(dāng)前有效用戶是否為文件屬主
?-G FILE:當(dāng)前有效用戶是否為文件屬組
雙目測試:
?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 需要使用測試命令進(jìn)行,[[ ]] 不支持 ?
第二種方式:
?COMMAND1 && COMMAND2 并且,短路與,代表條件性的AND THEN
?COMMAND1 || COMMAND2 或者,短路或,代表條件性的OR ELSE
?! COMMAND 非
?示例:
?[ -f “$FILE” ] && [[ “$FILE”=~ .*\.sh$ ]]

示例:

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

練習(xí)

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

使用read命令來接受輸入

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

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

示例:

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

練習(xí)

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

條件選擇if語句

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

練習(xí)

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

網(wǎng)頁名稱:腳本編程基礎(chǔ)
網(wǎng)站URL:http://muchs.cn/article8/ghihip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)站導(dǎo)航、移動網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計公司網(wǎng)站內(nèi)鏈、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)