您好,登錄后才能下訂單哦!
過程式:以指令為中心,數據服務于指令
對象式:以數據為中心,指令服務于數據
計算機:運行二進制指令
編程語言:人與計算機之間交互的語言
低級編程語言
機器:二進制的0和1的序列,稱為機器指令。與自然語言差異太大,難懂、難寫
匯編:用一些助記符號替代機器指令,稱為匯編語言
????如:ADD A,B 將寄存器A的數與寄存器B的數相加得到的數放到寄存器A中
????匯編語言寫好的程序需要匯編程序轉換成機器指令
????匯編語言稍微好理解,即機器指令對應的助記符,助記符更接近自然語言
編譯:高級語言-->編譯器-->機器代碼-->執行
????C,C++
?解釋:高級語言-->執行-->解釋器-->機器代碼
????shell,python,php,JavaScript,perl
包含一些命令或聲明,并符合一定格式的文本文件
首行聲明序列
???#!/bin/bash
添加注釋
???注釋以#開頭
運行腳本
???給予腳本執行權限,在命令行指定腳本的絕對或相對路徑
???直接運行解釋器,將腳本作為解釋器程序的參數運行
自動化常用命令
執行系統管理和故障排除
創建簡單的應用程序
處理文本或文件
檢測腳本中的語法錯誤
??bash -n path
bash -x path
1、不能使程序中的保留字:例如if, for
2、只能使用數字、字母及下劃線,且不能以數字開頭
3、見名知義
4、統一命名規則:駝峰命名法
1、變量名大寫
2、局部變量小寫
3、函數名小寫
4、用英文名字,并體現出實際作用
根據變量的生效范圍等標準劃分下面變量類型
局部變量:生效范圍為當前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前后必須有空白字符
-v VAR
??變量VAR是否設置
??示例:判斷 NAME 變量是否定義
????????[ -v NAME ] ?
數值測試:
??-gt 是否大于
??-ge 是否大于等于
??-eq 是否等于
??-ne 是否不等于
??-lt 是否小于
??-le 是否小于等于
字符串測試:
??-z "STRING" 字符串是否為空,空為真,不空為假
??-n "STRING" 字符串是否不空,不空為真,空為假
??= 是否等于 > ascii碼是否大于ascii碼
??< 是否小于
??!= 是否不等于
??== 左側字符串是否和右側的PATTERN相同
??注意:此表達式用于[[ ]]中,PATTERN為通配符
??=~ 左側字符串是否能夠被右側的PATTERN所匹配
??注意: 此表達式用于[[ ]]中;擴展的正則表達式
存在性測試
??-a FILE:同 -e
??-e FILE: 文件存在性測試,存在為真,否則為假 ?
存在性及類別測試
??-b FILE:是否存在且為塊設備文件
??-c FILE:是否存在且為字符設備文件
??-d FILE:是否存在且為目錄文件
??-f FILE:是否存在且為普通文件
??-h FILE 或 -L FILE:存在且為符號鏈接文件
??-p FILE:是否存在且為命名管道文件
??-S FILE:是否存在且為套接字文件
文件權限測試:
??-r FILE:是否存在且可讀
??-w FILE: 是否存在且可寫
??-x FILE: 是否存在且可執行 ?
文件特殊權限測試:
??-u FILE:是否存在且擁有suid權限
??-g FILE:是否存在且擁有sgid權限
??-k FILE:是否存在且擁有sticky權限
文件大小測試:
??-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
第一種方式:
??[ 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來把輸入值分配給一個或多個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 判斷條件;then
????條件為真的分支代碼
??fi ?
雙分支
??if 判斷條件; then
????條件為真的分支代碼
??else
????條件為假的分支代碼
??fi
多分支
??if 判斷條件1; then
????條件1為真的分支代碼
??elif 判斷條件2; then
????條件2為真的分支代碼
??elif 判斷條件3; then
????條件3為真的分支代碼
??else
????以上條件都為假的分支代碼
??fi ?
逐條件進行判斷,第一次遇為“真”條件時,執行其分支,而后結束整個if語句
雙分支
編寫腳本IP提示用戶不可訪問,如果不是非法IP則提示可訪問
多分支
編寫腳本,根據BMI進行身體質量衡量
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。