shell腳本基礎的簡單介紹與簡單應用
Shell腳本是Linux中很重要的一種“程序”。
什麽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腳本基礎的簡單介紹與簡單應用