shell腳本--(符號和語法)

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的進程號

wKioL1dspoXiXJEDAAB5cUwN_2s115.png


能夠看出和c不一樣的地方在於,它的arcg->$#只輸出不包括./這一列。


shift命令能夠將位置左移,例如上面的程序加上shift 2後,$1的輸出則是one了,shift 1爲默認不移動的值




5、常見符號的區別

1> [[雙中括號和[單中括號的區別


wKioL1dsqnOj_tRLAABJ0bqol-I469.png

[[中能夠用 == ! && || 正則表達式進行判斷,可是上面的結果顯然有問題,[[ 在&& ||判斷的時候很難判斷正確


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的特色在於它有不少工具,這些工具會在後面的博客中詳解。

相關文章
相關標籤/搜索