標籤:shell linux
變數
聲明變數:
declare attribute variable
#attribute表示變數的屬性,常見的屬性如下:
# -i 將變數定義為整數;-a 變數聲明為陣列變數;-r 將變數聲明為唯讀變數;-x 將變數設定成環境變數
局部變數:
在函數的內部通過local關鍵字定義局部變數,此外,函數的參數也是局部變數。範圍從被定義的地方開始,到函數的結束或被顯示的刪除,在函數外面使用局部變數會得到一個空值
全域變數:
可以在指令碼中定義,也可以在函數中定義(不使用local關鍵字)。範圍從被定義的地方開始,一直到shell指令碼結束或者被顯示的刪除
系統變數:
$n 表示傳遞給指令碼的第n個參數
$0 當前指令碼的名稱
$# 命令列參數的個數
$? 前一個命令或者函數的返回狀態代碼(也包括函數的返回值),執行成功返回0,否則,返回1
$* 以“參數1 參數2 參數3..”的形式返回所有參數的值
[email protected] 以“參數1”說“參數2”“參數3..”的形式返回所有參數的值
$$ 返回本程式的進程ID(PID)
$_ 儲存之前執行的命令的最後一個參數
環境變數:
shell程式在運行時,都會接收一組變數,這組變數就是環境變數
#使用 set 命令列出所有的環境變數
PATH 命令搜尋路徑,以冒號為分隔字元,目前的目錄不在系統路徑裡(這點與Windows不同)
HOME 使用者主目錄的路徑名,是cd命令的預設參數
SEHLL shell的全路徑名
PWD 當前的工作目錄
HISTFILE 命令曆史檔案
LOGNAME 當前的登入名稱
TMOUT shell自動結束的時間,單位為秒,若設為0則禁止shell自動結束
變數賦值:
variableName=value
命令替換:
#指在shell程式中,將某個shell命令的執行結果賦給某個變數。
#在bash中,有以下兩種文法可以進行替換
variableName=‘command‘
variableName=$(command)
#賦值號“=”的左右兩邊不能直接跟空格,否則shell會將其視為命令
引用變數:
${variableName}或$variable
間接變數引用:
var=name
name=John
${!var}與${name}的效果相同
清除變數:
unset variableName
特別注意:
單引號括起來的的字元都作為一般字元出現
雙引號括起來的字元,除“$”“\”“‘”(單引號)和“"”(雙引號)之外,其餘字元作為一般字元對待
反引號括起來的字串被shell解釋成命令,在執行時,shell首先執行該命令,並以它的標準輸出結果取代整個反引號部分
------------------------------------------------------------------------------------------
條件測試(test命令和[命令):
#條件測試中的指定條件為真時,條件測試的返回值為0;為假時,返回值為非0值
#test命令
test expression
#[命令
#為了增強程式可讀性,shell要求在條件運算式後面追加一個右方括弧]來與前面的[的命令配對
#條件運算式與左右方括弧之間必須都保留一個空格
[ expression ]
#如果expression是一個字串,則 -n 判斷字串是否是非空;-z 判斷字串是否是空串,使用“=”和“!=”判斷兩個字串是否相等
#如果expression是一個檔案名稱,
#則 -e(或-a) 判斷檔案是否存在;-r、-w、-x判斷檔案是否存在,且是否可讀、可寫、可執行;-b、-c、-d、-L判斷檔案是否存在,且是否為塊、字元目錄、連結檔案
#如果expression是一個由邏輯與、邏輯或、邏輯非構成的運算式,則 !表示邏輯非;-a 表示邏輯與;-o 表示邏輯或
------------------------------------------------------------------------------------------
if語句:
if expression
then
statement1
statement2
...
else
statement3
statement4
...
fi
或:
if expression
then
statement1
statement2
...
elif expression2
then
statement3
statement4
...
elif expression3
then
statement5
statement6
...
else
statement7
...
fi
#在shell中,有一個特殊的命令,稱為空白命令,表示方法是一個冒號“:”,該命令不做任何事情,但是它的退出狀態永遠是0
exit語句:
#exit語句的基本作用是終止shell程式的執行,可帶一個可選的參數,用來指定程式退出時的狀態代碼
exit status
------------------------------------------------------------------------------------------
case語句:
case variable in
value1)
statement1
...
statement2;;
value2)
statement3
...
statement4;;
*)
statement5
...
statement6;;
esac
------------------------------------------------------------------------------------------
for迴圈:
for variable in {list}
do
statement1
statement2
...
done
#list是一個列表,可以是一系列數字或字串,元素間用空格隔開,如果使用字串做列表元素,則外面的大括弧可以省略
# {1..8} 表示1-8的簡寫
# {1..100..5} 表示1-100間,從1開始,每次遞增5,即1,6,11,16...
# ${arrayName[*]} 表示數組arrayName的全部元素
不帶列表的for迴圈:
#shell從命令列擷取條件列表,以下三種形式等價
for variable for variable in [email protected] for variable in $*
do do do
statement1 statement1 statement1
statement2 statement2 statement2
... ... ...
done done done
類C風格的for迴圈:
for ((expression1;expression2;expression3))
do
statement1
statement2
...
done
------------------------------------------------------------------------------------------
util迴圈:
util expression
do
statement1
statement2
...
done
------------------------------------------------------------------------------------------
while迴圈:
while expression
do
statemnet1
statement2
...
done
------------------------------------------------------------------------------------------
函數的定義:
function functionName()
{
statement1
...
}
#function可以省略
------------------------------------------------------------------------------------------
別名的設定與刪除:
alias name="command"
unalias name
------------------------------------------------------------------------------------------
算數運算:
expr、$((...))、$[...]和let
#expr是一個shell命令,可以計算摸個運算式的值
expr expression
舉例:
#先計算2和6的差,然後再乘以12,並把計算結果賦給變數result
#一定要注意運算子(冪運算“**”)左右的空格,且expr不能計算冪運算
result=`expr \( 2 - 6 \) \* 12`
result=$(( 1 + 2 ))
result=$[ 1 + 2 ]
let n=n + 1 (還是 let n=n+1 ?)
------------------------------------------------------------------------------------------
cat 查看檔案內容:
cat fileName
# -n 顯示文本的行號
cat -n fileName
# grep -n "" fileName和上一行的作用相同
---------------------------------------------------------------------------------
echo 輸出文本
echo [options] string
#如果要輸出的文本是由多個單片語成的,則可以使用雙引號或者單引號將其引起來。
#如果不用引號引起來,則echo命令將一個字串根據空格分割成多個字串輸出了
# -n 禁止echo語句執行完成後自動附加分行符號
# 逸出字元 \c 禁止繼續輸出文本
echo `command`
#echo可以將shell命令執行結果顯示出來,且需要使用反引號將命令引用起來
#將echo命令顯示的資訊覆蓋到目標檔案中
echo string > fileName
#將echo命令顯示的資訊追加到目標檔案的末尾
echo string >> fileName
------------------------------------------------------------------------------------------
rev 反轉每行字元的順序
rev [files]
#files表示要處理的檔案的檔案名稱列表,如果是多個檔案,則檔案名稱之間用空格隔開
shell基礎筆記