shell script基礎(chǔ)

shell script是利用shell的功能所寫的一個(gè)“程序”,這個(gè)程序使用純文本,將一些shell的語(yǔ)法和命令(含外部命令)寫在里面,搭配正則表達(dá)式,管道命令與數(shù)據(jù)流重定向等功能,達(dá)到我們所需要的處理目的。

shell script的用途

  • 自動(dòng)化管理的重要依據(jù):管理主機(jī)的任務(wù)有查詢登錄文件、追蹤流量、監(jiān)控用戶使用主機(jī)狀態(tài)、主機(jī)各項(xiàng)硬件設(shè)備狀態(tài)、主機(jī)軟件更新查詢等
  • 追蹤和管理系統(tǒng)的重要工作
  • 簡(jiǎn)單入侵檢測(cè)功能
  • 連續(xù)命令單一化
  • 簡(jiǎn)易的數(shù)據(jù)處理
  • 跨平臺(tái)支持與學(xué)習(xí)歷程較短

shell scrpit的注意事項(xiàng)

  1. 命令從上而下,從左至右分析和執(zhí)行
  2. 命令、參數(shù)間的多個(gè)空白會(huì)被忽略
  3. 空白行也會(huì)被忽略
  4. 如果讀取到一個(gè)Enter符號(hào),就嘗試執(zhí)行該行命令
  5. 如果一行代碼太多,可以用[enter]來(lái)進(jìn)行擴(kuò)展
  6. “#”作為批注

shell script如何進(jìn)行執(zhí)行

  • 直接命令執(zhí)行
    • 絕對(duì)路徑:/path/to/your/shell.sh
    • 相對(duì)路徑: ./shell.sh
    • 將shell.sh存放在PATH指定的目錄
  • 以bash進(jìn)程來(lái)執(zhí)行:bash shell.sh sh shell.sh

不同執(zhí)行方法的區(qū)別

  • 利用直接執(zhí)行的方式來(lái)執(zhí)行script:該script會(huì)使用一個(gè)新的bash環(huán)境執(zhí)行的腳本內(nèi)容,中途產(chǎn)生的變量不會(huì)回傳到父進(jìn)程中
  • 利用source執(zhí)行腳本,會(huì)在父進(jìn)程中進(jìn)行

shell script編程基礎(chǔ)

shell script既然被稱為一門“編程語(yǔ)言”,那么就相應(yīng)的具有以下三個(gè)要素:

  • 基本表達(dá)式形式
  • 組合的方法
  • 抽象的方法

表達(dá)式

除了調(diào)用bc進(jìn)行數(shù)值計(jì)算,我們還可以直接在bash中進(jìn)行運(yùn)算
var=$((運(yùn)算內(nèi)容)) 或 declare -i total=$number1*$number2 #+ - * / %

命名和環(huán)境

一般而言,運(yùn)算結(jié)果都需要進(jìn)行儲(chǔ)存方便再次調(diào)用,所以就引入了變量。

var=value # 定義變量
unset value # 刪除變量
echo $var # 顯示變量
declare [-aixr] var #聲明變量類型 -a:數(shù)組,-i:整形,-x:效果同于export,-r:變量設(shè)置為readonly,變量定義后默認(rèn)為字符型

#通過(guò)交互獲取用戶輸入的變量
read -p "提示信息" 變量名
#顯示信息
echo -e "輸出信息 $變量名"

變量分為環(huán)境變量和自定義變量,環(huán)境變量作用于全局bash進(jìn)程,而自定義變量作用于當(dāng)前bash進(jìn)程。我們定義的變量都是自定義變量,可以使用export var定義為環(huán)境變量

復(fù)合過(guò)程

在其他編程語(yǔ)言中都有一種稱為函數(shù)的抽象技術(shù),shell script同樣擁有。

#定義
function fname() {
}
# 例子
function printit(){
    echo -n "This is a simple test "
}
printit

然而僅僅有函數(shù),知道如何定義變量還是不夠,我們可能還需要對(duì)變量進(jìn)行判斷,需要重復(fù)進(jìn)行運(yùn)算,所以我們需要if條件判斷,需要while和for的循環(huán)語(yǔ)句

條件判斷語(yǔ)句

#!/bin/bash
if [判斷1]; then
    執(zhí)行內(nèi)容
##多重判斷
elif [判斷2]; then
    執(zhí)行內(nèi)容
else
    執(zhí)行內(nèi)容
#結(jié)束 
fi

循環(huán)(loop)

# while do... done循環(huán)
while [condition]
do #循環(huán)開(kāi)始
    程序段落
done #循環(huán)結(jié)束
#until do ...done循環(huán)
until [condition]
do 
    程序段落
done
# for...do...done(固定循環(huán))
for var in cond1 cond2 cond3...
do
    執(zhí)行語(yǔ)句
done
#或類似于C語(yǔ)言
for ((i=1;i<=$num;i=i+1))
do
    echo $i
done

shell script的追蹤與調(diào)試

sh [-nvx] scripts.sh
-n : 不執(zhí)行scripts,僅查詢語(yǔ)言的問(wèn)題
-v : 在執(zhí)行scripts之前,先將scripts內(nèi)容輸出到屏幕上
-x : 將使用到的scripts輸出到屏幕上

以上就是shell scripts編程的語(yǔ)法部分,僅供備忘。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無(wú)法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,245評(píng)論 2 33
  • 一、shell腳本介紹 1.1 開(kāi)頭(環(huán)境使用shebang機(jī)制) #!/bin/bash 必須寫在文件首行 符號(hào)...
    優(yōu)果馥斯閱讀 3,605評(píng)論 0 1
  • 第一節(jié) Shell概述 1.Shell是什么 Shell是一個(gè)命令行解釋器,它為用戶提供了一個(gè)向Linux內(nèi)核發(fā)送...
    littlexjing閱讀 2,146評(píng)論 0 1
  • 1.創(chuàng)建文件夾 !/bin/sh mkdir -m 777 "%%1" 2.創(chuàng)建文件 !/bin/sh touch...
    BigJeffWang閱讀 10,491評(píng)論 3 53
  • 基本上,shell script 有點(diǎn)像早期的批處理程序,即將一些命令匯整起來(lái)一次執(zhí)行,但shell script...
    Zhang21閱讀 1,273評(píng)論 0 0

友情鏈接更多精彩內(nèi)容