shell程式設計

2022-07-16 09:12:12 字數 3838 閱讀 7067

shell指令碼是乙個包含一系列命令序列的文字檔案。當執行這個指令碼檔案時,檔案中包含的命令序列將得到執行 。

語法:shell指令碼的第一行必須是如下格式:#!/bin/sh

符號#!用來指定該指令碼檔案的解析程式。在上面例子中使用/bin/sh來解析該指令碼。當編輯好指令碼後,如果要執行該指令碼,還必須使其具有可執行屬性

注釋:

在進行shell程式設計時,以#開頭的句子表示注釋,直到這一行的結束。如果使用了注釋,即使相當長的時間內沒有使用該指令碼,也能在很短的時間內明白該指令碼的作

用及工作原理。

變數:

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

#!/bin/sh

#set

variable a

a="hello world

"# print a

echo

"a is:

"echo $a

注意:shell會去搜尋變數的值,如果這個變數沒有值,則就無列印。

預設變數

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

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

$0 :命令本身(shell檔名)  // ./hello.sh

$1 :第乙個命令列引數

$2 :第二個命令列引數

區域性變數

在變數首次被賦值時加上 local 關鍵字可以宣告乙個區域性變數,例:s4(演示):

#!/bin/bash

hello="

var1

"echo $hello

function func1

func1

echo $hello

注意:變數

變數賦值時,「=」左右兩邊都不能有空格

bash中的語句結尾不需要分號

if語句   //每乙個if對應乙個fi

if

[ expression ]

then

#code block

fiif [ expression ]

then

#code block

else

#code block

fiif [ expression ]

then

#code block

else if [ expression ]

then

#code block

else

#code block

fifi 

if [ expression ]; then

#code block

elif [ expression ]

then

#code block

else

#code block

fifi

邏輯比較

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

相同 -eq =不同 -ne !=大於 -gt >小於 -lt 《大於或等於 -ge

小於或等於 -le

為空 -z

不為空 -n

比較整數a和b是否相等:if [ $a =$b ] (也可用eq)

判斷整數a是否大於整數b:

if [ $a -gt $b ]

比較字串a和b是否相等:

if [ $a =$b ]

判斷字串a是否為空:

if [ -z $a ]

判斷整數變數a是否大於b:

if [ $a -gt $b ]

注意:

1.「[」「]」符號的左右都留有空格

2.「=」左右都有空格

檔案判斷

-e 檔案已經存在

-f 檔案是普通檔案

-s 檔案大小不為零

-d 檔案是乙個目錄

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

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

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

for語句

基本結構是:

for

varin

[list]

do#code block

done

其 中 $var 是迴圈控制變數,[list] 是 var 需要遍歷的乙個集合,do/done 對包含了迴圈體,相當於 c 語言中的一對大括號。另外如果do 和 for 被寫在同一行,必須在do 前面加上 「;」。如: for $var in [list]; do

ex:

#!/bin/bash

for day in

sun mon tue wed thu fri sat

doecho $day

done

注意:1.如果列表被包含在一對雙引號中,則被認為是乙個元素

2.上面的例子中,在 for 所在那行,變數 day 是沒有加 "$" 符號的,而在迴圈體內,echo 所在行變數$day 是必須加上 "$" 符號的

while迴圈

基本結構是:

while

[ condition ]

do#code block

done

until迴圈

基本結構是:

until [ condition ]

do#code block

done

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

case語句

bash 中的 case 結構與 c 語言中的 switch 語句的功能比較類似,可以用於進行多項分支控制。

case

"$var"in

condition1 )

語句;;

condition2 )

語句;;

*)default

statments;;

esac

#!/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

Shell程式設計 shell特性

linux會預設記錄1000條歷史記錄,可通過 echo histsize 檢視,如果講histsize更改為2000,那麼會預設儲存2000條。1000條記錄儲存在家目錄的 bash history 中,僅當使用者正常退出當前shell時,當前shell中執行的命令才會儲存到 bash histo...

Shell程式設計 Shell函式

shell函式 1.將命令序列按格寫在一起 2.可方便重複使用命令序列 3.shell函式定義 function 函式名 4.呼叫函式的方法 函式名 引數1 引數2 5.shell函式應用示例 1 兩個數字求和 要求 通過sum 定義函式 兩個數求和 方法一 root localhost vim d...

Shell程式設計

1 建立指令碼 vi emacs等即可 bin sh 2 shell變數 對shell來講,所有的變數的取值都是乙個字串 shell是一種解釋性語言,變數無需事先定義 shell中的系統變數 程式命令列引數的數目 儲存前乙個命令的返回值 0 當前程式名 以 1 2 形式儲存所有輸入的命令列引數 以 ...