您好,登錄后才能下訂單哦!
過程式:以指令為中心,數(shù)據(jù)服務(wù)于指令
對(duì)象式:以數(shù)據(jù)為中心,指令服務(wù)于數(shù)據(jù)
計(jì)算機(jī):運(yùn)行二進(jìn)制指令
編程語言:人與計(jì)算機(jī)之間交互的語言
低級(jí)編程語言
機(jī)器:二進(jìn)制的0和1的序列,稱為機(jī)器指令。與自然語言差異太大,難懂、難寫
匯編:用一些助記符號(hào)替代機(jī)器指令,稱為匯編語言
????如:ADD A,B 將寄存器A的數(shù)與寄存器B的數(shù)相加得到的數(shù)放到寄存器A中
????匯編語言寫好的程序需要匯編程序轉(zhuǎn)換成機(jī)器指令
????匯編語言稍微好理解,即機(jī)器指令對(duì)應(yīng)的助記符,助記符更接近自然語言
編譯:高級(jí)語言-->編譯器-->機(jī)器代碼-->執(zhí)行
????C,C++
?解釋:高級(jí)語言-->執(zhí)行-->解釋器-->機(jī)器代碼
????shell,python,php,JavaScript,perl
包含一些命令或聲明,并符合一定格式的文本文件
首行聲明序列
???#!/bin/bash
添加注釋
???注釋以#開頭
運(yùn)行腳本
???給予腳本執(zhí)行權(quán)限,在命令行指定腳本的絕對(duì)或相對(duì)路徑
???直接運(yùn)行解釋器,將腳本作為解釋器程序的參數(shù)運(yùn)行
自動(dòng)化常用命令
執(zhí)行系統(tǒng)管理和故障排除
創(chuàng)建簡單的應(yīng)用程序
處理文本或文件
檢測腳本中的語法錯(cuò)誤
??bash -n path
bash -x path
1、不能使程序中的保留字:例如if, for
2、只能使用數(shù)字、字母及下劃線,且不能以數(shù)字開頭
3、見名知義
4、統(tǒng)一命名規(guī)則:駝峰命名法
1、變量名大寫
2、局部變量小寫
3、函數(shù)名小寫
4、用英文名字,并體現(xiàn)出實(shí)際作用
根據(jù)變量的生效范圍等標(biāo)準(zhǔn)劃分下面變量類型
局部變量:生效范圍為當(dāng)前shell進(jìn)程;對(duì)當(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 這個(gè)程式的執(zhí)行名字
??$n 這個(gè)程式的第n個(gè)參數(shù)值,n=1..9,n=10...時(shí),用${n}表示
??$* 傳遞給腳本的所有參數(shù),全部參數(shù)合為一個(gè)字符串
??$# 這個(gè)程式的參數(shù)個(gè)數(shù)
??$$ 這個(gè)程式的PID(腳本運(yùn)行的當(dāng)前進(jìn)程ID號(hào))
??$! 執(zhí)行上一個(gè)背景指令的PID(后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程的進(jìn)程ID號(hào))
??$? 執(zhí)行上一個(gè)指令的返回值 (顯示最后命令的退出狀態(tài)。0表示沒有錯(cuò)誤,其他任何值表明有錯(cuò)誤)
??$- 顯示shell使用的當(dāng)前選項(xiàng),與set命令功能相同
??$@ 跟$*類似,傳遞給腳本的所有參數(shù),每個(gè)參數(shù)為獨(dú)立字符串
變量賦值:name=‘value’
可以使用引用value
?(1) 可以是直接字串:name=“root"
?(2) 變量引用:name="$USER"
?(3) 命令引用:name=COMMAND
???name=$(COMMAND)
變量引用:${name} 或者 $name
?" " 弱引用,其中的變量引用會(huì)被替換為變量值
?' ' 強(qiáng)引用,其中的變量引用不會(huì)被替換為變量值,而保持原字符串
顯示已定義的所有變量:set
刪除變量:unset name
變量聲明、賦值:
??export name=VALUE
??declare -x name=VALUE
變量引用:
??$name, ${name}
顯示所有環(huán)境變量:
??env
??printenv
??export
??declare -x
刪除變量
?unset name
bash中的算術(shù)運(yùn)算:help let
??+, -, *, /, %取模(取余), \**(乘方),乘法符號(hào)有些場景中需要轉(zhuǎn)義
實(shí)現(xiàn)算術(shù)運(yùn)算:
??(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]
增強(qiáng)型賦值:
??+=, -=, \*=, /=, %=
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
異或:^
??異或的兩個(gè)值,相同為假,不同為真 ?
短路運(yùn)算
短路與
??第一個(gè)為0,結(jié)果必定為0
??第一個(gè)為1,第二個(gè)必須要參與運(yùn)算
短路或
??第一個(gè)為1,結(jié)果必定為1
??第一個(gè)為0,第二個(gè)必須要參與運(yùn)算
正確是1,錯(cuò)誤是0
與運(yùn)算:
或運(yùn)算
非:取反:
AB值進(jìn)行對(duì)調(diào)
短路與 &&
短路或 ||
與 && :
成功繼續(xù)往后執(zhí)行
失敗就無需往后執(zhí)行
或 || :
失敗繼續(xù)往后執(zhí)行,成功則無需往后執(zhí)行
與或:
判斷某需求是否滿足,需要由測試機(jī)制來實(shí)現(xiàn) 專用的測試表達(dá)式需要由測試命令輔助完成測試過程 ?
評(píng)估布爾聲明,以便用在條件性執(zhí)行中 :
??若真,則返回0
??若假,則返回1 ?
測試命令:
??test EXPRESSION
??[ EXPRESSION ]
??[[ EXPRESSION ]]
注意:EXPRESSION前后必須有空白字符
-v VAR
??變量VAR是否設(shè)置
??示例:判斷 NAME 變量是否定義
????????[ -v NAME ] ?
數(shù)值測試:
??-gt 是否大于
??-ge 是否大于等于
??-eq 是否等于
??-ne 是否不等于
??-lt 是否小于
??-le 是否小于等于
字符串測試:
??-z "STRING" 字符串是否為空,空為真,不空為假
??-n "STRING" 字符串是否不空,不空為真,空為假
??= 是否等于 > ascii碼是否大于ascii碼
??< 是否小于
??!= 是否不等于
??== 左側(cè)字符串是否和右側(cè)的PATTERN相同
??注意:此表達(dá)式用于[[ ]]中,PATTERN為通配符
??=~ 左側(cè)字符串是否能夠被右側(cè)的PATTERN所匹配
??注意: 此表達(dá)式用于[[ ]]中;擴(kuò)展的正則表達(dá)式
存在性測試
??-a FILE:同 -e
??-e FILE: 文件存在性測試,存在為真,否則為假 ?
存在性及類別測試
??-b FILE:是否存在且為塊設(shè)備文件
??-c FILE:是否存在且為字符設(shè)備文件
??-d FILE:是否存在且為目錄文件
??-f FILE:是否存在且為普通文件
??-h FILE 或 -L FILE:存在且為符號(hào)鏈接文件
??-p FILE:是否存在且為命名管道文件
??-S FILE:是否存在且為套接字文件
文件權(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)限
文件大小測試:
??-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
第一種方式:
??[ EXPRESSION1 -a EXPRESSION2 ] 并且
??[ EXPRESSION1 -o EXPRESSION2 ] 或者
??[ ! EXPRESSION ] 取反
??-a 和 -o 需要使用測試命令進(jìn)行,[[ ]] 不支持 ?
第二種方式:
??COMMAND1 && COMMAND2 并且,短路與,代表?xiàng)l件性的AND THEN
??COMMAND1 || COMMAND2 或者,短路或,代表?xiàng)l件性的OR ELSE
??! COMMAND 非
??示例:
??[ -f “$FILE” ] && [[ “$FILE”=~ .*\.sh$ ]]
test:
[ ] :
判斷用戶magedu:如果存在則輸出結(jié)果,如果不存在則創(chuàng)建該用戶并輸出結(jié)果
判斷用戶wang:如果存在則輸出結(jié)果,如果不存在則創(chuàng)建該用戶并輸出結(jié)果
[[ ]] :支持正則表達(dá)式,通配符
=后跟的是擴(kuò)展正則表達(dá)式;
==后面跟的是通配符
找.log/.xlog結(jié)尾的文件,輸出結(jié)果
如果hello.sh這個(gè)文件是.sh后綴的,則添加執(zhí)行權(quán)限,
如果hello.txt文件是.sh后綴,則添加執(zhí)行權(quán)限,如果不是則不添加
看文件hello.txt是.sh后綴或者.txt后綴
-gt -a -o -lt :
判斷n的數(shù)值是否大于等于90并且小于等于100;判斷n的數(shù)值是否大于等于90或者小于等于100
-f -a -r : 判斷/etc/issue是否為一個(gè)文件并且是否可讀
編寫腳本 hostping.sh,接受一個(gè)主機(jī)的IPv4地址做為參數(shù),測試是否可連 通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通,則提 示用戶“該IP地址不可訪問”
編寫腳本 checkdisk.sh,檢查磁盤分區(qū)空間和inode使用率,如果超過80%, 就發(fā)郵件警告空間將滿
編寫腳本 nologin.sh和 login.sh,實(shí)現(xiàn)禁止和允許普通用戶登錄系統(tǒng)
禁止:
允許:
使用read來把輸入值分配給一個(gè)或多個(gè)shell變量
常用選項(xiàng)-p 指定要顯示的提示
-s 靜默輸入,一般用于密碼
-n N 指定輸入的字符長度N
-d ‘字符’ 輸入結(jié)束符
-t N TIMEOUT為N秒
read 從標(biāo)準(zhǔn)輸入中讀取值,給每個(gè)單詞分配一個(gè)變量 所有剩余單詞都被分配給最后一個(gè)變量
read -p “Enter a filename: “ FILE
read -p :指定要顯示的提示
read -sp : 隱藏輸入的密碼
read -n :只取前三個(gè)字符
read -d :看到指定字符就結(jié)束
read -t : 以秒為單位,超時(shí)不輸則直接退出
編寫腳本 hostping.sh,讓用戶輸入IP,測試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通,則提 示用戶“該IP地址不可訪問”
擇執(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)行判斷,第一次遇為“真”條件時(shí),執(zhí)行其分支,而后結(jié)束整個(gè)if語句
雙分支
編寫腳本IP提示用戶不可訪問,如果不是非法IP則提示可訪問
多分支
編寫腳本,根據(jù)BMI進(jìn)行身體質(zhì)量衡量
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。