Shell編程:
編譯器,解釋器
編程語言: 機器語言、彙編語言、高級語言
靜態語言: 編譯型語言
強類型(變量)
事先轉換成可執行格式
c\c++\JAVA\c#
動態語言: 解釋性語言
弱類型
邊解釋邊執行
asp/asp.net/php/shell/python/perl
Shell: 弱類型編程語言
強類型: 變量在使用前,必須事先聲明,甚至還需要初始:
弱類型: 變量用時聲明,甚至不區分類型:
面向過程: Shell C
面向對象: JAVA Python, perl, c++
變量:內存空間,命名
內存:編址的存儲單元
進程:
變量類型: 事先確定數據的存儲格式和長度
字符
數值
×××
浮點型
編程能力:
腳本編程
變量賦值: VAR_NAME=VALUE
bash變量類型:
環境變量
本地變量(局部變量)
位置變量
特殊變量
本地變量:
VAR_NAME=VALUE: 作用域爲整個腳本進程:
局部變量:
local VARNAME=VALUE 作用域爲當前代碼段
環境變量: 作用域爲當前shell進程及其子進程
export VARNAME=value
"導出"
兩種方式:
1. export VARNAME=VALUE
2. VARNAME=VALUE
export VARNAME
位置變量
$1, $2, ...
特殊變量:
$? 上一條命令的執行狀態返回值:
程序執行結果
程序狀態返回代碼(0-255)
0: 正確執行
1-255: 錯誤執行, 1,2,127 系統預留
輸出重定向:
>
>>
2>
2>>
&> 重定向標準輸出或錯誤輸出至同一個文件
/dev/null: 軟件設備, bit bucket 數據黑洞
秩序執行, 可能有兩類返回值:
腳本在執行時,會啓動一個子shell進程:
命令行中啓動的腳本,會繼承當前shell環境變量
系統自動執行的腳本(非命令行啓動),就需要自我定義需要各環境變量
撤銷變量:
unset VARNAME (千萬不要加$)
查看當前shell中的變量
set(包括環境變量和本地變量)
查看當前shell中的環境變量:
printenv
env
export
腳本: 命令的堆砌,按照實際需要,結合命令流程控制機制實現的源程序
shebang: 魔數
#!/bin/bash
練習:寫一個腳本,完成以下任務
1. 添加5個用戶,user1,user2,...user5
2. 每個用戶的密碼同用戶名,而且要求,添加密碼完成後不顯示passwd命令的執行結果信息
3. 每個用戶添加完成後,都要顯示用戶xx已經成功添加
練習:寫一個腳本,完成以下任務
1. 使用一個變量保存一個用戶名:
2. 刪除此變量中的用戶,且一併刪除其家目錄
3. 顯示“用戶刪除完成”類的信息