Shell 指令碼程式設計

2021-09-29 17:56:56 字數 4221 閱讀 5834

在學習shell指令碼程式設計就要先了解什麼是shell指令碼程式設計

shell是乙個命令直譯器,它在作業系統的最外層,負載直接與使用者對話,把使用者的輸入解釋給作業系統,並處理各種各樣的作業系統的輸出結果,輸出到螢幕並返回給使用者。這種對話方式可以是互動的方式(從鍵盤輸入命令,可以立即得到shell的回應),或非互動式(執行指令碼程式)的方式。

當linux命令或語句不在命令列下執行(嚴格說,命令列執行的語句也是shell指令碼),而是通過乙個程式檔案執行時,該程式就被稱為shell指令碼或shell程式,shell程式很類似dos系統下的批處理程式。這些命令、變數和流程控制語句結合起來就形成了乙個功能強大的shell指令碼。

在學習shell指令碼程式設計之前還需要安裝gcc編譯:

[root@localhost ~]# yum install gcc -y

先開啟文字編輯器(可以使用 vi/vim 命令來建立檔案),新建乙個檔案 test.sh,擴充套件名為 sh(sh代表shell),副檔名並不影響指令碼執行。

輸入一些**,第一行一般是這樣:

#!/bin/bash

echo

"hello world !"

#! 是乙個約定的標記,它告訴系統這個指令碼需要什麼直譯器來執行,即使用哪一種 shell。

echo 命令用於向視窗輸出文字。

執行 shell 指令碼有兩種方法:

1、作為可執行程式

將上面的**儲存為 test.sh,並 cd 到相應目錄:

chmod +x .

/test.sh #使指令碼具有執行許可權

./test.sh #執行指令碼

2、作為直譯器引數

這種執行方式是,直接執行直譯器,其引數就是 shell 指令碼的檔名,如:

/bin/sh test.sh

/bin/php test.php

不過我們還需要注意這些:

1.必須是root才能執行指令碼,否則給出友好提示並終止程式執行

2.成功切換目錄(cd/var/log),否則給出友好提示並終止執行

3.清理日誌(cat /dev/null >messages)清理成功,給出正確提示

4.給出相應提示(echo 輸出)

關於shell的基本寫法:

vim /mnt/***x.sh

#!/bin/bash

執行:(1) sh ***x.sh

(2) chmod +x /mnt/***x.sh

/mnt/***xx.sh

關於sh和bash的區別

早期的bash與sh稍有不同,它還包含了csh和ksh的特色,但大多數指令碼都可以不加修改地在sh上執行

在shell中依然存在和注釋但是和c又有一些不一樣:

在shell指令碼中,跟在(#)井號後面的內容表示注釋,用來對指令碼進行注釋說明,注釋部分不會被當做程式執行,僅僅給使用者看,系統解析器是看不到,更不會執行。

diffdiff [options] target1 target2

diff file1 file2

diff direcory1 directory2

#輸出結果含義:

[num1,num2][a|c|d][num3,num4]

num1,num2表示在第乙個檔案中的行數

a表示新增----add

c表示更改----change

d表示刪除----delete

《表示第乙個檔案中的內容,>表示第二個檔案中的內容,—分割線

num3,num4表示在第二個檔案中的行數

2,4c2,4表示改變第乙個檔案中的第二行和第四行才能匹配第二個檔案中的第二行和第四行

#引數:

-b或–ignore-space-change  不檢查空格字元的不同

-b或–ignore-blank-lines  不檢查空白行

-c  顯示全部內文,並標出不同之處

-i或–ignore-case  不檢查大小寫的不同

-p:若比較的檔案為c語言的程式碼檔案時,顯示差異所在的函式名稱;

-q或–brief:僅顯示有無差異,不顯示詳細的資訊

-r或–recursive:比較子目錄中的檔案

-u 以合併的方式來顯示檔案內容的不同

cut

cut 命令多用與字元擷取

cut -d ##指定分隔符

cut -f 1,7(第1和第7列)|1-7 (第一到第七列) ##指定擷取的列

cut -c 1,4(第乙個分隔符前和第四個分隔符前內容)|1-4(第乙個分隔符到第四個分隔符) ##指定擷取的字元位置

uniq

uniq:重複字元做相應的處理

uniq -u 顯示唯一的行

uniq -d 顯示重複的行

uniq -c 每行顯示一次並統計重複次數

sort

sort:多用於字元排序

sort -n 純數字排序

sort -r 倒序

sort -u 去掉重複數字

sort -o 輸出到指定檔案中

sort -t 指定分隔符

sort -k 指定要排序的列

test命令

test命令和等同

test 「a"「a」「b」 等同 [ 「a」「a」"b」 ]

[ 「a"=

="

a" == "

a"==

"b」 ] #等於

[ 「a"!

="

a" != "

a"!=

"b」 ] #不等於

[ 「a"−

eq

"a" -eq "

a"−eq"

b」 ] #等於

[ 「a"−

ne

"a" -ne "

a"−ne"

b」 ] #不等於

[ 「a"−

le

"a" -le "

a"−le"

b」 ] #小於等於

[ 「a"−

lt

"a" -lt "

a"−lt"

b」 ] #小於

[ 「a"−

ge

"a" -ge "

a"−ge"

b」 ] #大於等於

[ 「a"−

gt

"a" -gt "

a"−gt"

b」 ] #大於

[ 「a"−

ne

"a" -ne "

a"−ne"

b」 -a 「a"−

gt

"a" -gt "

a"−gt"

b」 ] #整數1不等於整數2話並且整數1大於整數2

[ 「a"−

ne

"a" -ne "

a"−ne"

b」 -o 「a"−

gt

"a" -gt "

a"−gt"

b」 ] #整數1不等於整數2話或者整數1大於整數2

[ -z 「katex parse error: expected 'eof', got '#' at position 6: a" ] #̲字串的長度是否為零 [ -n…a」 ] # 字串的長度非零

[ 「file1」 -ef 「file2」 ] #兩個檔案是否為同乙個檔案,可用於硬連線。主要判斷兩個檔案是否指向同乙個inode。

[ 「file1」 -nt 「file2」 ] #判斷檔案1是否比檔案2新

[ 「file1」 -ot 「file2」 ] #判斷檔案1比是否檔案2舊

[ -e 「file」 ] #如果檔案存在,則為真;

[ -f 「file」 ] #如果檔案為乙個普通檔案,則為真;

[ -s 「file」 ] #如果檔案為乙個套接字特殊檔案,則為真;

[ -b 「file」 ] #如果檔案為乙個塊特殊檔案,則為真;

[ -d 「file」 ] #如果檔案為乙個目錄,則為真;

[ -c 「file」 ] #如果檔案為乙個字元特殊檔案,則為真;

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