腳本的基本編譯

  從本節開始,正式進入shell腳本編輯。shell

一、使用多條命令

  若是想使用兩條命令同時運行,可使用 分號 隔開來執行;express

  例如:date ; who編程

  注意,這種方式下面,單條命令的最大字符數量不能超過255個字符;數組

二、建立腳本文件

#!/bin/bash  

  #在普通的shell腳本中,# 符號做爲註釋行,默認shell腳本不處理註釋行,可是第一行例外。這一行用來告訴系統,如下均爲shell程序命令;bash

#!/bin/bash
#This script displays the date and who's logged on
date
who

  在shell腳本中,程序執行都是按照順序由上至下的進行運行的;函數

  若是想執行這個腳本程序,能夠將文件添加到PATH路徑中,或是使用全路徑來執行這個腳本程序;ui

  第二種執行方式:this

chmod u+x test1
./test1

三、顯示消息

  大多數的shell命令生成本身的輸出,這些輸出在運行該腳本的控制檯監視器上輸出相應的信息,來幫助客戶知道發生了什麼事情;spa

#!/bin/bash
#This script displays the date and who's logged on
echo The time adn date are;
date
echo "Let's see who's logged into the system:"
who
chmod u+x test1
./test1

  echo命令再輸出內容的時候默認在最後輸出一個回車,此時,爲了讓結果和文本字符串在同一行顯示,咱們使用 -n 參數來實現3d

echo -n "The time and date are:"

  輸出結果以下:

四、使用變量

  在shell腳本中,咱們不是僅僅只處理命令,還須要加入變量,結合數據來實現對應的功能;

  4.一、環境變量

    首先,在shell腳本中就能夠應用對應環境變量,經過set命令就能夠查看到;

#!/bin/bash
#display user information from the system
echo 「User info for userid:$USER」
echo UID: $UID
echo HOME: $HOME
chmod u+x test2
./test2

    這樣的話,就會顯示當前用戶的UID和HOME目錄;

    在shell腳本程序中,若是你須要使用符號自己的含義,是須要使用  \  反斜線來還原符號自己的含義的

echo "The cost of th item is \$15"

  4.二、用戶變量

    除了系統自帶的環境變量,在shell腳本程序中,Linux系統是支持使用本身的定義的本地變量的;也就是用戶變量;

    可是要注意,用戶變臉的字符不能操做20個字符字母、數字或者下劃線。變量名稱是區分大小寫的Var1和var1是不同的。而且經過等號,來給變量賦值;

var1=10
var2=-57
var3=testing
var="still more testing"

    用戶變量再shell腳本週期內生效,若是shell腳本執行結束,這個變量也隨之被刪除;

#!/bin/bash
#testing variables
days=10
guest="Katie"
echo "$guset checked in $days days ago"
days=5
guset="Jessica"
echo "$guset checked in $days days ago"
chmod u+x test3
./test3

    腳本由上向下執行,變量從新複製都會覆蓋掉以前全部的值;

#!/bin/bash
#assigning a variable value to another variable
value1=10
value2=$value1
echo The resulting value is $value2
chmod u+x test4
./test4

    其中$value1值賦給value2的時候必須加上 $ 符號

  4.三、反引號

    反引號所引發來的內容,若是是命令,則會將命令的執行結果取出來,並賦值給對應的變量;

#!/bin/bash
#using the backtick character
testing=`date`echo "The date and time are:" $testing
chmod u+x test5
./test5

    此時,輸出的就是date這個內容,就是執行date命令所看到的內容

#!/bin/bash
# copy th /usr/bin directory listing to a log file
today=`date +%y%m%d`
ls /usr/bin -al > log.$today
chmod u+x test6
./test6

    這樣就將ls /usr/bin -al 查看到的內容,複製給對應的目錄,且這個目錄後綴爲今天的時間,這個操做在真實的工做環境下是常用的;

五、重定向輸入輸出

  有時候,咱們想保存命令的輸出,而不是顯示出來。bash shell提供了幾種操做符來實現;

  5.一、輸出重定向

    command > outputfile

date > test6
ls -l test6
cat test6
who > test6
cat test6

    若是是追加文件的話,咱們就須要使用 >>

date >> test6
cat test6

  5.二、輸入重定向

    command < inputfile  它主要是將一個文件的內容重定向到一條命令中去;

wc < test6  #將test6這個文件交給wc來執行

    wc命令:在wc命令下生成的三個值

      文本的行數

      文本的單詞書

      文本的字節數

    內置輸入重定向符號爲兩個小於號 <<;咱們須要指定一個文本標記來講明數據輸入的開始和結尾。文本標記可使用任意字符,可是開始和結尾必須相同

wc << EOF
>test string 1
>test string 2
>test string 3
> EOF

六、管道

  command1 | command2  #將command1命令的結果輸出給command2來執行;

rpm -qa | sort | more
rpm -qa | sort > rpm.list  #查看安裝的全部軟件,同時進行排序,並將結果輸入到rmp.list文件中

七、數學計算

   在shell腳本程序中,使用數學運算是必須的;

  7.一、expr 命令

    能夠經過expr來進行數學運算

expr 1+5

    expr命令可以區分一些不一樣的數學操做符合字符串的操做符,以下表:

expr 5 \* 2  #對於有些符號,具備特定意義的,須要使用反斜線,恢復其自己意思;
#!/bin/bash
# An example of using the expr command
var1=10
var2=20
var3='expr $var2 / $var1'
echo The result is $var3
chmod u+x test6
./test6 

  7.二、使用括號

    ($[operation])

var1=$[1 + 5]
echo $var1
var2=$[$var1 * 2]
echo $var2

    與使用expr命令相比,使用括號使用shell數學運算變的更加簡單。

#!/bin/bash
var1=100
var2=50
var3=45
var4=$[$var1 * ($var2 - $var3)]
echo The final result is $var4
chmod u+x test7
./test7

    使用括號的方式來進行算數運算,無需小心符號錯誤;

#!/bin/bash
var1=100
var2=45
var3=$[$var1 / $var2]
echo The final result is $var3
chmod u+x test8
./test8

    上面運行腳本的結果爲2,是一個整形,這裏屬於數據類型的結果,正確狀況下須要回覆一個浮點數據纔是正確的;

  7.三、浮點解決方案

    解決浮點運算問題最簡單的方式就是使用bc計算器;

    一、bc的基礎知識

    bash計算器能夠識別的數據類型:一、數字(包括整數和浮點);二、變量(簡單變量和數組);三、註釋(以英鎊符號開始的行或者C育嬰的/* */對);四、表達式;五、編程語句(如if-then語句);六、函數;

bc
12 * t.4
3.156 * (3 + 5)
quit

    scale參數控制浮點計算後支持幾位數值:

bc -q
3.44 / 5
scale=4
3.44 / 5

    或者則會像是小數點後4爲,這就是經過scale參數來控制的;

    同時,在bc計算器中,也可使用變量來進行勻速昂;

bc -q
var1=10
var1 * 4
var2 = var1 / 5
print var2
quit

    二、在腳本中使用bc

    在shell腳本中使用bc計算器,來進行浮點計算;

    用法:variable=`echo "options; expression" | bc`

#!/bin/bash
var1=`echo " scale=4; 3.44 / 5" | bc`
echo The answer is $var1
chmod u+x test9
./test9

    爲了避免再受到數字的限制,咱們使用變量來實現運算

#!/bin/bash
var1=100
var2=45
var3=`echo "scale=4; $var1 / $var2" | bc`
echo The answer for this is $var3
chmod u+x test10
./test10

    固然,若是繼續賦值了的話,能夠再給其餘的運行式進行運算

#!/bin/bash
var1=20
var2=3.14159
var3=`echo "scale=4; $var1 * $var2" | bc`
var4=`echo "scale=4; $var3 * $var2" | bc`
echo The final result is $var4

    對於簡短的計算這種方法很好,可是有時數字多了,就會顯示的很混亂;

    這個問題有個簡單的解決方法。bc命令可以是被輸入重定向,允許把文件重定向到bc命令中進行處理。然而,這一樣容易混淆,由於須要在文件中存儲表達式;

    還可使用內置輸入重定向的方式,而不是用文件重定向。在shell中,能夠把輸出賦值給變量。以下:

variable=`bc << EOF 
options 
statements 
expressions 
EOF 
`

    EOF文本字符串代表內置重定向數據的開始和末尾。記住任然須要使用反引號將bc命令輸出的值賦給變量。

    如今能夠把全部單獨的bash計算器元素放到腳本的單獨行中。

#!/bin/bash
var1=10.46
var2=43.67
var3=33.2
var4=71

var5=`bc << EOF
scale = 4
a1 = ( $var1 + $var2 )
b1 = ( $var3 * $var4 )
a1 + b1
EOF
`
echo The final answer for this mess is $var5

八、退出腳本

  shell腳本中的命令都是使用一個退出狀態。這個退出狀態介於0和255之間的整數值,當命令運行完成使,命令就會把退出狀態傳遞給shell。能夠捕捉這個值並在您的腳本中使用它。

  8.一、覈對退出狀態

    $?  特殊變量輸出最後一條命令執行的轉態。若是向覈對上一條命令的執行狀態,須要在這條命令後直接 echo $?;

date
echo $?

    若果是錯誤的狀態,則會放回非0的結果

afdas
echo $?

    常見的返回狀態:

      0  #命令執行成功

      1  #未知的錯誤

      2  #誤用shell命令

      126  #命令沒法執行

      127  #沒有找到命令

      128  #無效的退出參數

      128+x  #使用Linux信號x的致命錯誤

      130  #使用ctrl+c終止的命令

      255  #規範外的退出轉態

~]#./myprog.c
-bash: ./myprog.c:Permission denied
~]#echo $?
126
~]#date %t
date: invalid date '%t'
~]#echo $?
1

  8.二、退出命令

    指定一個腳本的退出狀態

#!/bin/bash
#testing the exit status
var1=10
var2=30
var3=$[ $var1 + $var2 ]
echo The answer is $var3
exit 5
chmod u+x test13
./test13
echo $?

    這樣的話,去檢查腳本的退出狀態碼就不是默認的0了,而是最後咱們指定的5;

    同時退出轉態碼,也可使用變量

#!/bin/bash
#testing the exit status
var1=10
var2=30
var3=$[ $var1 + $var2 ]
exit $var3

    這樣,退回的轉態碼就是$var3的值;

    應該謹慎使用退出狀態碼,由於退出狀態碼最高是255。若是超出這個範圍,運算結果就是那個特定的書被256除了以後的餘數。

    在if-then語句中,退出狀態碼尤爲重要;

相關文章
相關標籤/搜索