本系列文章爲《Linux Shell Scripting Cookbook》的讀書筆記,只記錄了我以爲工做中有用,而我還不是很熟練的命令shell
書是很好的書,有許多命令因爲我比較熟悉,可能就沒有記錄在其中了bash
1. 得到進程的環境變量測試
cat /proc/$PID/environthis
將原先彼此間的null('\0')分隔符替換成換行調試
cat /proc/1194/environ | tr '\0' '\n'blog
2. 得到字符串長度進程
length=${#var}ip
3. 數字運算字符串
let, (()), []執行基本的算數操做,高級操做使用expr,bcit
let no1++
let no1-=6
result=$[ no1 + no2 ]
result=$[ $no1 + 5 ]
result=$(( no1 + 50 ))
4. 調試腳本
#!/bin/bash function DEBUG() { [ "$_DEBUG" == "on" ] && $@ || : } echo this is test file for i in {1..6} do DEBUG echo $i done
Bash中 : 告訴shell不要進行任何操做
$@ 表示全部腳本參數的內容
5. 字段分隔符IFS (Internal Field Separator)
#!/bin/bash passwd=$(cat /etc/passwd) oldIFS=$IFS; IFS=$'\n' for line in $passwd; do IFS=":" count=0 for item in $line; do [ $count -eq 0 ] && user=$item; [ $count -eq 6 ] && shell=$item && echo $user\'s shell is $shell; let count++ done; done; IFS=$oldIFS
第一個IFS的賦值爲$'\n',爲了第一個for循環按行得到passwd裏面的值
第二個IFS賦值爲":",爲了按:爲分隔,取得每一個段的值
其中for循環的主體部分,[]的使用能夠做爲簡潔版的判斷語句
6. 比較與測試
[ $var1 -ne 0 -a $var2 -gt 2 ] #邏輯與 -a,邏輯或-o
使用&& 以及 || 也能夠組合條件
if [[ -n $str1 ]] && [[ -z $str2 ]]; then ...
使用test命令也能夠執行條件檢測,能夠避免使用過多的括號,多個條件使用-a/-o鏈接
test命令也有更普遍的文件系統相關測試選項,具體查看man test
#!/bin/bash no1=1 no2=0 test $no1 -eq 1 -a $no2 -gt 1 && echo success || echo fail
文件系統相關測試
[ -f $file_var ] 文件路徑或文件名
[ -x $var ] 文件可執行
[ -d $var ] 目錄
[ -w $var ] 可寫
[ -r $var ] 可讀
[ -L $var ] 符號連接
[ -e $var ] 若是給定的變量包含的文件存在,則返回真
例如
#!/bin/bash fpath=/etc/passwd [ -e $fpath ] && echo file exist || echo file not exist
字符串的比較最好使用雙中括號
[[ -z $str ]] 空串返回真
[[ -n $str ]] 非空串返回真