知乎高票回答:Bash處理一次性的瑣碎事物宵睦,Python處理自動化,代碼量較大的的維護任務(wù)。而需要效率的任務(wù)交給C/C++阐虚。
作為Linux開發(fā)人員,掌握Bash腳本是很重要的蚌卤,但是最近吸收的東西太多了沒辦法都記住实束,所以一定要寫寫博客記錄一下奥秆。
一個比較好的免費課程(shell腳本編程入門到精通):https://edu.aliyun.com/course/155?spm=5176.10731542.0.0.ATHyuM
一、創(chuàng)建步驟
開頭:
#!/bin/bash
:#!
用作shell命令的完全路徑咸灿,顯示后期命令以哪種shell來執(zhí)行這些命令构订。如不指定shell,以當(dāng)前shell作為執(zhí)行的shell避矢。/bin/sh ->bash鲫咽。
shell程序一般以.sh結(jié)尾。
創(chuàng)建shell程序的步驟:
- 創(chuàng)建一個包含命令和控制結(jié)構(gòu)的shell文件谷异。
- 修改這個文件的權(quán)限使它可以執(zhí)行分尸。
- 執(zhí)行。1)./example.sh 2)絕對路徑/root/test/example.sh 3)使用bash歹嘹,不需要執(zhí)行權(quán)限箩绍。bash example.sh。
二尺上、shell變量
shell傳遞數(shù)據(jù)的一種方法材蛛。變量是用來代表每個值的符號名。分為臨時/永久變量怎抛。
臨時變量:是shell程序內(nèi)部定義的卑吭,使用范圍僅限于定義它的程序,對其它程序不可見马绝。
永久變量:注意豆赏,是環(huán)境變量,其值不隨著shell腳本的執(zhí)行結(jié)束而消失富稻。
調(diào)用方法:echo $PATH
(使用變量值時需要在前面加$)
環(huán)境變量非常重要掷邦,運行某個命令的時候,本地查找不到某個命令或文件椭赋,會到這個聲明的目錄中查找抚岗。
變量賦值:
關(guān)于$()和${}:
$()實際上括號里是系統(tǒng)命令的轉(zhuǎn)化調(diào)用,如果你只是創(chuàng)建一個臨時變量哪怔,那么會顯示bash:command not found
宣蔚,而如果想轉(zhuǎn)換這種變量需要使用花括號即${}。
前面加上$
的變量表示調(diào)用該變量的值认境。
顯示所有變量:set胚委,多個單詞用(“”/'')引號括起來即可。
單引號和雙引號的區(qū)別:單引號之間的內(nèi)容原封不動地指定給了變量元暴。雙引號取消了空格的作用篷扩,特殊符號的含義保留。
刪除變量:unset name
位置變量和特殊變量:Shell解釋執(zhí)行用戶的命令時茉盏,將命令行的第一個字作為命令名鉴未,而其它字作為參數(shù)枢冤。由出現(xiàn)在命令行上的位置確定的參數(shù)成為位置參數(shù)。
如:ls -l —> ls為命令名铜秆,-l為位置參數(shù)淹真。
位置變量用$N來表示。如$0表示當(dāng)前程序文件名连茧,$N(1核蘸,……,n)表示命令行輸入的參數(shù)啸驯。
特殊變量:有些變量是一開始執(zhí)行Script腳本時就會設(shè)定客扎,且不能被修改,但我們不叫它只讀的的系統(tǒng)變量罚斗,而叫它特殊變量徙鱼。這些變量當(dāng)一執(zhí)行程序時就有了,以下是一些特殊變量:
- $*:這個程序的所有參數(shù)
- $#:這個程序的參數(shù)個數(shù)
- $$:這個程序的PID
- $!:執(zhí)行上一個后臺程序的PID
- $?:執(zhí)行上一個指令的返回值
綜合實例:
一针姿、參數(shù)
#!/bin/bash
echo "$* all parameters"http://程序的所有參數(shù)
echo "$# parameters amount"http://程序的參數(shù)個數(shù)
touch /tmp/a.txt
echo "$$ PID"http://程序進程ID
touch /tmp/b.txt &
echo "$! Last PID"http://執(zhí)行上一個后臺指令的PID
echo "$$ PID"http://程序進程ID
運行后結(jié)果:
解釋:
注意$$
是shell進程本身的PID袱吆,如果在shell script里,它就是shell script這個進程的PID距淫。而touch后面我加了一個&
绞绒,這意味著它以后臺運行。因此如果我在touch a的時候加入$!
榕暇,那么這個Last PID是沒有值的蓬衡。它是后臺最后一個運行的進程的PID。
二拐揭、變量
#!/bin/bash
var1="abcd efg"
echo $var1
var2=1234
echo"The value of var2 is $var2"
echo $HOME
echo $PATH
echo $PWD
運行后結(jié)果: