腳本的初步瞭解筆記

bash腳本編程

shell編程php

 編程語言:機器語言 、彙編語言、高級語言java

 

高級語言python

靜態語言:編譯型語言c++

不須要藉助額外的二進制程序,能夠直接寫代碼shell

屬於強類型的語言(變量)編程

事先轉換成可執行格式,不須要解釋器,本身就能夠完成程序c#

屬於靜態語言的: C C++  java c#bash

問題就是容易出bug,由於是所有完成之後執行,沒有校對,一旦出問題很難排查less

 

動態語言:解釋型語言編程語言

弱類型的語言:

不須要直接轉換有編譯器 ,邊解釋邊執行

Asp php shell python perl

 

 

Bash:腳本解釋器

 

面向過程:就是分析出解決問題所須要的步驟,而後用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就能夠了。
面向對象:是把構成問題事務分解成各個對象,創建對象的目的不是爲了完成一個步驟,而是爲了描敘某個事物在整個解決問題的步驟中的行爲。適合開發大型應用程序
例如五子棋面向過程的設計思路就是首先分析問題的步驟:一、開始遊戲,二、黑子先走,三、繪製畫面,四、判斷輸贏,五、輪到白子,六、繪製畫面,七、判斷輸贏,八、返回步驟2,九、輸出最後結果。把上面每一個步驟用分別的函數來實現,問題就解決了。

面向對象的設計則是從另外的思路來解決問題。整個五子棋能夠分爲 一、黑白雙方,這兩方的行爲是如出一轍的,二、棋盤系統,負責繪製畫面,三、規則系統,負責斷定諸如犯規、輸贏等。第一類對象(玩家對象)負責接受用戶輸入,並告知第二類對象(棋盤對象)棋子佈局的變化,棋盤對象接收到了棋子的i變化就要負責在屏幕上面顯示出這種變化,同時利用第三類對象(規則系統)來對棋局進行斷定。

能夠明顯地看出,面向對象是以功能來劃分問題,而不是步驟。一樣是繪製棋局,這樣的行爲在面向過程的設計中分散在了總多步驟中,極可能出現不一樣的繪製版本,由於一般設計人員會考慮到實際狀況進行各類各樣的簡化。而面向對象的設計中,繪圖只可能在棋盤對象中出現,從而保證了繪圖的統一。

 

 

面向過程的語言:shell c語言

面向對象:java徹底面對對象 python  c++

                

                 變量

變量:被命名的內存空間

內存:編址的存儲單元

內存在存儲數據時,都會給數據編上地址方便使用時查找,雖然都是存儲可是內存讀取寫入的的速度要比硬盤快太多了 內存做爲一個短暫存儲快速與cpu配合工做 而後把數據在存儲在硬盤裏

 

變量也是區分類型的,由於內存存儲 一個字符和一個數值所用的空間徹底不同,一個字符佔用7bit,可是一個字節最小是8bit  字符10就要佔用16bit空間 而數值的10 二進制轉換爲1010 才佔用4位 ,那麼內存怎麼用不一樣的方法給予變量空間 所以產生了不一樣類型的變量,以最合適的方法佔用內存空間

 

變量類型:肯定數據類型的存儲格式和存儲長度

不一樣的格式佔用的內存存儲空間不同

 

 變量類型常見的分爲

           字符型:

            數值型:

                   整數型

                   浮點型:帶小數點後面精度的 例如11.23 21.43 都是帶小數的

日期時間型:最後仍是會轉換爲字符或者數值型來進行存儲

布爾型:真、假型 又稱邏輯類型

例1+1>2 判斷類型結果是對仍是錯 若是是對就保存爲真 不過是錯就保存爲假,那麼如何表示真假呢 那有不少方法 能夠用yes和no 也能夠用計算機0或1表示

 

 

 

 

 

除了算數運算還有邏輯運算

邏輯運算三種:與、或、非

「!」(邏輯非)、「&&」(邏輯與)、「||」(邏輯或)是三種邏輯運算符。
「邏輯與」至關於生活中說的「而且」,就是兩個條件都同時成立的狀況下「邏輯與」的運算結果才爲「真」。

邏輯與:只要有一個爲假,那麼結果必定爲假

簡單來說就是 必須知足全部條件 才能執行
「邏輯或」至關於生活中的「或者」,當兩個條件中有任一個條件知足,「邏輯或」的運算結果就爲「真」

邏輯或:只要其中一個爲真,那麼結果就爲真

或簡單來講 就是知足其中一個條件 一個條件就能夠執行

 

邏輯非:取反

!真1=假0  取它的反向數值 若是是正確使用非之後就是錯的

 

 

編譯型語言,沒有額外的處理邏輯,因此都是強類型

腳本型語言  可有有解釋器來控制,因此能夠是弱類型

Shell:弱類型編程語言

 

強類型:變量在使用前,必需要實現聲明,甚至還須要初始化 通常初始化爲0

0不是空

真正的空表示爲null:什麼都沒有

變量在存數據以前,必須先告訴程序,我有變量要用,這個變量是什麼類型的

 

弱類型:變量直接用不須要聲明 變量用時聲明,甚至不區分類型

 

變量賦值:變量名=賦予的值  賦予的值會保存在這個變量名稱所對應的存儲空間裏

 

知識串講

Linux內置環境變量,這樣能夠簡化命令使用,要否則外置命令所有都以全路徑操做會很是麻煩

(1)變量:變量其實就是內存,並且是進程的變量  命名的內存空間。我在內存劃出一部分空間而後命名,我就能夠向起名的內存空間放數據,放數據的過程就變量賦值

Name=jay 在內存中找一部分空間起名叫name而空間中放的數據叫jay  =就叫賦值,至關於一個抽屜 抽屜名字叫name 抽屜裏的書叫jay

命令行中啓動的腳本會繼承當前shell中的環境變量

系統自行執行的腳本

 

$:引用變量${變量名} 花括號能夠省略 可是若是形成名稱混淆的那麼必須加花括號 

例 name=s

Echo‘你 是 大 傻 $」nameb」

這樣就必須加 {} 花括號 由於系統會把nameb當成一個 變量名 因此${name}b就能夠顯示出來了

在複習一個知識點

‘’: 強引用  不作變量替換的 echo輸出什麼就是什麼

「」:弱引用  內部的變量會替換

 

 

特殊變量

$?:保存上一個命令的執行狀態返回值

程序執行之後可能有兩類返回值

1 程序執行結果

2 程序執行狀態返回代碼(0-255)

       0表示正確執行

       1-255 表示錯誤執行 一、二、127系統預留

可有這麼使用 ls /var

  而後$?

若是現實0那麼表示執行正確 其他1-255都表示錯誤

 

 

/dev/null 軟件設備 又稱數據黑洞 輸入的任何數值都會被吞下去而且再也找不回來,相似於一個垃圾站, 若是把數據 用>> >追加在裏頭那麼數據就會直接消失 之後會用到

 

 

set :查看當前shell中的變量

 

env:查看當前shell中的環境變量

export也能夠

 

天天都在說 腳本 腳本的 那麼什麼是腳本?

腳本:其實就是程序的源代碼,命令的堆砌,按實際需求,結合命令流程控制機制,實現的源程序

 

Bash如何實現條件測試判斷?

條件測試類型:

整數測試:2是否是等於3

字符串測試:某一段所保存的數字 是否是a b c d

文件測試:判斷文件是否是存在

 

條件測試的表達式,如何定義條件測試

[ 表達式 ]

注意: 表達式兩邊必須有空格 不然就是語法錯誤

 

[[ 表達式 ]]

 

test 表達式

格式 if  [ 表達式1  –eq  表達式2 ]

整數比較:

-eq 等於 equal  一口:測試兩個整數是否相等 好比 [  $a  –eq  $b  ] 相等爲真 不等爲

 

-ne 不等於 no equal  no 一口:測試兩個整數是否不等 不等爲真 相等爲假

 

-gt  大於 greater than 格瑞特 贊 :測試一個數是否大於另外一個數  大於爲真 不然爲假 有多是小於或者等於

 

-lt  小於 less than 蘭斯 贊 : 測試一數是否小於另外一個數 小於爲真 不然爲假

 

-ge 大於或等於

 

-le  小於或等於

 

 

文件表達式
-e:測試文件是否存在,若是存在則爲真


-d 目錄:後面跟目錄路徑 測試是不是目錄,則爲真 


-f 文件: 後面跟上文件路徑 測試文件是否爲普通文件

 

-r :測試指定文件,對當前用戶來說 執行腳本的用戶 測試當前用戶對指定文件是否有寫權限

 

-x:測試指定文件,對當前用戶來說 執行腳本的用戶 測試當前用戶對指定文件是否有執行權限

 

-w:測試指定文件,對當前用戶來說 執行腳本的用戶 測試當前用戶對指定文件是否有寫權限



 

邏輯與:&&

第一個條件爲假 ,第二個條件就不用判斷 ,結果就是爲假

若是第一個條件爲真,第二個條件必需要判斷

至關於並聯電路 只要有一個開關壞了 那麼總體燈就不亮,因此就沒必要再去判斷第二個開關是否爲好

 

邏輯或:||

不管第一個條件爲真或者爲假,都會去判斷第二個條件 兩個都爲假結果就爲假

至關於串聯 第一個壞不影響電路,因此第一爲假 仍是會去判斷第二個條件,若是兩個都爲假,那麼結果才爲假

 

邏輯非 !

取反

若是邏輯與第一個條件爲假 不存在 那麼就不會去判斷第二個條件了 ,因此在條件前頭加上邏輯非 取反 讓第一個條件僞裝爲真,爲真邏輯與纔回去判斷第二個條件

 

例若是用戶不存在 那麼就添加用戶

! id –a wuxiaolei  && userada wuxiaolei

 第一個條件 id –a 查詢沒有wuxiaol這個用戶 那麼邏輯與就不會去判斷第二個條件了,因此前頭加邏輯非! 讓第一個條件僞裝爲真,第一個條件爲真了那麼邏輯與纔回去判斷第二個條件

 

變量名稱命名規則:只能包含字母、數字和下劃線,而且不能以數字爲開頭命名,不該該以系統現有的變量重名,不要習慣性的在變量後面加空格 例如w=  wc-l  加空格是不容許的

 

條件判斷控制結構

1. 單分支的if 語句 

使用方法以下

 

if  條件判斷 若是條件爲真

then  則  執行下面的語句

執行 語句1

執行 語句2

……

fi

 

``:命令引用 這種引用的命令的執行結果,不然用得少命令的狀態結果 就是0爲真剩餘爲假的這種結果

 

 

 

 

 

 

雙分支的if語句

If 指定判斷條件 若是條件爲真 

then      則執行

執行語句1

執行語句2

…….

else      不然執行

執行語句 3

執行語句4

……..

fi

 判斷條件能夠說整數比較,也能夠某個狀態返回值

 

 

多分支if語句

if 判斷條件1 若是條件爲真知足

則 then       

執行 語句1

     語句2

若是條件爲假 不知足 那麼

elif 那麼判斷

then

           語句3

           語句4    若是知足就到此爲止裏 ,若是還不知足就繼續往下斷定

elfi      那麼判斷

            語句5

            語句6

else  不然執行

            語句7

            語句8 

If 結束

 

 

 

 

 

 

Shell中如何進行算數運算

A=3

B=4

C=$[$A+$B]

echo  $C

7

 

 

 

 2變量生成的過程就是申請內存使用的過程

 

 

本地變量:變量名=賦予數值便可 做用域爲整個bash進程均可以使用

 

局部變量 local 變量名=賦予數值  做用域爲當前代碼段有效

 

Bash:變量是進程的變量,一但進程結束那麼變量就會消失

 

環境變量:做用域爲當前shell進程以及子進程。其他的與本地變量差很少

export 變量名=賦予數值

腳本在執行時,會啓動一個子shell進程

 

 

位置變量:$1 ,$2 , …….

命令的組成部分

 

命令 選項 參數 這種格式

選項:修正命令執行特性

參數:命令的做用對象

 

位置變量就能夠代替參數  好比說 cat   /etc/inittab  /etc/passwd / /etc/123.txt

                               命令   參數

那麼位置變量就能夠代替參數

讓咱們來看看實例 寫個腳本 命名爲d.sh

 

#!/bin/bash

#

fi [ -d $1 $2]

echo  「是目錄」

else

echo   「不是目錄」

fi

執行後

./d.sh  /etc/init.tab  /etc/passwd

 就會顯示是否爲目錄

由於 $1  $2 分別代替了命令的參數選項

這種很是靈活

$1:此處代替了 /etc/init.tab 

$2:此處代替了 /etc/passwd

 

 

特殊變量

$?:執行命令狀態返回值

$#: 利用echo 加$# 能夠查看參數的個數

好比

./d.sh  /etc/init.tab  /etc/passwd

在腳本最上頭加上

echo $#

 

那麼執行完腳本

屏幕輸出會出現2

就證實 有2個參數

相關文章
相關標籤/搜索