前言:學(xué)習(xí)寫shell腳本ing……
本章概要:
多命令分號(hào)分開 ,創(chuàng)建shell腳本,美元符引用變量掐场,變量賦值,
反引號(hào)或$()捕獲命令輸出,大于號(hào)重定向輸出結(jié)果赠尾,雙大魚號(hào)追加數(shù)據(jù)辐马,
小于號(hào)輸入重定向拷橘,管道符號(hào)命令重定向,
expr整數(shù)簡便運(yùn)算喜爷,$[]內(nèi)執(zhí)行基本的數(shù)學(xué)運(yùn)行冗疮,bc計(jì)算器執(zhí)行浮點(diǎn)運(yùn)算,退出狀態(tài)碼
目錄
多命令使用與創(chuàng)建shell腳本
顯示消息與使用變量
重定向輸入輸出與管道
數(shù)學(xué)運(yùn)算與退出腳本
一檩帐、多命令使用與創(chuàng)建shell腳本
1.使用多個(gè)命令
date;who ###用;隔開即可
2.創(chuàng)建shell腳本
創(chuàng)建文件
編寫腳本
-
指定路徑
需要告訴shell术幔,你的腳本在哪里,兩種方案
3.1 將shell腳本文件所處的目錄添加到PATH環(huán)境變量中(shell會(huì)通過PATH環(huán)境變量來查找命令)湃密;
3.2 在提示符中用絕對(duì)或相對(duì)文件路徑來引用shell腳本文件诅挑。 -
更改權(quán)限
代碼如下
vim tmp#創(chuàng)建文件并編輯 ### 輸入,按i進(jìn)入編輯模式,可輸入內(nèi)容勾缭,按esc后揍障,:wq保存退出 #!/bin/bash date who ##賦予權(quán)限 chmod u+x tmp ##執(zhí)行 ./tmp
二、顯示消息與命令替換
1.顯示消息
利用echo命令顯示消息代碼如下
echo This is a test
#This is a test
echo Let's see if this'll work
#Lets see if thisll work
echo "This is a test to see if you're paying attention"
#This is a test to see if you're paying attention
echo 'Rich says "scripting is easy".'
#Rich says "scripting is easy".
注意點(diǎn):
- echo命令是shell腳本中與用戶交互的重要工具
- echo命令通常情況下無需加引號(hào)
- 當(dāng)echo的消息中存在引號(hào)時(shí)俩由,需要添加另外一種引號(hào)毒嫡,上述代碼所示
- 如果想把文本字符串和命令輸出顯示在同一行中,用echo語句
的-n參數(shù)幻梯。echo -n "The time and date are: "兜畸。需要在字符串的兩側(cè)使用引號(hào),保證要顯示的字符串尾部有一個(gè)空格碘梢。
2.使用變量
- 環(huán)境變量
shell維護(hù)著一組環(huán)境變量咬摇,用來記錄特定的系統(tǒng)信息
可用set命令顯示
在腳本中可用$來調(diào)用,前面的PATH也是環(huán)境變量
-
==反斜線的使用==:只要腳本在引號(hào)中出現(xiàn)美元符煞躬,它就會(huì)以為你在引用一個(gè)變量肛鹏,
要使它成為美元符之意,需在前面加上反斜線\恩沛,如
echo "The cost of the item is $15" #The cost of the item is 5 上面語句引用了變量1(未定義)在扰,在顯示數(shù)字5 echo "The cost of the item is \$15" #The cost of the item is $15
-
用戶變量
用等號(hào)將值賦給用戶變量
在變量、等號(hào)和值之間不能出現(xiàn)空格
-
引用一個(gè)變量值時(shí)需要使用美元符雷客,在賦值語句中使用value1變量的值時(shí)芒珠,仍然必須用美元符。
#變量賦值示意 var1=10 var2=-57 var3=testing var4="still more testing" #!/bin/bash # assigning a variable value to another variable value1=10 value2=$value1 ##變量2引用變量1搅裙,仍需加美元符皱卓,不然輸出為字符value1 echo The resulting value is $value2
3.命令替換
從命令輸出中提取信息裹芝,并將其賦給變量
-
有兩種方法可以將命令輸出賦給變量:
反引號(hào)字符(`)
$()格式
testing='date' testing=$(date)
-
常見的例子
#!/bin/bash # copy the /usr/bin directory listing to a log file today=$(date +%y%m%d)#+%y%m%d格式告訴date命令將日期顯示為兩位數(shù)的年月日的組合。 ls /usr/bin -al > log.$today
三娜汁、重定向輸入和輸出與管道
1.重定向輸入與輸出
目的是為了保存輸出的結(jié)果
-
輸出重定向
- 用大于號(hào)(>)來完成(如果輸出文件已經(jīng)存在了嫂易,重定向操作符會(huì)用新的文件數(shù)據(jù)覆蓋已有文件)
- 不想覆蓋文件原有內(nèi)容,可以用雙大于號(hào)(>>)來追加數(shù)據(jù)存炮。
-
輸入重定向
輸入重定向符號(hào)是小于號(hào)(<)
-
內(nèi)聯(lián)輸入重定向炬搭。這種方法無需使用文件進(jìn)行重定向蜈漓,只需要在命令行中指定用于輸入重定向的數(shù)據(jù)就可以了穆桂。符號(hào)是遠(yuǎn)小于號(hào)(<<)。
==注意==:
必須指定一個(gè)文本標(biāo)記來劃分輸入數(shù)據(jù)的開始和結(jié)尾融虽。
在命令行上使用內(nèi)聯(lián)輸入重定向時(shí)享完,shell會(huì)用PS2環(huán)境變量中定義的次提示符
來提示輸入數(shù)據(jù)
示例
date > test6
date >> test6
wc < test6
wc << EOF
> test string 1
> test string 2
> test string 3
> EOF
#3 9 42 #共三行,9個(gè)單詞有额,42個(gè)字符
2.管道
將一個(gè)命令的輸出作為另一個(gè)命令的輸入般又,command1 | command2,用(|)符號(hào)即可
四巍佑、數(shù)學(xué)運(yùn)算與退出腳本
1.數(shù)學(xué)運(yùn)算
- expr命令
- 特別笨拙
- 所以不用他
- 使用方括號(hào)
- 用美元符和方括號(hào)($[ operation ])將數(shù)學(xué)表達(dá)式圍起來茴迁。
- 只支持整數(shù)運(yùn)算
- 浮點(diǎn)解決方案
- 內(nèi)置計(jì)算器bc,通過bc命令即可訪問,退出輸入quit
- 希望得到小數(shù)需要改scale變量
- 在腳本中使用bc
variable=$(echo "options; expression" | bc) - 使用內(nèi)聯(lián)重定向萤衰,將選項(xiàng)和表達(dá)式放在腳本的不同行中可以讓處理過程變得更清晰堕义,提高易讀性。
variable=$(bc << EOF
options
statements
expressions
EOF
)
- 示例
expr 1 + 5
expr 5 \* 2 ###需使用\來使*為乘法之意脆栋,而不是通配符
var1=$[1 + 5]
var2=$[$var1 * 2]##方括號(hào)就不要
bc
3.156 * (3 + 5)
25.248
quit
cat test9
#!/bin/bash
var1=$(echo "scale=4; 3.44 / 5" | bc)
echo The answer is $var1
cat test12
#!/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
2.退出腳本
目的是為了知道腳本的運(yùn)行情況
- 查看退出狀態(tài)碼
- 一個(gè)專門的變量$?保存上個(gè)已執(zhí)行命令的退出狀態(tài)碼倦卖。
- 如需查看運(yùn)行情況,須立即查看 echo $?
- 成功結(jié)束的命令的退出狀態(tài)碼是0椿争。有錯(cuò)誤怕膛,退出狀態(tài)是一個(gè)正數(shù)值
- exit命令
- exit命令允許你在腳本結(jié)束時(shí)指定一個(gè)退出狀態(tài)碼。
- 當(dāng)查看腳本的退出碼時(shí)秦踪,你會(huì)得到作為參數(shù)傳給exit命令的值或變量值褐捻。
- 示例
date
#Sat Jan 15 10:01:30 EDT 2014
echo $?
0