1. 程式人生 > >shell腳本基礎的簡單介紹與簡單應用

shell腳本基礎的簡單介紹與簡單應用

shell 變量 基礎

Shell腳本是Linux中很重要的一種“程序”。

  1. 什麽shell腳本?

shell腳本是提前設計的可執行語句,用來完成特定任務的文件。

Shell腳本可分為交互式和非交互式

交互式:指腳本在運行時,需要一些人為的參與,比如,鍵盤輸入數據,確認選項等。因為有人為的參與,所以運行時更加智能化,但是同時效率會降低

非交互式:指腳本運行時不需要人為幹預,批量執行,效率高,但提高智能化難度大

2 shell腳本的規範格式

#!環境申明

# 註釋文本

可執行代碼

以上就是shell腳本的規範格式,也就是說你不管寫什麽腳本,一上來就可以把第一個環境申明寫好。例如編程裏最有名的一個程序‘Hello World’,這個不管學什麽語言,貌似都是最開始寫的一個程序。

[root@localhost 桌面]#vim /root/helloworld.sh

#!/bin/bash

echo "Hello World !!"

這樣我們就寫好了我們的第一個shell腳本。

Shell腳本中我們通常都是以.sh結尾,因為可以一看就知道是shell腳本但也不是非要以.sh結尾,可以在名稱後面什麽都不加

但shell腳本不是也寫好就可以運行,在linux中還是要涉及到讀寫執行權限的,一般shell腳本寫完後,系統是默認為一個基本文件的,我們需要賦予它可執行權限後,才可以運行該腳本,所以:

[root@localhost 桌面]#chmod +x /root/helloworld.sh

[root@localhost 桌面]#/root/helloworld.sh

Hello World !!

這樣一個完整的可運行的腳本就寫好了

3 shell腳本的基本創建過程

明確任務需求:先做什麽,後做什麽

編寫代碼文件:每個步驟的實現,然後轉換成命令行的形式保存在腳本中

測試並完善:根據運行結果排除錯誤,再進行代碼優化,用戶友好處理

4 簡單腳本技巧

管道傳遞

使用 | 管道操作

– 將前一條命令的標準輸出交給後一條命令處理

例如:

#!/bin/bash

useradd student

echo 123 | passwd --stdin student

這個腳本是自動創建用戶student,並設置好密碼為123.此處管道的作用就是將123交給passwd,用來設置為密碼

重定向輸出

>:只收集前面命令的正確輸出

2>:只收集前面命令的錯誤輸出

&>:收集前面命令的錯誤與正確輸出

例如:

[root@localhost 桌面]#cat /opt/1.txt /etc/ > /opt/2.txt

cat: /etc/: 是一個目錄

[root@localhost 桌面]#cat /opt/2.txt

123

[root@localhost 桌面]#cat /opt/1.txt /etc/ 2> /opt/2.txt

123

[root@localhost 桌面]#cat /opt/2.txt

cat: /etc/: 是一個目錄

[root@localhost 桌面]#cat /opt/1.txt /etc/ &> /opt/2.txt

[root@localhost 桌面]#cat /opt/2.txt

123

cat: /etc/: 是一個目錄

變量

在實際的編寫腳本過程中,往往會涉及到許多數據,但這些數據都是同一類型,比如,一個班的考試成績,許許多多的用戶名等等,這些數據要是每個都為其寫個腳本是繁瑣的,而且是重復性操作,這是就需要一種“容器“,可以存放這些數據,並且隨著數據的變化,其內容也跟著變化

什麽是變量?

變量簡單來說就是以不變的名稱存放可能變化的值

基本形式:變量名=變量值

作用:方便以固定的名稱重復使用某個值,提高對任務需求,運行環境變換的適應能力

定義變量時需要的註意的問題:

– 若指定的變量名已存在,相當於為此變量重新賦值

– 等號兩邊不要有空格

– 變量名由字母/數字/下劃線組成,區分大小寫

– 變量名不能以數字開頭,不要使用關鍵字和特殊字符

查看和引用變量

– 引用變量值:$變量名

– 查看變量值:echo $變量名、echo${變量名}

變量的分類(運維角度):

環境變量:用來設置用戶/系統環境

位置變量:在執行腳本時提供的命令行參數(非交互式傳值)

預定義變量:用來保存腳本程序的執行信息,系統內置,我直接調用,無法更改

自定義變量:用戶自主設置,隨意更改、使用

這裏先介紹位置變量與預定義變量

位置變量:

首先我們要知道位置變量到底指的是什麽?

在linux中,變量是不能用純數字來命名的,原因是數字都被用來定義位置變量了。

比如,我編寫了一個/root/ps.sh的腳本內容如下:

#!/bin/bash

echo $1

echo $2

echo $3

運行結果如下:

[root@localhost 桌面]#/root/ps.sh 1 2 3

1

2

3

可以看出,我在腳本後面輸入了三個數:1,2,3

輸出結果是1,2,3

所以位置變量指的是在腳本後每個位置都是一個變量,第一個位置是變量1,第二位置是變量2,以此類推。

註:每個位置間是用空格區分的,不然再長的字符都是一個位置

所以上述的腳本是在屏幕上顯示出位置變量1,2,3的內容

預定義變量:

$# 已加載的位置變量的個數

$* 所有位置變量的值

$? 程序退出後的狀態值,0表示正常,其他值異常

例如,下面的腳本:

#!/bin/bash

echo $1

echo $2

echo $3

echo $#

echo $*

運行結果如下:

[root@localhost 桌面]#/root/ps.sh 1 2 3

1

2

3

3

1 2 3

可以看出,變量$#的作用是統計已使用的位置變量的個數,而$*的作用是將所有已使用的位置變量內容輸出到屏幕上

變量$?作用比較特殊,如果一個程序正常輸出結果,沒有報錯,系統會用“0”值對應這個結果,表明程序無異常,如果程序報錯或出了其他狀況,就會用其他非零值來表示這個結果。而儲存這些值的就是變量$?。平時我們是看不見這個變量的,我們可以用echo $?的形式將這個值顯示出來。

例如:

[root@localhost 桌面]#cat /mnt

cat: /mnt: 是一個目錄

[root@localhost 桌面]#echo $?

1

Cat命令是用來查看文件的內容的,用來查看目錄時是會報錯的,這時,用echo $?就可以看到此時變量$?的值為1。這個變量是保存最後一個程序的輸出狀態,前面程序運行所產生的值會被覆蓋。

在寫腳本時,經常會涉及到關於比較與判斷的選項,這裏介紹關於這些的一些命令選項:

檢查文件狀態

-e:文檔存在為真

-d:文檔存在且為目錄為真

-f:文檔存在且為文件為真

-r:文檔存在且有讀取權限為真

-w:文檔存在且有寫入權限為真

-x:文檔存在且有執行權限為真

比較整數大小(帶e都有等於二字,g代表大於,l代表小於)

-gt:大於------------------>>greater than;

-ge:大於等於------------->>greater than or equal to

-eq:等於---------------->>equal;

-ne:不等於--------------->>not equal

-lt:小於--------------------->>less than

-le:小於等於-------------->>less than or equal to

字符串比對

== :相等

!=:不相等

Shell腳本的編寫涉及到很多知識,這裏先介紹一些基礎簡單的知識與運用。


shell腳本基礎的簡單介紹與簡單應用