Unix 系統下Shell語法分析

2021-06-01 12:16:09 字數 2289 閱讀 5254

shell可以看作是乙個命令列直譯器,它是unix作業系統下傳統的使用者和計算機的互動介面,使用者直接輸入命令來執行各種各樣的任務,它類似於windows 9x下的command.com或者是基於windows nt的各種系統下的cmd.exe;同時shell又是一種程式語言,它可以互動式解釋和執行使用者輸入的命令或者自動地解釋和執行預先設定好的一連串的命令。

linux系統提供多種不同的shell以供選擇。常用的有bourne shell(簡稱sh)、c-shelll(簡稱csh)、korn shell(簡稱ksh)和bourne again shell (簡稱bash)。

shell指令碼執行方式:

(1)

輸入定向到shell指令碼(shell從檔案中讀取命令後執行)

bash < 指令碼名

(2)

以指令碼名作為引數(也可以:· 指令碼名引數)

bash 指令碼名 引數1 引數2

(3)

將shell指令碼的許可權設定為可執行,然後在提示符下直接執行它。

chmod a+x 指令碼名

指令碼名注意:如果在shell中指定了#!/bin/bash;可以不用在crontab中寫bash,直接/xx/xx/xx.sh即可

shell語法分析:

1.變數:

(1)定義:變數名=字串

(2)使用(列印變數的值): echo $變數名

(3)變數賦值:

普通的賦值

xx="dd dkkd dd"

將命令的結果賦值,有兩種形式

a) `命令`:

var = ` pwd `

b) $(命令):

var=$

2.陣列:

(1)定義:

a) 陣列名[下標]=值

b) declare -a 陣列名

c) a=(a1 a2 a3 a4)

(2)陣列值:

$若沒有給出陣列元素的下標,則陣列名表示下標為0的陣列元素

表示式$的值是陣列arr第i個元素值的長度(字元個數)。

3.萬用字元:

* 表示匹配任意字元0次或多次出現

?表示匹配任意乙個字元

[ ]表示其中任何乙個字元

! 表示不在一對方括號中所列出的字元,a[!1-9] 即 a非1-9數字

+ 表示匹配任意字元1次或多次出現

(xx | xx) 表示或關係

4.引號:

(1)單引號: 普通字元

(2)雙引號:除「$」、「`」、「"」、「\」或換行符外,其他都作為普通字元

$ 錶值

\ 轉義字元

(3)倒引號: 命令列

如:pwd `

5.條件語句:

(1)if

if 條件

then 命令1

else 命令2

fi(2)case

case

字串 in

模式字串1) 命令

…命令;;

模式字串2) 命令

…命令;;

…模式字串n) 命令

…命令;;

esac

例如:case $1 in

one)

echo "one"

;;two)

echo "two"

;;three)

echo "three"

;;*)

echo "ohter"

exit 1

esac

6.迴圈語句:

(1)while

while 條件

do命令done

(2) until

until

測試條件

do命令表

done

(3)for

for 變數 in 值(正規表示式)

do命令表

done

7.break與continue

break

n :表示跳出幾層迴圈,預設值是1,表示只跳出一層迴圈

continue

n :表示從最內層迴圈體向外跳到第幾層迴圈,預設值是1

8.函式:

函式宣告如下:

函式名( )

注:可以通過return n 退出函式

unix系統下shell列印指令碼

clear echo 請輸入要列印的檔名 c read file echo esc 5i 終端進入列印狀態 cat file 列印檔案 echo esc l 列印完後退紙 echo esc 4i 終端退出列印狀態 n 1 echo n正在列印 c while true 以下迴圈用於動態顯示 正在列印...

Unix下常用shell命令

殺掉指定名稱的程序 k.sh ps ef grep 1 grep v grep awk xargs kill 9例 sh k.sh gjobs 系統庫路徑 usr include profile中設定環境變數 export oracle base ora inst profile中自定義命令 ali...

Unix下shell對檔案隨機讀寫

在 高階bash指令碼程式設計指南 上有乙個例子,用重定向,通過shell對檔案隨機讀寫,但那方法在unix的sh下不管用,自己寫了乙個,例子如下 bin sh randread.sh echo 1234567890 sfile exec 3 sfile read n 4 3 dd bs 1 cou...