Linux Shell Scripting Cookbook 讀書筆記 1

本系列文章爲《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 ]] 非空串返回真

相關文章
相關標籤/搜索