Shell指令碼語法基礎

2021-08-20 08:05:37 字數 3542 閱讀 2728

shell是linux下的乙個命令解析器,把一系列的命令序列寫入文字檔案就構成了shell指令碼(類似於windows中的批處理)

#!/bin/sh

#echo something

echo "hello world"

echo "hello !!"

mkdir /tnt

符號#!用來指定該指令碼檔案的解析程式。在上面例子中使用/bin/sh來解析該指令碼。

以#開頭的句子表示注釋,直到這一行的結束。

變數的引用,檔案s2

#!/bin/sh

#set varible a

a="hello world"

#print a

echo "a is:"

echo $a

#!/bin/sh

#set varible num

num=2

echo "this is the $nd"

預設變數

$# :傳入指令碼的命令列引數個數

$* :所有命令列引數值,在各個引數值之間

留有空格

$0 :命令本身(shell檔名)

$1 :第乙個命令列引數

$2 :第二個命令列引數

#!/bin/sh

echo "number of vars:"$#

echo "values of vars:"$*

echo "value of var1:"$1

echo "value of var2:"$2

echo "value of var3:"$3

echo "value of var4:"$4

執行 ./s2 1 2 3 4

[root@localhost smb]# ./s3 1 2 3 4

number of vars:4

values of vars:1 2 3 4

value of var1:1

value of var2:2

value of var3:3

value of var4:4

在變數首次被賦值時加上 local 關鍵字可以宣告乙個區域性變數 檔案s3

#!/bin/bash

hello="var1"

echo $hello

function func1

func1

echo $hello 結果

[root@localhost smb]# ./s4

var1

var2

var1

if語句

if [ expression ]

then

#code block

fi if [ expression ]

then

#code block

else

#code block

fiif [ expression ]

then

#code block

else if [ expression ]

then

#code block

else

#code block

fi fi

if [ expression ]; then

#code block

elif [ expression ]

then

#code block

else

#code block

fi fi

比較比較操作     整數操作     字串操作

相同              -eq                =

不同              -ne !              =

大於               -gt                >

小於               -lt                <

大於或等於     -ge

小於或等於     -le

為空               -z

-e 檔案已經存在

-f 檔案是普通檔案

-s 檔案大小不為零

-d 檔案是乙個目錄

-r 檔案對當前使用者可以讀取

-w 檔案對當前使用者可以寫入

-x 檔案對當前使用者可以執行

檔案s5

#!/bin/sh

folder=/home

[ -r "$folder" ] && echo "can read $folder"

[ -f "$folder" ] || echo "this is not file"

for迴圈

for var in [list]

do #code block

done

檔案s6

#!/bin/bash

for day in sun mon tue wed thu fri sat

do echo $day

done

結果[root@localhost smb]# ./s6

sunmon

tuewed

thufri

satwhile迴圈和until迴圈

while [ condition ]

do #code block

done

until [ condition ]

do #code block

done

while 和 until的區別在於while是為真時執行,until是為假時執行

case語句

case "$var" in

condition1 )

;; condition2 )

;; * )

default statments;;

esac

例子s7

#!/bin/bash

echo "hit a key, then hit return."

read keypress

case "$keypress" in

[a-z] ) echo " uppercase letter";;

[a-z] ) echo " lowercase letter";;

[0-9] ) echo "digit";;

* ) echo "punctuation, whitespace, or other";;

esac

結果[root@localhost smb]# ./s7

hit a key, then hit return.

a lowercase letter

[root@localhost smb]# ./s7

hit a key, then hit return.

b uppercase letter

注意:q1: 當編輯好指令碼後,如果要執行該指令碼,還必須使其具有可執行屬性。chmod +x filename

q2: 變數賦值時,「=」左右兩邊都不能有空格;比較語句時「=」左右兩邊都要有空格

q3: 在shell程式設計中,所有的變數都由字串組成,並且不需要預先對變數進行宣告

shell 指令碼基礎語法

這句一般在 shell 指令碼的第一行。告訴作業系統,此指令碼的直譯器為 bin sh 這個可執行檔案。類似地,如果你的指令碼用 bash,ksh,解釋,第一行就應該是 bin bash bin ksh 注意 shell 指令碼對空格要求十分嚴格,關鍵字和符號之間必須加空格。1 字串判斷 str1 ...

shell指令碼基礎 語法

一 變數 root t foot home2 zzz01 a hello root t foot home2 zzz01 echo a hello root t foot home2 zzz01 echo world hello world 其實 a和 作用相同,但是為了防止字串在拼接時,計算機無法...

shell指令碼基礎語法(if 和 陣列)

條件判斷命令 test 或者 例 test 1 lt 4 判斷1 4 test語句的等價形式 1 lt 4 檔案測試符號 f 存在且是普通檔案 d 存在且是目錄 s 存在且位元組數大於0 r 存在且可讀 w 存在且可寫 x 存在且可執行 如 test d mydoc 判斷mydoc是否是目錄例子 1...