shell腳本linux
shell腳本:一直都在用,可是沒有系統的學習過,只是在linux命令行模式敲一些簡單的經常使用的指令,如今系統的學習一番。
正則表達式
1、建立shell腳本,通常以.sh結尾(linux下後綴只是種顯示,沒有任何具體含義)文件建立後須要chmod 0755 name 給它加上權限,以後就能夠用./運行了shell
進入文件須要在最頂部加上shell腳本解釋器,這個文件中的全部命令都會被bash拿到去解釋。下面會說到shell的工做模式。bash
2、shell的工做模式;ide
我是這樣理解的當咱們在腳本中寫這樣一段程序的時候函數
#!/bin/bash ls
這個時候shell是這樣去解釋的,當前shell(bash)會fork一個子bash去得到這個腳本中的全部命令,而後到ls這一行的時候,sh會再fork一個新的bash去execv這個ls可執行程序,以後將等待的結果輸出到當前終端上。工具
shell的命令分兩種,一種是內部命令,一種是shell可執行的應用程序,當執行內部命令的時候frok的子bash就會在它的空間內執行這條命令。學習
3、shell腳本中的一些常見符號:spa
1>簡單符號命令行
1 #!/bin/bash 2 #shell中用#做爲註釋 3 count=1 #變量的定義不用聲明類型,shell解釋器會幫你去作 4 val=0 5 echo $count #$符號用來取變量的值 6 7 echo ${count}t #建議加上{}由於有時候你會像這樣去輸出 8 9 val=$(date) #$()的做用是命令替換,這行代碼的意思就是將date的命令輸出信息傳給val 10 echo $val 11 12 val=`date` #``反引號的做用和$()同樣都是命令替換,不一樣的是``中不能再用`` 13 echo $val 14 15 echo 'val' #''單引號的做用是保持字符串自己的意思,但它裏面不能再有字符串了 16 17 echo "va'l'" # ""和單引號的不一樣在於它的裏面能夠有字符串'' 6,0-1 所有
2>意義符號
[ ]中括號的意思是一個判斷語句注意[是一個命令因此後面要加空格,也能夠用test命令。例如
19 val=10 20 21 test $val -eq 12 #test命令的書寫格式,判斷val的值是否等於12 22 echo $? 23 [ $val -eq 10 ] #[ ]命令的書寫格式 24 echo $? 25 [ $val -eq 11 ] 26 echo $? 27 28 20,0-1 底端
echo $?的意思是拿到上一個執行語句的退出碼,它的返回值成功爲0失敗爲1。
3>shell下的比較命令;
-eq;等於
-ne;不等於
-lt;小於
-le;小於等於
-gt;大於
-ge;大於等於
另外的經常使用比較命令
-d 判斷目錄是則爲真
-f 判斷是文件則爲真
邏輯與 -a [ $val -gt 10 -a $val -lt 100] 大於10小於100的數
邏輯或 -o [ $val -eq 10 -a $val -eq 100] 等於10或等於100的數
取反 ! [ $val -eq 10 -a $val -eq 100] 不等於10或不等於100的數
4、特殊變量
$0:至關於C語言main函數的argv[0]
$一、$2...
這些稱爲位置參數(Positional Parameter),至關於C語言main函數 的argv[1]、argv[2]...
$#
至關於C語言main函數的argc - 1,注意這裏的#後面不表示註釋
$@
表示參數列表"$1" "$2" ...,例如能夠用在for循環中的in後面。
$?
上面已經提過
$$
顯示當前shell的進程號
能夠看出和c不一樣的地方在於,它的arcg->$#只輸出不包括./這一列。
shift命令能夠將位置左移,例如上面的程序加上shift 2後,$1的輸出則是one了,shift 1爲默認不移動的值
5、常見符號的區別
1> [[雙中括號和[單中括號的區別
[[中能夠用 == ! && || 正則表達式進行判斷,可是上面的結果顯然有問題,[[ 在&& ||判斷的時候很難判斷正確
2> ``與$()
#$()的做用是命令替換,這行代碼的意思就是將date的命令輸出信息傳給val #``反引號的做用和$()同樣都是命令替換,不一樣的是``中不能再用``
3> (())與let
(())和let均可以進行運算,基本能夠互換的
((val++))
let val++
6、shell語法
while循環;
1 #!/bin/bash 2 3 val=0 4 while [ $val -lt 10 ] 5 do 6 echo $val 7 let val++ 8 done 9 #注意do done的書寫 4,1 所有
if判斷:
1 #!/bin/bash 2 3 val=10 4 5 if [ $val -eq 10 ]; 6 then 7 echo $val 8 fi 9 # if [] ; fi 的格式 5,1 所有
for語句:
兩種寫法
2 #寫法一 3 val=0 4 5 for val in {0..100} 6 do 7 echo $val 8 done 9 #寫法二 10 val=0 11 for (( val; val<=100 ;val++)) 12 do 13 echo $val 14 done 12,2 所有
switch case:
1 #!/bin/bash
2
3 read i
4
5 case $i in
6 a)
7 echo 'a'
8 ;;
9 b)
10 echo 'b'
11 ;;
12 esac
總結:shell腳本是類c風格的,shell的特色在於它有不少工具,這些工具會在後面的博客中詳解。