1. 程式人生 > >Shell指令碼基本語法

Shell指令碼基本語法

一:Shell簡介

Shell 是一種指令碼語言
指令碼語言的優點是使用靈活、部署容易、跨平臺性好,非常適合Web開發以及小工具的製作。
Shell 除了能解釋使用者輸入的命令,將它傳遞給核心,還可以:

  • 呼叫其他程式,給其他程式傳遞資料或引數,並獲取程式的處理結果;
  • 在多個程式之間傳遞資料,把一個程式的輸出作為另一個程式的輸入;
  • Shell 本身也可以被其他程式呼叫。

二:常見Shell

sh

sh 的全稱是 Bourne shell,由 AT&T 公司的 Steve Bourne開發,為了紀念他,就用他的名字命名了。

sh 是 UNIX 上的標準 shell,很多 UNIX 版本都配有 sh。sh 是第一個流行的 Shell。

csh

sh 之後另一個廣為流傳的 shell 是由柏克萊大學的 Bill Joy 設計的,這個 shell 的語法有點類似C語言,所以才得名為 C shell ,簡稱為 csh。

Bill Joy 是一個風雲人物,他創立了 BSD 作業系統,開發了 vi 編輯器,還是 Sun 公司的創始人之一。

tcsh

tcsh 是 csh 的增強版,加入了命令補全功能,提供了更加強大的語法支援。

ash

一個簡單的輕量級的 Shell,佔用資源少,適合運行於低記憶體環境,但是與下面講到的 bash shell 完全相容。

bash

bash shell 是 Linux 的預設 shell,本教程也基於 bash 編寫。


bash 由 GNU 組織開發,保持了對 sh shell 的相容性,是各種 Linux 發行版預設配置的 shell。

四:Shell提示符

對於普通使用者,Base shell 預設的提示符是美元符號$;對於超級使用者(root 使用者),Bash Shell 預設的提示符是井號#

五:一個Shell指令碼

1.echo ${#array_name[@]}

使指令碼具有執行許可權

2.sh ./test.sh   

#執行指令碼

3.read  變數名   
用來接收我輸入的變數

六:Shell變數

1.pyt =  lkh   

不包含空格

2.pyt = ‘lkh’  

純字串,不包含解析內容

3.pyt = “lkh”

先解析在輸出

4.pyt = $(vi pyt)  

把命令變為變數進行賦值

5.readonly 變數名   

設為只讀變數,不能再次賦值

6.unset 變數  

刪除變數

七:Shell特殊變數

1.$0   

當前指令碼的檔名

2.$n    

傳遞給指令碼或函式的引數,n代表數字

3.$#   

傳遞給指令碼或函式的指令碼個數

4.$*  

傳遞給指令碼或函式的所有引數

[email protected] 

傳遞給指令碼或函式的所有引數

6.$? 

上個命令的退出狀態,或函式的返回值

7.$$ 

當前Shell的程序

八:Shell替換

1.echo -e     

替換語句中的特殊字元(\\ , \a, \b, \f, \n, \r, \t, \v)

2.date = `date`    

將命令結果儲存在變數中

3.${var:-word}   

變數var不存在則輸出word

4.${var:=word} 

變數var不存在則輸出word,並賦值給var

5.${var:+word}    

變數var被定義則輸出word

6.${var:?word}    

變數var不存在則將word送到標準錯誤輸出,用來檢驗var是否可以被正常賦值

九:Shell運算子

val=`expr 2 + 2`    
expr用來完成表示式的求值操作,引號為反引號

運算子:

1.%        

取餘

2.=        

賦值

3.==(-eq)   

判斷兩個數字相等

4.!=(-ne)

判斷兩個數字不相等

5.-gt  

是否左邊大於右邊

6.-lt   

是否右邊大於左邊

7.-ge      

是否左邊大於等於右邊

-le  

是否右邊大於等於左邊

8.!  

非運算

9.-o  

或運算

10.-a             

與運算

11.=    

判斷兩個字串是否相等

12.!=    

#判斷兩個字串是否不相等

13.-z   

判斷字串長度是否為0

14.-n  

判斷字串長度是否不為0

15.str         

判斷字串是否為空

16.-b  file     

判斷檔案是否為裝置檔案

17.-c  file     

判斷檔案是否為字元裝置檔案

18.-d  file     

判斷檔案是否為目錄

19.-f  file        

判斷檔案是否為普通檔案

19.-g  file    

判斷檔案是否設定了SGID位

20.-k  file  

判斷檔案是否設定了粘著位

21.-p  file  

判斷檔案是否具名管道

22.-u  file    

判斷檔案是否設定了SUID位

23.-r  file   

判斷檔案是否可讀

24.-w  file   

判斷檔案是否可寫

25.-x  file         

判斷檔案是否可執行

26.-s  file 

判斷檔案是否為空

27.-e  file 

判斷檔案是否存在

十:Shell字串

拼接字串

var =a

var2 =b

echo $var $var1

獲取字串長度

var = ‘’‘abcd’

echo ${#var}

提取字串

var =‘’abcd‘

echo ${var:1:4}

查詢字串

var =‘’abcd‘

echo `expr index "$var" ab’


十一:Shell陣列

定義陣列

1.array_name = (value1 value2 value3)

2.array_name[0]=value1

   array_name[1]=value2

   array_name[2]=value3

讀取陣列

1.echo $array_name[0]

讀取所有元素

2.echo $array_name[*]

讀取陣列的長度

3.echo ${#array_name[@]}


十二:Shell if else語句

if ... else ... fi

if [ a == b ]
then
 echo pyt
else
 echo lkh
fi 
if ...elif ... fi
if [ a == b ]
then
 echo pyt
elif [ a == c ]
then
 echo lkh
fi

十三:Shell test命令用於檢查條件成立

if test  a == b
then
echo pyt
fi


十四:Shell case esac語句

echo 'Input a number between 1 to 4'
echo 'Your number is:\c'
read aNum
case $aNum in
    1)  echo 'You select 1'
    ;;
    2)  echo 'You select 2'
    ;;
    3)  echo 'You select 3'
    ;;
    4)  echo 'You select 4'
    ;;
    *)  echo 'You do not select a number between 1 to 4'
    ;;
esac


十五:Shell for迴圈

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done


十六:Shell While迴圈

    COUNTER=0
    while[ $COUNTER -lt 5 ]
    do
        COUNTER='expr $COUNTER+1'
        echo $COUNTER
    done


十七:Shell until迴圈

  1. COUNTER=0
  2. until[ ! $COUNTER -lt 5 ]
  3. do
  4. COUNTER='expr $COUNTER+1'
  5. echo $COUNTER
  6. done

十八:Shell函式

#!/bin/bash

# Define your function here
Hello () {
   echo "Url is http://see.xidian.edu.cn/cpp/shell/"
}

# Invoke your function
Hello

十九:Shell函式引數

#!/bin/bash
funWithParam(){
    echo "The value of the first parameter is $1 !"
    echo "The value of the second parameter is $2 !"
    echo "The value of the tenth parameter is $10 !"
    echo "The value of the tenth parameter is ${10} !"
    echo "The value of the eleventh parameter is ${11} !"
    echo "The amount of the parameters is $# !"  # 引數個數
    echo "The string of the parameters is $* !"  # 傳遞給函式的所有引數
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

二十:Shell檔案包含
#!/bin/bash
. ./subscript.sh
echo $url

二十一:輸入輸出重定向

1.command > file

將輸出重定向到 file。

2.command < file

將輸入重定向到 file。

3.command >> file

將輸出以追加的方式重定向到 file。

4.n > file

將檔案描述符為 n 的檔案重定向到 file。

5.n >> file

將檔案描述符為 n 的檔案以追加的方式重定向到 file。

6.n >& m

將輸出檔案 m 和 n 合併。

7.n <& m

將輸入檔案 m 和 n 合併。

8.<< tag

將開始標記 tag 和結束標記 tag 之間的內容作為輸入。

相關推薦

Shell指令碼基本語法

一:Shell簡介 Shell 是一種指令碼語言 指令碼語言的優點是使用靈活、部署容易、跨平臺性好,非常適合Web開發以及小工具的製作。 Shell 除了能解釋使用者輸入的命令,將它傳遞給核心,還可以: 呼叫其他程式,給其他程式傳遞資料或引數,並獲取程式的處理結果;在多個

Shell基礎 -- 基本語法

  本文介紹一下 shell 的語法。 一、變數   在 shell 裡,使用變數之前通常並不需要事先為他們做出宣告,需要使用的時候直接建立就行了。預設情況下,所有變數都被看做字串並以字串來儲存,即使它們被賦值為數值時也是如此。shell 和一些工具會在需要時把數值型字串轉換成對應的數值以對它們進行操作。

1 TCL指令碼基本語法(概要)

TCL常用基本語法 一個TCL指令碼可以包含一個或多個命令。命令之間必須用換行符或分號隔開。 第一個單詞代表命令名,另外的單詞則是這個命令的引數,用空格或TAB鍵隔開。 變數置換$。 命令置換[] 反斜槓置換\ ,例如set msg multiple\ space ,如果沒有\則有報

iOS音視訊—Shell指令碼語言(語法-字串)

In every walk with nature one receives far more than he seeks. 每一次和自然同行,都會有意外的收貨。 Shell指令碼語言(語法-字串)

linux shell指令碼基本操作

一些寫10次指令碼有9次會用到的操作,給自己留檔。 bin/bash 在指令碼開頭應加上如下一行: #!/bin/bash 其中”#!”是一個2位元組魔法數字,後面接的路徑名/bin/bash指定了一個解釋指令碼命令,除/bin/bash外,/b

1、TCL指令碼基本語法(概要)

TCL常用基本語法 一個TCL指令碼可以包含一個或多個命令。命令之間必須用換行符或分號隔開。 第一個單詞代表命令名,另外的單詞則是這個命令的引數,用空格或TAB鍵隔開。 變數置換$。 命令置換[] 反斜槓置換\ ,例如set msg multiple\ space ,如果沒

shell指令碼學習筆記(一、shell指令碼變數語法

sh檔案用"#!"開頭表示用什麼來執行程式,如"#!/bin/bash" 表示用bin/bash來執行sh sh檔案,預設是文字檔案,是不可以執行的,可以通過chmod允許sh檔案可以被執行,chmod命令說明如下: chmod----改變一個或多個檔案的存取模式(mode) chmod

bat 指令碼基本語法

常用命令 echo、@、call、pause、rem(小技巧:用::代替rem)是批處理檔案最常用的幾個命令,我們就從他們開始學起。 ==== 注 =========== 首先, @ 不是一個命令, 而是DOS 批處理的一個特殊標記符, 僅用於遮蔽命令列回顯. 下面是DOS命令列或批處理中可能會見到的一些特殊

sh執行shell指令碼出現語法錯誤

今天除錯一個指令碼,用./的方式直接執行指令碼沒有發現任何問題,但是當我用如下命令列印除錯資訊的時候就會發現各種問題: sh -x sample.sh 下面給出sample.sh #!/bin/bash hello(){     echo "Hello, this is

shell 指令碼簡單語法

其實是三條命令,if [ -f ~/.bashrc ]是第一條,then . ~/.bashrc是第二條,fi是第三條。如果兩條命令寫在同一行則需要用;號隔開,一行只寫一條命令就不需要寫;號了,另外,then後面有換行,但這條命令沒寫完,Shell會自動續行,把下一行接在then後面當作一條命令處理。和[命令

shell指令碼的一些基本入門語法

$#:代表命令列引數個數 $*:代表所有引數 $n:第n個引數 $?:代表最後一個命令返回值 $$:代表當前shell的程序號PID $是變數的引用符   = 是最基本的賦值 := 是覆蓋之前的值 ?= 是如果沒有被賦值過就賦予等號後面的值 += 是

shell--grep命令+正則表達式+基本語法

及其 gre awk 使用 part 開頭 合集 運算符 擴展 什麽是正則 正則就是用一些具有特殊含義的符號組合到一起(稱為正則表達式)來描述字符或者字符串的方法。或者說:正則就是用來描述一類事物的規則。 在linux中,通配符是由shell解釋的,而正則表達式則是由命令解

Shell第三篇:基本語法

允許 主體 賦值 算數 export $* lar script userdel 目錄 一、什麽是shell script 二、變量 三、運算符 四、流程控制 五、函數   一、什麽是shell script   將OS命令堆積到可執行文件裏,由上至下的順序執行文本裏的

bash shell基本語法

ssi expr express 一個空格 元素 res 空格 pre file 1 shell語句的基本構成 shell每個基本的構成元素之間都相隔一個空格。 比如[ -e file ],[、-e、file、]這四個基本元素之間都相隔了一個空格。 同樣的道理[ ! -e

Shell 腳本編程 基本語法

名稱 ... /usr ase 失敗 htm 也有 第一個 編程 Shell 腳本編程語法: 註: 文章來源 http://www.cnblogs.com/yunquan/p/6821850.html 視頻來源:https://www.bilibili.com/video/

shell編程:基本語法

yellow lob 子進程 語言 unset 下劃線 image 因此 語法 要掌握一門語言,就要先掌握它的語法.如同C語言一般,shell也有自己的語法. 變量 按照慣例,Shell變量通常由字母加下劃線開頭,由任意長度的字母、數字、下劃線組成。有兩種類型的Shell變

shell編程-基本語法

例如 我們 值類型 元素 uptime 操作 開頭 brush art 變量的作用 等號兩邊禁空格 for 循環 #語法一 for 變量 in 值1 值2 值3.. do 程序塊兒 done # #語法二 fo

shell編程基本語法

定義 變量賦值 加減乘除 其他 表達式 不用 cname 使用 until 編寫shell腳本的時候,最前面要加上一行:#!/bin/bash,因為linux裏面不僅僅只有bash一個解析器,還有其它的,它們之間的語法會有一些不同,所以最好加上這一句話,告訴系統要用這個解析

shell基本語法

數學 多少 oca day nth nta 就是 引用 能夠 shell是一種腳本語言,可以使用邏輯判斷、循環等語法可以自定義函數、shell是系統命令的集合shell腳本可以實現自動化運維,能夠大大增加我們的運維效率 shell腳本結構 腳本開頭以#! /bin/bash

指令碼語言的基本語法

第一個 Lua 程式 互動式程式設計 Lua 提供了互動式程式設計模式。我們可以在命令列中輸入程式並立即檢視效果。 Lua 互動式程式設計模式可以通過命令 lua -i 或 lua 來啟用: $ lua -i $ Lua 5.3.0 Copyright (C) 1994-2015