## 一、編程語言的分類
編程語言的分類,根據其分類標準的不同,也有不同種分法。
1. 編程語言根據其運行方式,大概分為兩類:
(1) 編譯運行:源代碼 –> 編譯器(編譯) –> 程序文件
(2) 解釋運行:源代碼 –> 運行時啟動解釋器,由解釋器邊解釋邊運行
二者優劣比較:
運行方式 | 執行速度 | 變更靈活度
———— | ———— | ————–
編譯運行 | 快 | 低
解釋運行 | 慢 | 高
> 為了解決編譯運行的靈活性問題,避免一個大程序修改少量代碼要耗時數小時進行重新編譯,很多項目中,都對代碼進行分段編譯。當需要修改局部代碼時,只需重新編譯其所屬段即可完成重新編譯動作,減少了編譯的耗時,提高了使用效率。
2. 根據其編程過程中功能的實現是調用庫還是調用外部的程序文件來分類:
(1) shell腳本編程:利用系統上的命令及程序編程組件進行編程;
(2) 完整編程:利用自身庫或編程組件進行編程;
3. 根據編程模型進行分類:
(1) 面向過程式編程語言:以指令為中心,來組織代碼,數據服務于指令;
其中包括:
順序執行、選擇執行、循環執行
(2) 面向對象式編程語言:以數據為中心,來組織代碼,指令服務于數據;
這種編程語言,首先要有對象,然后將對象實例化出來,取名為類(class),再開發出針對類的一些處理方法,取名為方法(method),通過method去管理class。例如:Java、C++、Python
## 二、文本編輯器
Linux系統中有很多文本編輯器
(1) **nano**:GNU nano 是一款小巧友好的文本編輯器。nano 是 Pico 編輯器的自由克隆版本,也是 Pico 的功能增強。這款軟件在屏幕下方通過操作提示,來告知用戶下一步操作的快捷鍵。
(2) **sed**
(3) **vi** 或 **vim**
## 三、Shell腳本編程
### 1. 什么是Shell腳本編程?
Shell腳本編程實際上就是命令的堆積,命令多不具有冪等性,需要用程序邏輯來判斷運行條件是否滿足,以避免其運行中發生錯誤。
### 2. Shell腳本編程的特點
(1) 是過程式編程語言
(2) 通過解釋運行方式運行在Linux系統中
(3) 依賴于外部程序文件運行
### 3. 如何寫shell腳本?
(1) 腳本文件的第一行
頂格,給出shebang(解釋器路徑),用于指明解釋器執行當前腳本的解釋器程序文件。
常見解釋器首行格式
bash : #!/bin/bash
python : #!/usr/bin/python
perl : #!/usr/bin/perl
(2) 運行Shell腳本
方法1 : 賦予腳本執行權限,并直接運行此程序文件。例如:chmod +x /PATH/TO/SCRIPT_FILE
方法2 : 通過解釋器直接運行。例如:bash /PATH/TO/SCRIPT_FILE
> 注意:
腳本中的空白行將會被解釋器忽略,想換行的可以單起一行輸入echo;
腳本中,除了shebang,余下所有以#開頭的行,都將被視作注釋行而被忽略,即為注釋行;
shell腳本的運行時通過運行一個子shell進程實現的;
### 4. bash腳本編程之配置文件
**登陸類型分類**:
(1) 交互式登錄shell進程:
– 直接通過某終端輸入賬號和密碼后登陸打開的shell進程;
– 使用su命令:su – USERNAME或者使用su -l USERNAME執行的登陸切換;
(2) 非交互式登陸shell進程:
– 使用su USERNAME執行的登陸切換;
– 在圖形界面下打開的終端;
– 運行腳本;
**bash配置文件分為兩類**:
(1) **profile類**:為交互式登錄的shell提供配置
**profile類配置文件**
類型 | 作用范圍 | 文件
—— | ———— | ——
全局配置 | 對所有用戶都有效 | /etc/profile, /etc/profile.d/*.sh
用戶個人配置 | 僅對當前用戶有效 | ~/.bash_profile
profile類的功用:
– 用于定義環境變量
– 用于運行命令或腳本
(2) **bashrc類**:為非交互式登陸的shell進程提供配置
**bashrc類配置文件**
類型 | 作用范圍 | 文件
—— | ———— | ——
全局配置 | 對所有用戶都有效 | /etc/bashrc
用戶個人配置 | 僅對當前用戶有效 | ~/.bashrc
bashrc類的功用:
– 定義本地變量
– 定義命令別名
> 注意:
僅管理員可修改全局配置文件。
**配置文件讀取順序**
交互式登錄shell進程的配置文件讀取順序:
/etc/profile –> /etc/profile.d/*.sh –> ~/.bash_profile –> ~/.bashrc –> /etc/bashrc
非交互式登錄shell進程的配置文件讀取順序:
~/.bashrc –> /etc/bashrc –> /etc/profile.d/*.sh
>注意:
配置文件的生效是:以最后讀取的配置為最終生效配置;
在命令行中定義的特性,例如變量和別名作用域為當前shell進程的生命周期;
在配置文件定義的特性,只對隨后新啟動的shell進程有效;
讓通過配置文件定義的特性立即生效:
(1) 通過命令行重復定義一次;
(2) 讓shell進程重讀配置文件;
– ~]# source /PATH/TO/CONF_FILE
– ~]# . /PATH/TO/CONF_FILE
練習題:
(1) 定義對所有用戶都生效的命令別名,例如:lftps=’lftp 172.16.0.1/pub’?
“`
~]# vim /etc/bashrc
在文件末尾添加如下行:
alias lftps=’lftp 172.16.0.1/pub’
~]# . /etc/bashrc
“`
(2) 讓centos用戶登錄時,提示其已經登陸,并顯示當前系統時間?
“`
~]# vim /home/centos/.bash_profile
在文件末尾添加如下行:
echo “Hi, centos!You logged into the system at $(date+%D-%T).”
“`
### 5. bash腳本編程之算數運算
算術運算有很多種,包括+, -, *, /, **(次方), %(取模,也叫取余數)。這些算數運算在linux的bash shell中無法直接使用,需要用單獨的運算格式。
算術運算格式:
(1) let VAR=算數運算表達式
(2) VAR=$[算術運算表達式]
(3) VAR=$((算術運算表達式))
(4) VAR=$(expr $ARG1 $OP $ARG2)
其中,ARG1和ARG2是兩個變量,$OP是算術運算法則,包括+, -, *, /, **(次方), %(取模,也叫取余數)。
注意:彼此間都要有空格?。?/p>
練習題:
(1) 寫一個腳本,完成如下功能:添加三個用戶,求此三個用戶的UID之和;
“`
#!/bin/bash
id tom &> /dev/null || useradd tom
id jerry &> /dev/null || useradd jerry
id neo &> /dev/null || useradd neo
declare -i A=`grep “^tom” /etc/passwd | cut -d: -f3`
declare -i B=`grep “^jerry” /etc/passwd | cut -d: -f3`
declare -i C=`grep “^neo” /etc/passwd | cut -d: -f3`
let sum=$A+$B+$C
echo $sum
“`
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/87467