shell編程
編譯器 解釋器
編程語言: 機器語言 彙編語言 高級語言
靜態語言:編譯型語言
強類型(變量)
事先轉換成可執行格式
C C++ JAVA C#
動態語言:解釋型語言
弱類型
邊解釋邊執行
PHP SHELL Python perl
bash:(解釋器本身是靜態語言開發的)
面向對象 JAVA Python perl C++
面向過程 shell C
變量類型:事先定義數據的存儲格式和長度
字符
數值
整型
浮點型:11.23 1.123*10^1
布爾型
邏輯: 1 + 1 > 2
邏輯運算:與 或 非 異或(相同爲0)
1:真
0:假
整型:8bit:256
16bit:
32bit:
64bit
變量:內存空間 命名
內存:編址的存儲單元
進程:
1+100
編程能力:
腳本編程
shell:弱類型編程語言
強:變量在使用前,必須事先聲明,甚至還需初始化:
NULL:
弱: 變量用時聲明:甚至不區別類型
變量賦值:VAR_NAME = VALUE
bash變量類型:
環境變量
本地變量(局部變量)
位置變量
特殊變量
本地變量:
(set 省略)VARNAME = VALUE:作用域爲整個bash進程
局部變量:
local VALUENAME = VALUE,作用域爲當前代碼段
環境變量:作用域爲當前shell進程及其子進程
export VARNAME = VALUE
VARNAME = VALUE
export VARNAME
“導出”
位置變量:
$1,$2,...
特殊變量:
$?:上一個命令的執行狀態返回值
程序執行,可能有兩類返回值:
程序執行結果
程序狀態返回代碼(0-255)
0:正確
1-255:錯誤執行,系統預留:1,2,127
每執行一個命令,後面緊跟一個執行echo $? ,狀態返回代碼
輸出重定向:
> >> 2> 2>> &>
/dev/null 軟件設備,bit bucket,數據黑洞
撤掉變量
unset VARNAME 撤銷變量
查看當前shell中的變量:
set
包括環境變量和本地變量
查看當前shell中的環境變量
printenv
env
export
# ANIMALS = pig
# ANIMALS = $ANIMALS:goat
# A = 2
# B = 2
# C = $A + $B
# echo $C
2+3
腳本:命令的堆砌,按實際需要,結合命令流程控制機制實現的源程序
1 nano fist.sh #!(shebang指定程序的魔數)
#!/bin/bash(第一行)
#註釋行,
cat /etc/fstab
ls /var
bash first.sh 不用給執行權限(好像也沒指定路徑)
腳本在執行時會啓動一個子shell進程(pstree)
命令行中啓動的腳本會繼承當前shell環境變量
系統自動執行的腳本(非命令行啓動)就需要自我定義需要各環境變量
bash:
引用變量: $(VARNAME),括號有時可省略
雙引號弱引用,其內的字符串做變量替換
單引號強引用,其內的字符串不做變量替換
練習:寫一個腳本,完成以下任務
1 添加5個用戶,user1,...,user5
2 每個用戶的密碼同用戶名,而且要求,添加密碼完成後不顯示passwd
命令的執行結果信息
3 每個用戶添加完成後,都要顯示用戶某某已經成功添加
練習:寫一個腳本,完成以下任務
1 使用一個變量保存一個用戶名:
2 刪除此變量中的用戶,且一併刪除其家目錄
3 顯示"用戶刪除完成"類的信息