一、進程:python
shell應用程序的進程通常爲交互式的,在廣義上分爲GUI和CLI算法
GUI(Graphical User Interface,簡稱 GUI,又稱圖形用戶接口)是指採用圖形方式顯示的計算機操做用戶界面,支持鼠標,桌面等外設,比較著名的windows、Androidshell
CLI(command-line interface,命令行界面)是指可在用戶提示符下鍵入可執行指令的界面,它一般不支持鼠標,用戶經過鍵盤輸入指令,計算機接收到指令後,予以執行。編程
CLI的詞法通常由 命令,選項,參數組成,分爲內建命令和外部命令windows
二、執行方式:數組
因爲Linux的腳本或程序源文件通常爲文本文件,因此在執行Linux腳本的時候通常分爲兩種方式:bash
①編譯執行:預處理-->編譯-->彙編-->連接-->二進制程序文件或可執行文件。表明有:C, C++數據結構
②解釋執行:由解釋器全程參與運行過程,每次讀取一行,運行一行。表明有:Python和bashssh
Python:通常有寫好的編程庫,用戶經過寫程序控制結構,調用編程庫完成程序編寫;ide
庫文件:通常爲功能模塊,在編程中可直接調用也能夠經過其API進行調用。
Bash:須要從零開始編寫,也是程序控制結構,可是須要調用機器上命令程序文件進行程序編 寫;
外部命令:通常由各應用程序提供;
三、程序:通常爲爲達到某種用戶的目的而編寫的指令和數據或算法和數據的集合
根據側重點不一樣能夠分爲過程式編程和對象式編程:
過程式編程:以指令爲中心,設計算法,數據服務於算法;
對象式編程:以數據爲中心,設計數據結構(類),程序服務於數據結構;
bash 根據不一樣狀況能夠將bash編程按執行類別分爲三類: 順序執行:逐個執行 選擇執行:只執行其中一個分支 if...fi,if...elif...else...fi 循環執行:一段代碼要執行0,1或多遍 while,if...elif...else...fi
bash的編程元素:變量、流程、函數
①變量:根據不一樣狀況能夠分爲 本地變量、環境變量、局部變量、位置參數變量以及特殊變量(內置變量)
變量的命名規則:只能包含數字、字母和下劃線;且不能以數字開頭;
引用變量:${name}, $name
變量的引用:
弱引用: "", 其內部的變量引用會被替換爲變量值;
強引用:'',其變量的變量引用會保持原有字符;
命令引用:`COMMAND`, $(COMMAND),引用命令的執行結果;
聲明爲整型:
declare -i name=[value] -i:整型變量
let name=value
查看全部變量:set
銷燬:
自動銷燬:shell進程終止;
手動銷燬:unset name
bash的變量使用特色:弱類型、無須事先聲明;
本地變量:在用戶如今的shell生命期的腳本中使用,只在用戶當前shell生命期有意義。若是在shell 中啓動另外一個進程或退出,此值將無效。這個方法的優勢就是用戶不能對其餘的shell或進 程設置此變量有效。
設置一本地變量,格式爲:
$ variable-name=value 或 $ {variable-name=value}
variable-name:變量名
=:賦值符號
value:變量值
注意:等號兩邊能夠有空格。若是取值包含空格,必須用雙引號括起來。shell變量能夠用大小寫字母 ,使用變量時,若是用花括號將之括起來,能夠防止shell誤解變量值。(具體見內容一)
環境變量:被「導出」的本地變量,能夠在全部的用戶進程中使用。登陸進程是父進程,shell進程是 子進程。父進程初始化環境變量,子進程就均可以使用了。
環境變量的配置文件
/etc/profile(做用於全部用戶) or /home/user/.bash_profile(做用於user用戶)
變量聲明的命令:
export name=[value]
declare -x name[=value] -x:環境變量
查看全部環境變量:env, printenv, export
銷燬:unset name (具體見內容二)
局部變量:被限定在建立它們的shell中。local函數能夠用來建立局部變量,但僅限於函數內使用。 局部變量能夠經過簡單的賦予它一個值或一個變量名來設置,用declare內置函數來設置, 或者省略也可,某個函數執行過程;
declare 變量名=值
位置參數變量:在腳本中引用傳遞給腳本的參數;在函數中引用傳遞給函數的參數;參數相關數目傳入腳本,此數目能夠任意多,但只有前9個能夠被訪問,使用shift命令能夠改變這個限制;參數從第一個開始,在第九個結束;每一個訪問參數前要加$符號;第一個參數爲0,表示預留保存實際腳本名字;不管腳本是否有參數,此值都可用.
$0:腳本名字。此變量包含地址,可使用basename $0得到腳本名稱。
$1:第一個參數
$2,$3,$4,$5,...一次類推。
特殊變量:$?, $*, $@, $#, $$,$-,$!
特定shell變量以下:
$# 傳遞到腳本的參數個數;
$* 以一個單字符串顯示全部向腳本傳遞的參數。與位置變量不一樣,此選項參數可超過9個;
$$ 腳本運行的當前進程ID號;
$! 後臺運行的最後一個進程的進程ID號;
$@ 與$*相同,可是使用時加引號,並在引號中返回每一個參數;
$- 顯示shell使用的當前選項,與set命令功能相同;
$? 顯示最後命令的退出狀態.0表示沒有錯誤,其餘任何值代表有錯誤;
[root@iZ28qzns9m4Z ~]# echo $$ 31253 [root@iZ28qzns9m4Z ~]# echo $- himBH [root@iZ28qzns9m4Z ~]# echo $? 0
內容一: [root@iZ28qzns9m4Z ~]# name=nicai #設定本地變量 [root@iZ28qzns9m4Z ~]# echo $name #打印輸出 nicai [root@iZ28qzns9m4Z ~]# bash #進入下一級本地變量 [root@iZ28qzns9m4Z ~]# echo $name [root@iZ28qzns9m4Z ~]# exit exit [root@iZ28qzns9m4Z ~]# echo $name nicai [root@iZ28qzns9m4Z ~]# [root@iZ28qzns9m4Z ~]# pstree systemd─┬─AliHids───9*[{AliHids}] ├─AliYunDun───8*[{AliYunDun}] ├─AliYunDunUpdate───6*[{AliYunDunUpdate}] ├─agetty ├─crond ├─dbus-daemon ├─gshelld───3*[{gshelld}] ├─iprdump ├─iprinit ├─iprupdate ├─lvmetad ├─nscd───7*[{nscd}] ├─ntpd ├─rsyslogd───2*[{rsyslogd}] ├─sshd───sshd───bash───pstree #有內容的本地變量 ├─systemd-journal ├─systemd-logind └─systemd-udevd [root@iZ28qzns9m4Z ~]# bash [root@iZ28qzns9m4Z ~]# pstree systemd─┬─AliHids───9*[{AliHids}] ├─AliYunDun───8*[{AliYunDun}] ├─AliYunDunUpdate───6*[{AliYunDunUpdate}] ├─agetty ├─crond ├─dbus-daemon ├─gshelld───3*[{gshelld}] ├─iprdump ├─iprinit ├─iprupdate ├─lvmetad ├─nscd───7*[{nscd}] ├─ntpd ├─rsyslogd───2*[{rsyslogd}] ├─sshd───sshd───bash───bash───pstree ├─systemd-journal ├─systemd-logind └─systemd-udevd [root@iZ28qzns9m4Z ~]#
內容二: [root@iZ28qzns9m4Z ~]# name=nicai #本地變量 [root@iZ28qzns9m4Z ~]# echo $name nicai [root@iZ28qzns9m4Z ~]# bash [root@iZ28qzns9m4Z ~]# echo $name [root@iZ28qzns9m4Z ~]# exit exit [root@iZ28qzns9m4Z ~]# echo $name nicai [root@iZ28qzns9m4Z ~]# export name[=aaa] -bash: export: `name[=aaa]': not a valid identifier [root@iZ28qzns9m4Z ~]# export name=[aaa] #環境變量 [root@iZ28qzns9m4Z ~]# echo $name [aaa] [root@iZ28qzns9m4Z ~]# bash [root@iZ28qzns9m4Z ~]# echo $name [aaa] [root@iZ28qzns9m4Z ~]# [root@iZ28qzns9m4Z ~]# env XDG_SESSION_ID=466 HOSTNAME=iZ28qzns9m4Z SHELL=/bin/bash TERM=xterm HISTSIZE=1000 SSH_CLIENT=61.182.229.120 60276 22 SSH_TTY=/dev/pts/0 USER=root name=[bbb] ... [root@iZ28qzns9m4Z ~]# unset name [root@iZ28qzns9m4Z ~]# echo $name [root@iZ28qzns9m4Z ~]#