參考書籍 Linux shell 腳本攻略
目錄
- 使用別名
- 獲取終端信息
- 獲取、設(shè)置日期和延時
- 調(diào)試腳本
- 函數(shù)和參數(shù)
- 字段分隔符和迭代器
- 比較和測試
使用別名
- 使用
alias命令,作用只是暫時的,一旦關(guān)閉當(dāng)前終端,所有設(shè)置過的別名就會失效。為了使別名一直保持作用,可以將其放入~/.bashrc文件中。
$ alias new_command='command sequence' - 刪除別名
unalias - 對別名進(jìn)行轉(zhuǎn)義,忽略當(dāng)前定義過的所有別名
$ \command
獲取終端信息
tput以及stty終端工具
- 獲取終端的行數(shù)和列數(shù)
tput cols
tput lines - 打印當(dāng)前終端名
tput longname - 將光標(biāo)移動到方位(x,y)處
tput cup $x $y - 設(shè)置終端背景色,no可以在0-7之間取值
tput setb no - 設(shè)置終端前景色
tput setf no - 設(shè)置文本樣式為粗體
tput bold - 設(shè)置下劃線的開閉
tput smu1
tput rmu1 - 刪除當(dāng)前光標(biāo)位置到行尾的所有內(nèi)容
tput ed
獲取、設(shè)置日期和延時
- 讀取日期
$ date
調(diào)試腳本
Bash本身包含了一些選項能夠打印出腳本接受的參數(shù)和輸入。
- 使用
-x選項,啟動跟蹤調(diào)試shell腳本,能夠打印出所執(zhí)行的每一行命令以及當(dāng)前狀態(tài)。也可以使用sh -x script.sh。
$ bash -x script.sh- set -x:在執(zhí)行時顯示參數(shù)和命令
- set +x:禁止調(diào)試
- set -v:當(dāng)命令進(jìn)行讀取時顯示輸入
- set +v:禁止打印輸入
- 文件頭從
#!/bin/bash改成#!/bin/bash -xv,不用任何其他選項就可以啟動調(diào)試功能。
函數(shù)和參數(shù)
定義函數(shù)
function fname()
{
statements;
}
fname()
{
statements;
}
只需要使用函數(shù)名就可以調(diào)用某個函數(shù)
$ fname ;#執(zhí)行函數(shù)
$ fname arg1 arg2; #傳遞參數(shù)
- $1是第一個參數(shù)
- $2是第二個參數(shù)
- $n是第n個參數(shù)
-
$@被擴(kuò)展為"$1" "$2" "$3"等 -
$*被擴(kuò)展為"$1c$2c$3",其中c是IFS的第一個字符。 -
$@用的最多。由于$*將所有的參數(shù)當(dāng)做單個字符串。
字段分隔符和迭代器
內(nèi)部字段分隔符(IFS,Internal Field Separator)是shell腳本的一個重要概念。
data="name,sex,rollno,location"
oldIFS=$IFS
IFS=,
for item in $data;
do
echo Item: $item
done
IFS=$oldIFS
- for 循環(huán)
for var in list;
do
commands;
done
生成序列
echo {1.. 50}
echo {a.. z}
for循環(huán)也可以采用c語言中for循環(huán)的格式
for((i=0;i<10;i++))
{
commands;
}
- while循環(huán)
while condition
do
commands;
done
- until循環(huán):會一直循環(huán)直到給定的條件為真
x=0
until [ $x -eq 9 ];
do let x++; echo $x;
done
比較和測試
- if條件
if condition;
then
commands;
fi
- if else if和else
if condition;
then
commands;
elif condition;
then
commands
else
commands
fi
算術(shù)比較
條件通常放在封閉的中括號內(nèi),注意在[或]與操作數(shù)之間有一個空格,否則會報錯
[ $var -eq 0 ]
[ $var -ne 0 ]
-
-gt大于 -
-lt小于 -
-ge大于等于 -
-le小于等于 -
-a邏輯與 `[ var1 -ne 0 -a $ var2 -gt 2 ] -
-o邏輯或
文件系統(tǒng)相關(guān)測試
-
[ -f $file_var ]:如果給定的變量包含正常的文件路徑或文件名,則返回真。 -
[ -x $var ]: 如果給定的變量包含的文件可執(zhí)行,則返回真。 -
[ -d $var ]: 如果給定的變量包含的是目錄,則返回真。 -
[ -e $var ]: 如果給定的變量包含的文件存在,則返回真。 -
[ -c $var ]: 如果給定的變量包含的是一個字符設(shè)備文件的路徑,則返回真。 -
[ -b $var ]: 如果給定的變量包含的是一個快設(shè)備文件的路徑,則返回真。 -
[ -w $var ]: 如果給定的變量包含的文件可寫,則返回真。 -
[ -r $var ]:如果給定的變量包含的文件可讀,則返回真。 -
[ -L $var ]: 如果給定的變量包含的是一個符號鏈接,則返回真。
字符串比較
使用字符串比較時,最好用雙中括號因為有時候采用單中括號會產(chǎn)生錯誤。
[[ $str1 = $str2 ]]
[[ $str1 == $str2 ]]
[[ $str1 != $str2 ]]
[[ $str1 > $str2 ]]
[[ $str1 < $str2 ]]
[[ -z $str1 ]] # 空字符串則返回真
[[ -n $str1 ]] #非空字符串,則返回真。