shell指令碼程式設計

2021-09-29 19:03:29 字數 2913 閱讀 6708

一、shell程式設計入門簡介

曾經有人說過,學習linux不知道shell程式設計,那就是不懂linux,現在細細品味確實是這樣。shell是作業系統的最外層,shell可以合併程式語言以控制程序和檔案,以及啟動和控制其他程式。

shell通過提示您輸入,向作業系統解釋該輸入,然後處理來自作業系統的任何結果輸出,簡單來說shell就是乙個使用者跟作業系統之間的乙個命令直譯器。

shell是使用者與linux作業系統之間溝通的橋梁,使用者可以輸入命令執行,又可以利用shell指令碼程式設計去執行,如圖所示。

shell、utilites及kernel位置關係

shell、utilites及kernel位置關係

linux shell種類非常多,常見的shell如下:

·□ bourne shell(/usr/bin/sh或/bin/sh);

·□ bourne again shell(/bin/bash);

□ c shell(/usr/bin/csh);

·□ k shell(/usr/bin/ksh);

·□ shell for root(/sbin/sh)。

不同的shell語言的語法有所不同,一般不能交換使用,最常用的shell是bash,也就是bourne again shell。bash由於易用和免費,在日常工作中被廣泛使用,也是大多數linux作業系統預設的shell環境。

shell、shell程式設計、shell指令碼、shell命令之間都有什麼區別呢?簡單來說:shell是乙個整體的概念,shell程式設計與shell指令碼統稱為shell程式設計,shell命令是shell程式設計底層具體的語句和實現方法。

shell指令碼的建立:

包含一些命令或生命,並符合一定格式的文字檔案

格式要求:首行shebang機制

#!/bin/bash    使用shell程式設計

#!/bin/bin/python 使用python語言程式設計

#!/usr/bin/perl  使用perl語言程式設計

shell指令碼的用途:

* 自動化常用命令

* 執行系統管理和故障排除

* 建立簡單的應用程式

* 處理文字或檔案

#!/bin/bash

for i in

do ping -c2 -i0.3 -w1 192.168.18.$i &>/dev/null

if [ $? -eq 0 ];then

echo "192.168.18.$i is up"

else

echo "192.168.18.$i is down"

fidone

解釋:

第一句 #!/bin/bash

在shell指令碼的開頭往往有一句話來定義使用哪種sh直譯器來解釋指令碼。

目前研發送測的shell指令碼中主要有以下兩種方式:

(1) #!/bin/sh

(2) #!/bin/bash

止於使用sh還是bash來解釋的區別後邊抽時間專門寫一篇文章,這裡不在詳述

第二句 for i in do…

done

是迴圈結構,for迴圈類似程式中的for迴圈,i為迴圈變數,迴圈變數值在in{}裡依次迴圈,迴圈體從do開始,done結束。

第三句ping -c2 -i0.3 -w1 192.168.18.$i &>/dev/null

ping命令引數

-c2:設定完成要求回應的次數;這裡設定為2是考慮網路路由的問題導致第一次ping不能返回而第二次ping可以返回的情況(具體原因請自行閱讀網路原理)

-i0.3:指定收發資訊的間隔時間(秒計),這裡的時間是綜合考慮ping命令返回超時的時間和每次ping的時間,原則應為:返回超時/dev/null :表示將標準輸出stdout和標準錯誤輸出stderr重定向到null的裝置中,也就是說不列印到螢幕上了,而且也不儲存檔案(放到名叫null的裝置中——無底洞永遠消失)。

第四句判斷語句

if [ ?−e

q0];

then

....

..el

se..

....

fiif

判斷語句

[]中為

判斷表達

式,

? -eq 0 ];then ...... else ...... fi if判斷語句 [ ]中為判斷表示式,

?−eq0]

;the

n...

...e

lse.

....

.fii

f判斷語

句中為判斷表

達式,?表示最後執行是否成功,成功為0 不成功為1

第五句、第六句

echo "192.168.18.iis

up"、

echo

"192.168.18.

i is up"、echo "192.168.18.

iisup"

、ech

o"19

2.16

8.18

.i is down"表示回顯到螢幕上$i表示當前i變數的值

shell指令碼的許可權

一般情況下,預設建立的指令碼是沒有執行許可權的。

沒有許可權不能執行,需要賦予可執行許可權。

shell指令碼的執行

1,輸入指令碼的絕對路徑或相對路徑

/root/helloworld.sh

./helloworld.sh

2,bash或sh +指令碼

bash /root/helloworld.sh

sh helloworld.sh

注:當指令碼沒有x許可權時,root和檔案所有者通過該方式可以正常 

3,在指令碼的路徑前再加". " 或source

source /root/helloworld.sh

. ./helloworld.sh

Shell 指令碼程式設計

1 執行shell的方法 指定shell bin sh 由sh執行指令碼 指令碼總是由sh解釋 顯示呼叫shell sh scriptname 在當前shell中執行指令碼 profile profile是可執行的 ksh profile profile是不可執行的 改變當前的執行環境責應輸入.pr...

Shell 指令碼程式設計

a file 如果 file 存在則為真。b file 如果 file 存在且是乙個塊特殊檔案則為真。c file 如果 file 存在且是乙個字特殊檔案則為真。d file 如果 file 存在且是乙個目錄則為真。e file 如果 file 存在則為真。f file 如果 file 存在且是乙個...

shell指令碼程式設計

今天看看shell程式設計,記錄下期中與想象中不一樣的地方 0.注釋用 1.shell的變數賦值 your name zhm 在your name和等號中間不能有空格,這和別的語言很不一樣,那麼在使用變數時和別的語言也不一樣,要使用 your name,一般要用 一定是大括號 2.那麼如何把乙個變數...