Shell腳本編程
關于腳本的調試
bash -n /path/to/some_script
檢測腳本中的語法錯誤
v bash -x /path/to/some_script
調試執行
變量
變量:命名的內存空間
數據存儲方式:
字符:
數值:整型,浮點型 v
變量:變量類型
作用:
1、數據存儲格式
2、參與的運算
3、表示的數據范圍
類型: 字符 數值:整型、浮點型
bash中變量的種類
根據變量的生效范圍等標準:
本地變量:生效范圍為當前shell進程;對當前shell之外 的其它shell進程,包括當前shell的子shell進程均無效
本地變量
v 變量賦值:name=‘value’, v
可以使用引用value:
(1) 可以是直接字串; name=“root"
(2) 變量引用:name="$USER"
(3) 命令引用:name=`COMMAND`, name=$(COMMAND) v
變量引用:${name}, $name
"":弱引用,其中的變量引用會被替換為變量值
'':強引用,其中的變量引用不會被替換為變量值,而保
持原字符串 v
顯示已定義的所有變量:set v
刪除變量:unset name
環境變量:生效范圍為當前shell進程及其子進程
環境變量
v 變量聲明、賦值:
export name=VALUE
declare -x name=VALUE v
變量引用:$name, ${name} v
顯示所有環境變量:
export
env
printenv v
刪除:unset name v
bash有許多內建的環境變量:PATH, SHELL, USRE,UID, HISTSIZE, HOME, PWD, OLDPWD, HISTFILE, PS1
局部變量:生效范圍為當前shell進程中某代碼片斷(通常 指函數)
位置變量:$1, $2, …來表示,用于讓腳本在腳本代碼 中調用通過命令行傳遞給它的參數
$1, $2, …:對應第1、第2等參數,shift [n]換位置
$0: 命令本身
$*: 傳遞給腳本的所有參數,全部參數合為一個字符串
$@: 傳遞給腳本的所有參數,每個參數為獨立字符串
$#: 傳遞給腳本的參數的個數
$@ $* 只在被雙引號包起來的時候才會有差異
特殊變量:$?, $0, $*, $@, $#
只讀變量:
只能聲時,但不能修改和刪除
readonly name
declare -r name
示例:判斷給出的文件的行數
linecount="$(wc -l $1| cut -d' ' -f1)"
echo "$1 has $linecount lines."
練習
1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。
2、編寫腳本/root/bin/backup.sh,可實現每日將/etc/目錄備份到/root/etcYYYY-mm-dd中
3、編寫腳本/root/bin/disk.sh,顯示當前硬盤分區中空間利用率最大的值
4、編寫腳本/root/bin/links.sh,顯示正連接本主機的每個遠程主機的IPv4地址和連接數,并按連接數從大到小排序
5、寫一個腳本/root/bin/sumid.sh,計算/etc/passwd文件中的第10個用戶和第20用戶的ID之和
6、寫一個腳本/root/bin/sumspace.sh,傳遞兩個文件路徑作為參數給腳本,計算這兩個文件中所有空白行之和
7、寫一個腳本/root/bin/sumfile.sh,統計/etc, /var, /usr目錄中共有多少個一級子目錄和文件
8、寫一個腳本/root/bin/argsnum.sh,接受一個文件路徑作為參數;如果參數個數小于1,則提示用戶“至少應該給一個參數”,并立即退出;如果參數個數不小于1,則顯示第一個參數所指向的文件中的空白行數
9、寫一個腳本/root/bin/hostping.sh,接受一個主機的IPv4地址做為參數,測試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通,則提示用戶“該IP地址不可訪問”
原創文章,作者:xiaoqiang512,如若轉載,請注明出處:http://www.www58058.com/35778