Shell指令碼學習

來源:互聯網
上載者:User

Shell指令碼學習

shell指令碼學習

shell就是命令解析器,將使用者輸入的指令轉換為相應的機器能夠啟動並執行程式。

Shell是一個作為使用者與linux系統間介面的程式,它允許使用者向作業系統輸入需要執行的命令,在linux中可有多種shell。

一:Shell的種類:

ash:是貝爾實驗室開發的shell,bsh是對ash的符號連結。

bash:是GNU的Bourne Again shell,是GNU作業系統上預設的shell。sh以及bash2都是對它的符號連結。

tcsh:是Berkeley UNIX C shell。csh是對它的符號連結

二:shell命令

shell命令的基本格式是:

命令名 [選項] <參數1> <參數2> ……

shell提示符 :# $

GNU工具中的bash,作為/bin/sh被預設安裝

大多數linux發行版中,shell程式/bin/sh實際上是對程式/bin/bash的一個連結

命令/bin/sh -version可用於查看bash的版本。

三:shell指令碼

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

Shell指令碼的第一行必須是如下格式:

#!/bin/sh

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

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

Shell指令碼的執行:sh hello.sh(假設有一個hello.sh的指令碼)。

變數:在shell編程中,所有的變數都由字串組成,並且不需要預先對變數進行聲明,

#!/bin/sh

#set variable a

a=8

#print a

echo "a is:"

echo $a

注意思考:

例子1:

A=8

echo $ABC 輸出啥?為什嗎?

A=8

echo ${A}BC 輸出啥?為什嗎?

例子2:

A=8

echo “$A” 輸出啥?為什嗎?

A=8

echo ‘$A’ 輸出啥?為什嗎?

“$A”會被解析為變數,輸出8,‘$A’輸出$A;

預設變數:

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

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

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

$1 :第一個命令列參數

$2 :第二個命令列參數

局部變數:

在變數首次被賦值時加上 local 關鍵字

1.變數賦值時,“=”左右兩邊都不能有空格

2.BASH 中的語句結尾不需要分號

IF語句

if [expression ]

then

#code block

fi

if [expression ]

then

#code block

else

#code block
fi

if [ expression ]

then

#code block

elif [ expression ]

then

#code block

else

#code block

fi

if [ expression ]; then

#code block

elif [ expression]; then

#code block

else

#code block

fi

比較:

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

相同-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檔案對目前使用者可以執行

例S5:

#!/bin/sh

folder=/home

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

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

FOR迴圈

for 迴圈結構與 C 語言中有所不同,在 BASH 中for迴圈的基本結構是:

for var in [list]

do

#code block

done

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

for $var in [list]; do...done

#!/bin/bash

for day in Sun Mon Tue Wed Thu Fri Sat

do

echo $day

done

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

#!/bin/bash

for day in "Sun Mon Tue Wed Thu Fri Sat "

do echo $day done

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

WHILE迴圈

while 迴圈的基本結構是:

while [ condition ]

do

#code block

Done

UNTILL迴圈

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

[[:upper:]] )echo" Uppercase letter";;

[[:lower:]] )echo" Lowercase letter";;

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

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

Esac

Bash shell的功能

1.命令記憶能力

2.使用Tab鍵進行命令與檔案的補全功能

3.設定命令的別名(eg:alias lm=’ls -l’)

4.作業控制、前台、後台控制

5.程式指令碼(shell script)

6.支援萬用字元

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.