Shell程序的基本結構
#!/bin/bash
#hello
echo 'hello Linux'
echo 'this is a shell file'
這個程序很簡單,但包含了shell程序的下面一些基本特徵:
(1)所有的shell程序第一行都是以#!開頭。後面爲執行此shell程序的shell解釋器且與名稱。
(2)程序的第二行以註釋的方式寫出程序的名字,這是shell編程的一種習慣。
(3)最簡單的shell程序就是一組shell命令。這裏只是使用了兩個echo命令顯示了兩個字符串。
shell的編輯、保存與執行
我們可以使用gedit,vim等任意一個文本編輯器來編寫shell腳本。
shell程序是一個普通的文本,需要添加可執行權限以後才能執行。編輯保存後,需要執行一個命令,使得shell腳本變爲可執行文件。命令爲:chmod -x filename
這時,shell腳本文件才變爲一個可執行文件。只要在該腳本所在文件目錄,輸入./filename即可執行該腳本。
shell程序中的變量
shell程序中需要用變量來存儲程序的數據。shell中的變量分爲 局部變量、環境變量、位置變量三種。
1、局部變量
shell語言是解釋型語言,不需要像C或java語言一樣編程時需要事先聲明變量。在shell中,對一個變量進行賦值時,就定義了變量。局部變量指的是隻在當前的進程和程序中有效的變量。
shell程序的變量是無數據類型的,可以使用同一個變量存放不同數據類型的值。變量賦值之後只需在變量前面加一個$訪問變量的值。可以用賦值符號(=)爲變量賦值。如果對一個變量賦值是沒有空格的字符串,那麼可以不用引號。
2、環境變量
環境變量是在一個用戶的所有進程中都可以訪問的變量。系統中常常使用環境變量來存儲常用的信息。
環境變量的查看: 使用export命令可以查看系統的環境變量的列表。
環境變量的訪問: 環境變量的訪問,需要在一個環境變量的前面加一個$符號。
環境變量的定義: 可以用export命令來定義一個環境變量。環境變量的命令一般都是大寫的。
環境變量的刪除: 刪除自己定義的環境變量,可以用unset命令。
3、位置變量
位置變量是指的shell程序在運行時傳入的參數。程序中可以用變量的形式來調用這些參數。這些參數被存放到1~9的9個變量名中,被形象的稱爲位置變量。同普通變量一樣,位置變量用$前綴加這個數字來表示。
在位置變量中,$0的值爲bash。$1以後的變量是輸入參數的列表。
shell程序中變量的賦值
shell中使用'='進行變量的賦值,也可以用等號來改變或初值化一個變量的值。要給一個變量賦值時,就這麼寫:變量名=數值。要去用變量的值時,只需在變量名前加一個$符號。
!!!注意:給變量賦值時,不能在“=”兩邊留空格。
算數運算符
shell中常用的算術運算符爲:+、-、*、/、**、%、+=、-=、*=、/=、%=。其中**爲對兩個變量做冪運算。
注:當輸入以下命令時:echo 1+2。 shell中並沒有輸出計算結果3,而是輸出了1+2。要進行數值計算,在shell中有三種表達方式:
(1)、用expr改變運算順序。expr用於整數值計算。可以用echo `expr 1 + 2`來輸出1+2的結果,用expr表示後面的表達式爲一個數學運算。(注意:`不是單引號,而是“TAB“鍵上面的那個符號。
(2)、用let指示數學運算。可以先將運算的結果賦值給變量b,命令是 let b=1+2,然後再用 echo $b來輸出b的值。
(3)、用$[]表示數學運算。將一個數學運算寫到$[]符號的中括號中,中括號中的內容先進行數學運算。
輸入和輸出
echo命令可以輸出文本或變量的值,是shell中最常用的輸出方式。結果可以輸出到終端也可以寫入到文件。
echo $str #將結果輸出到終端
echo $str>file #將結果保存到文件file中。如果沒有,則新建一個文件
#如果有了則會覆蓋原來的文件
echo $str>>file #將結果追加到文件file中
echo的格式控制字符:/c,/t,/n
注意:如果是要輸出特殊字符,必須加-e選項,否則輸出的結果中會直接輸出字符。加-n選項可以禁止echo輸出後的換行。
read命令讀取信息
read命令可以從鍵盤或文件中讀入信息,並賦給一個變量。read命令讀取信息的各種方法:
(1)、如果只讀入一個變量,會把鍵盤上輸入的所有信息賦給這個變量。按“Enter“鍵結束輸入。
(2)、如果輸入多個變量,用空格鍵將輸入的變量隔開。如果輸入變量的個數多於需要讀取變量的個數,將會把剩餘的變量賦值給最後一個變量。
(3)、在讀取語句後面添加<filename,表示從文件中讀取數據,並且賦值給變量。
測試語句
注:$?用於保存上一個命令的結果
test命令的測試結果,返回0時表示測試成功,返回1時表示測試失敗。
用中括號可以代替test命令。這種方法和test命令的原理相同。需要注意的是:中括號裏面的前後都要有一個空格。如: [ a -eq b ] 纔是標準的寫法。
測試有文件狀態測試,數值測試,字符串測試,邏輯測試。每一個測試對應的測試參數都不一樣。
流程控制結構
if語句
每一個if都要有一個fi與之相匹配。
if ....; then
....
elif ....; then
....
else
....
fi
這些都只是shell編程最簡單的應用與實現,要想進步,還得再往深處研究,主要是多加練習編寫shell腳本程序。熟能生巧。