Linux基礎學習筆記(四 構建基本腳本)

Linux(基於《Linux命令行與shell腳本編程大全》的學習筆記)

11構建基本腳本

腳本運行環境爲Centos7java

建立shell腳本

shell 腳本的第一行用來指定要使用的shell 格式爲python

#!/bin/bash

一般使用# 做爲shell 腳本的註釋(可是第一行例外)
建立一個內容以下的腳本(文件名.sh結尾)shell

#!/bin/bash/
#腳本測試
date
who

完成後直接運行,使用命令bash 文件名.sh能夠直接運行腳本,獲得以下結果:編程

Sun Jun 17 20:52:35 CST 2018
root pts/0 2018-06-17 20:49

上面就是一個簡單的腳本bash

顯示消息

大多數shell命令都會產生本身的輸出,這些輸出會輸出到控制檯上,不少時候咱們想添加本身的文本消息來告訴用戶腳本正在作什麼,這就用到了一個shell 命令 echo學習

echo 可使用單引號或者雙引號來劃定按文本字符串,做用相似於java/python的print

能夠把上面的腳本改成測試

#!/bin/bash/
#腳本測試
echo "如今的時間是"
date
echo "已經登陸的用戶有"
who

能夠看到結果:ui

如今的時間是
Mon Jun 18 08:16:10 CST 2018
已經登陸的用戶有
root pts/0 2018-06-18 08:15

使用變量

環境變量

以前使用過echo 命令來查看環境變量 一樣,也能夠在腳本中使用$+環境變量名來獲取環境變量
修改腳本爲this

#!/bin/bash/
#腳本測試
echo "如今的時間是"
date
echo "已經登陸的用戶有"
who
echo UID:$UID 
echo HOME:$HOME

執行後輸出以下 :命令行

如今的時間是
Mon Jun 18 08:36:09 CST 2018
已經登陸的用戶有
root pts/0 2018-06-18 08:15
root pts/1 2018-06-18 08:35
UID:0
HOME:/root

在shell腳本中只要引用了環境變量,就會顯示對應的環境變量,若是要顯示$HOME這樣的字符,必須在使用前加轉義符,不然會被shell翻譯爲對應的環境變量的值

用戶變量

shell腳本容許腳本中自定義變量,自定義的變量容許在整個腳本中使用

用戶變量能夠是任何由字母、數字或下劃線組成的文本字符串,長度不超過20個。用戶變量區分大小寫,因此變量Var1和變量var1是不一樣的

建立腳本內容以下 :

#!/bin/bash/
var1=10
var2=29
var3=$var1
echo 'var1的值爲$var1'
echo 'var2的值爲$var2'
echo 'var3的值和var1相等值爲$var3'

運行結果:

var1的值爲$var1
var2的值爲$var2
var3的值和var1相等值爲$var3

上面看到輸出內容不對啊,沒有拿到對應的值,這裏是個人引號寫錯了,echo中有變量調用的時候應該使用雙引號,不然沒法識別變量的值,或者不使用引號
將上面的腳本修改成:

#!/bin/bash/ 
var1=10 
var2=29
var3=$var1
echo "var1的值爲$var1"
echo "var2的值爲$var2"
echo "var3的值和var1相等值爲$var3"

執行結果:

var1的值爲10
var2的值爲29
var3的值和var1相等值爲10

注意變量之間的賦值用的是var3=$var1而不是var3=var1,後者var3的值就是var1這個字符串了

命令替換

命令替換就是將一個命令的輸出替換爲腳本中的一個變量,通常有兩種方法:

反引號字符 ` 例:var1=`date`

$() 例 var2=$(date)

上面兩種都是將date輸出的內容賦值給變量var1/2,注意賦值等號和命令之間沒有空格
寫個腳本測試一下

#!/bin/bash/
var1=`date`
var2=$(date)
echo "今天的日期時間1是$var1"
echo "今天的日期時間2是$var2"

運行結果:

今天的日期時間1是Mon Jun 18 10:53:39 CST 2018
今天的日期時間2是Mon Jun 18 10:53:39 CST 2018

經常使用下面的腳原本按日期給文件命名

#!/bin/bash  
# copy the /usr/bin directory listing to a log file  
today=$(date +%y%m%d)  
ls /usr/bin -al > log.$today

第三行是將date格式化爲年月日的形式,將/usr/bin/目錄下ls命令的輸出內容輸入到log文件中,運行後會生成一個以日期結尾的文件

重定向輸入和輸出

輸出重定向

最基本的重定向將命令的輸出發送到一個文件中。bash shell用大於號(>)
最簡單的執行命令

date > today

把今天的日期輸出到today文件中 注:today文件不存在於當前目錄下就會建立today文件,若是已經存在today文件,則會覆蓋today中的內容(沒有任何提示)
爲了防止覆蓋文件內容,可使用雙大於號 >> 來向文件追加內容

輸入重定向

和輸出重定向相反,輸入重定向是使用 小於號 <
能夠把符號方向理解爲數據流動的方向
wc命令能夠對數據數據中的文本進行計數,默認狀況下會依次輸出三個值,分別爲:文本的行數,文本的詞數,文本的字節數
執行

wc < today
1 6 29

內聯輸入重定向符號是遠小於號(<<)。除了這個符號,你必須指定一個文本標記來劃分輸入數據的開始和結尾。任何字符串均可做爲文本標記,但在數據的開始和結尾文本標記必須一致
執行

wc << biaoji

會進入次級提示符中(理解爲一個輸入框),輸入對應的數據後換行輸入 biaoji 便可結束,並計算兩個biaoji之間的數據的信息 整體代碼以下

wc << biaoji
>這裏是輸入的數據內容
>這也算
>biaoji

執行結果爲

2 2 41

管道

管道命令格式 command1 | command2
將命令1的輸出做爲命令2的輸入

rpm -qa|sort >rmp.list

上面的命令就是將安裝包的信息排序後輸入到rpm.list中 (RedHat)
管道命令用處不少也很簡單

執行數學運算

expr 命令

expr 1 + 5

加號兩邊都有空格
通常狀況不用這玩意兒,很難用,這個命令是bash shell爲了兼容另外一種名爲Bourne shell,因此就不要用了

使用方括號

使用$[operation] 做爲計算的首選
建立以下腳本

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

執行上面的腳本能夠看到The final result is 500
注意 bash shell 只支持整數運算

浮點計算

常見的浮點計算是使用內建的bash計算器
使用命令bc 進入計算器或者bc -q 略去歡迎信息
bc能夠指定結果的小數位數

$ bc -q
3.44 / 5
0
scale=4
3.44 / 5
.6880
quit

一樣bc 支持變量

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

在腳本中可使用bc

#!/bin/bash
var1=$(echo "scale=4; 3.44 / 5" | bc)
echo The answer is $var1

腳本bc+內聯輸入重定向

#!/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

退出腳本

查看退出狀態碼

echo $?

一個成功結束的命令的退出狀態碼是0.若是一個命令結束有錯誤,退出狀態碼應該是一個正數值
Linux 退出狀態碼

狀態碼 描述
0 命令成功結束
1 通常性未知錯誤
2 不是的shell命令
126 命令不可執行
127 沒有找到命令
130 經過ctrl+c終止的命令

exit 命令

默認狀況下,shell腳本會以腳本中的最後一個命令的退出狀態碼退出。
exit命令容許你在腳本結束時指定一個退出狀態碼。
狀態嗎最大爲255 若是超過最大的狀態碼,退出狀態碼被縮減到了0~255的區間。shell經過模運算獲得這個結果。一個值的模就是被除後的餘數。最終的結果是指定的數值除以256後獲得的餘數。在這個例子中,指定的值是300(返回值),餘數是44,所以這個餘數就成了最後的狀態退出碼。

#!/bin/bash
# testing the exit status
var1=10
var2=30
var3=$[$var1 * $var2]
echo The value is $var3
exit $var3

執行上面的腳本,其執行的狀態碼爲300,超過了最大的255,因此會被取餘爲44
使用命令

echo $?

能夠直接查看狀態碼 完~

相關文章
相關標籤/搜索