shell 常用功能函數(shù)


參考書籍 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 ]] #非空字符串,則返回真。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,715評論 0 5
  • 1、數(shù)學(xué)運(yùn)算 在Bash shell環(huán)境中,可以使用let、(())和[]執(zhí)行基本的算術(shù)操作,而在進(jìn)行高級操作時,...
    ruready閱讀 306評論 0 0
  • 完成初級實務(wù)目標(biāo) 經(jīng)濟(jì)法快速終結(jié)第一章可以刷題嚕,決定明天開始準(zhǔn)時起床新東方網(wǎng)課。 下載手機(jī)初級app 閑暇刷題 ...
    Dorisyoung閱讀 105評論 0 0
  • 話說項羽,堂堂將軍世家,如此霸王之風(fēng)度,統(tǒng)領(lǐng)這么多萬大軍,那為何他最后會失敗的如此凄慘,江東幾千人出兵最后...
    霧起夜續(xù)閱讀 620評論 5 7
  • 梵蒂岡城國(拉丁語:Status Civitatis Vaticanae),意為“先知之城”,是全球領(lǐng)土面積最小、...
    島主與茉莉閱讀 1,328評論 1 5

友情鏈接更多精彩內(nèi)容