Shell指令碼程式設計 初步

2021-07-25 21:12:05 字數 4495 閱讀 6682

指令碼是乙個包含一系列命令序列的文字檔案。當執行這個指令碼檔案時,檔案中包含的命令序列將得到自動執行。這種文字檔案可以執行,可以提高工作效率。擴充套件名為 「.sh

指令碼檔案通常以#!/bin/bash或者#!/bin/sh開頭。

shell指令碼允許使用者設定和使用自己的變數,變數可以是數字或者字串,使用者無需指定其型別,也無需在使用前定義

使用變數時,前面要加「$」符號,給變數賦值時,不能加該符號,而且賦值的等號左右都不能有空格

在任何時候使用變數都要在前面加上$符號。

舉例: 注釋用「#」號表示

#!/bin/sh

a="hello world"

b=5echo 「a is: $a」 #列印內容

echo 「b is $b」

注意:在ultraedit編寫後的.sh檔案是dos格式的,需要使用相應命令轉換為linux格式,命令為dos2unix ./*.sh。該命令要通過安裝光碟安裝。在編輯相關**之後,最好要進行一次該命令。

同c程式一樣,shell指令碼中也可以使用命令列引數

舉例:

echo

"number of var"

$#echo

"value of var" $*

echo

"name of script"

$0echo

"value of var1"

$1echo

"value of var2"

$2

執行結果:

shell指令碼提供了乙個專門的命令expr來計算數學表示式,例如expr 5 + 1,但是當要把計算的結果賦值給其他變數的時候,還必須使用反引號

var=`expr 20 / 10`

var3=`expr $var1 / $var2`

echo

"the value is:"

$var3

shell指令碼中最基本的流程控制語句就是if-then,使用格式:

例:

比較整數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. 比較中的「=」左右都有空格

&& 當前面條件為真時,執行後面語句|| 當前面條件為假時,執行後面的語句shell指令碼提供了for命令,用於建立類似於c語言程式設計中for語句一樣的迴圈。使用格式:

for var in list

do

commands

done

舉例:

list="sun mon tue wed thur fri sat"

for day in

$list

doecho

$day

done

注意:第二個list和第二個day是使用變數要加上$,第乙個day實際上是賦值,不需要加。

shell指令碼提供了while命令,用於建立類似於c語言程式設計中while語句一樣的迴圈。使用格式:

while [ condition ]#當條件為真時,執行迴圈體

do

commands

done

舉例:

var=10

while [ $var

-gt5 ]

doecho

"the value of var is:"

$var

var=`expr $var - 1`

done

常用操作選項:-n∶指定處理後只顯示該行,預設顯示全檔案

-e∶進行多項編輯任務

-i∶直接修改讀取的檔案內容,而不是由螢幕輸出

常用命令選項:

p 列印匹配行

a 新增

c 替代一行

d 刪除定位行

s 替代一行中的某些部分

舉例:注意命令的寫法,字母的位置

1、 顯示:

•sed -n 『2p』 tmp.txt (只顯示第2行)

•sed -n 『1,3p』 temp.txt (列印第1行到第3行)

•sed -n 『/mov/p』 temp.txt (列印含movie的行)

2、刪除:

•sed 『2d』 tmp.txt (刪除第2行)

•sed 『3,$d』 tmp.txt (刪除第3行到最後一行)

「$」表示最後一行

3、 查詢:

sed -n 『/hello/p』 tmp.txt (查詢包括關鍵字hello的所有行)

4、代替:

•sed 『1c hi』 tmp.txt (第1行代替為hi)

•sed -n 『/hello/p』 tmp.txt | sed 『s/hello/bird/g』

(將hello字串替換為bird字串,符號/起到間隔和結束的作用,可以不寫g)

5、 插入:

•sed -i 『$a bye』 tmp.txt (在最後一行插入bye)

只有加上了-i,原檔案才會被真正的修改。

p和s命令字母可以在引號外,但是前後不能顛倒,即p在後,s在前。

awk是乙個強大的文字分析工具,它把檔案逐行的讀入,以空格為預設分隔符將每行分割為多個字段。

使用方式:

awk 『』 filenames

pattern 要查詢的內容

action 找到匹配內容時所執行的命令

範例:

•last –n 5 | awk ''

•cat /etc/passwd | awk –f

':'''

•awk –f

':''$1=="root" ' /etc/passwd

$1 表示第乙個字段。

$0 表示整個一行。

引數 -f 表示指定分隔符,-f 『:』 表示指定 冒號: 為分隔符

$1==」root」為加入的條件,第乙個欄位為root的行

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.那麼如何把乙個變數...