shell指令碼中的數值運算
例1:
[[email protected] ~]# cat test.sh
#!/bin/bash
var1=100
var2=200
var3=$[$var1+$var2]
echo $var3
[[email protected] ~]# sh test.sh
300
這樣是不是實現我們想要的結果了呢,其實shell中還提供了一個數學運算的命令 expr(evaluate expression),他可以進行加減乘除還有比較運算,不過很可惜的是不支援浮點型運算。還有一個缺陷就是expr命令中的運算子可能會有其他含義如*,必須要使用反斜槓進行轉義,這讓人很不爽。不過不用擔心,有問題就會有聰明的人來解決的,一個功能強大的計算器可以供我們在shell中使用,這就是bc。可以檢視man手冊來了解關於它的詳細用法。這裡僅介紹一下bc在shell中的呼叫。bc是一個外部命令,要在shell使用的話我們要使用反引號
例2:
[[email protected] ~]# cat test2.sh
#!/bin/bash
var1=`echo "scale=4;10/3"|bc`
echo $var1
[[email protected] ~]# sh test2.sh
3.3333
看一下它是如何工作的,首先我們要把數學表示式傳遞給bc,很簡單我們通過管道完成。你也看到了表示式裡面不只有表示式還有個scale,它使用來設定小數位數,不過為什麼跟運算結果不符呢,如上所示,應該有四位小數,(有待解決)。轉向正題,有了bc以後,變得方便了很多。可是還是有些不太令人滿意的地方,對於每一個運算表示式都要通過管道傳參的方式似乎有些繁瑣,我們可以使用內建重定向的方法,內建重定向允許從命令列直接重定向資料,在shell指令碼中,使用如下方式
varible=`bc <<EOF
options
statements
expressions
EOF
`
EOF用來表明資料的開始和結束,需要注意的是同樣需要使用反引號將結果賦給變數。expressions中可以使用bc內部變數和shell中的變數,bc內部變數只在bc內部有效。不能用於shell指令碼中。運算表示式中引用shell變數需加$引用符,bc內部變數不加$.
bc的功能遠不止以上所述,詳細用法請參考man手冊。
相關推薦
shell指令碼中的數值運算
shell中的變數沒有如c語言中字元型、整型、浮點型的區分,預設將變數賦值當做字元,怎樣才能讓shell將變數賦值當做數值型呢,答案是用$ 和[], []包含的數學算式可以被shell正確識別。 例1: [[email protected] ~]# cat
shell指令碼中如何處理浮點運算
bash中不能處理浮點運算 let只能處理整數運算 要想處理浮點運算,可以藉助bc 或者 awk #!/bin/bash num="0.5" num1="6" #sacle用於控制小數點後出現的位數 tmp=$(echo "scale=2;$n
shell指令碼中使用if和bc比較變數值和指定值
【預備知識】 假如我有個日誌檔案,每天會往裡追加。日誌摘要如下—— 2018-06-12 09:08:56,105 - hdfs.client - INFO - Renaming ‘/apps/wps_prt_feature/business_info/20
shell指令碼中的數學運算,重定向,alias
1. 整數運算:#!/bin/bashnum1=4num2=5let result1=num1+num2echo $result1let num1++let num2--result2=$[ num1 + num2 ]result3=$[ $num1 + 10 ]echo $
shell指令碼中的for迴圈和while迴圈
基礎for迴圈有三種: ①直接寫-------例如:for i in 1,2,3,4(注:i 是變數; in是在什麼地方;do和done之間是迴圈體) &n
學習Linux shell指令碼中連線字串的方法
這篇文章主要介紹了Linux shell指令碼中連線字串的方法,如果想要在變數後面新增一個字元,可以用一下方法: 程式碼如下: $value1=home $value2=${value1}"=" echo $value2 把要新增的字串變數新增{},並且需要把$放到外面。 這樣輸出的結果
shell指令碼中$的用處
1.$0 獲取當前執行的shell指令碼的檔名,包括路徑。[[email protected] ~]# vi test.sh[[email protected] ~]# cat test.shecho $0[[email protected] ~]# sh test.shtest
shell指令碼中關於getopts的使用方法
例子: while getopts ":e:s:pd:l" arg; do case $arg in e) ghs_env=$OPTARG ;; s)
Shell 指令碼中的檔名匹配和命令執行
理解下 shell 指令碼中的檔名匹配和命令執行的順序與結果。我們學習這個的目的是可以熟悉的在 shell 指令碼中寫出快速的找到檔案的命令。它可以匹配檔名中的任何字串,匹配檔名中的單個字元以及匹配檔名中的字母或數字符號。 首先我們來看看匹配檔案的符號
Shell 指令碼中執行mysql語句
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Linux/Unix shell 指令碼中呼叫SQL RMAN指令碼
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
shell指令碼中的函式與子shell
shell指令碼中的函式與子shell 原文https://www.jianshu.com/p/7db79d7997b5 函式 函式的使用 bash中也有函式。一個函式就是一個子程式,是用於實現一串操作的程式碼塊。bash中的函式的形式如下: functi
Shell指令碼中併發執行緒以及併發數的控制
http://blog.chinaunix.net/uid-8478094-id-3995108.html Shell指令碼中併發執行緒以及併發數的控制 主要記錄一下Shell指令碼中的命令的併發和序列執行。 預設的情況下,Shell指令碼中的命令是序列執行的,必須等到前一條命令
shell指令碼中向hive動態分割槽插入資料
set hive.exec.dynamic.partition=true; #開啟動態分割槽,預設是falseset hive.exec.dyn
shell 指令碼中獲取命令的輸出
這個主要介紹的方法是獲取命令的輸出內容,而不是命令執行成功與否的返回值。 通常情況下,在shell指令碼中需要獲取命令的輸出內容,然後根據輸出內容判斷下一步的執行操作。 比較常用的一種方式就是, 匹配命令輸出的內容中是否存在某些關鍵字,選擇執行的不同動作。 比較常用的一種方式就是
shell指令碼中的讀檔案(while read line)與寫檔案(here document)
shell指令碼中如何讀取外部檔案並進行相關操作呢?正規化如下,是要背滴: while read line; do process $line done < file 如何在寫中將內容寫入新檔案呢,要用到here document,一種特殊的重定向技術,小范式如下,也
shell指令碼中計算時間差
1. 獲取開始、結束時間(獲取當前時間) timer_start=`date "+%Y-%m-%d %H:%M:%S"` timer_end=`date "+%Y-%m-%d %H:%M:%S"` 2. 計算時間差 duration=`echo eval $(($(date
shell指令碼中case select 的使用
#!/bin/bash # case echo "1.Install PHP" echo "2.Install Mysql" echo "3.Install Nginx" read -p "please input your digit:" digit case "$digit" in
shell指令碼中字串比較和數字比較和檔案測試
(1) 字串比較: 作用:測試字串是否相等,長度是否為零,字串是否為NULL。 常用的字串比較符號如下。 =:比較兩個字串是否相同,相同則為“是”。 !=:比較兩個字串是否相同,不同則為“是”。 -n:比較字串的長度是否大於0,如果大於0則為“是”。 -z:比較字串的長度是否等於
shell 指令碼中set -e選項作用範圍
編寫shell指令碼沒多久,對於其許多命令的具體用法還不太熟悉。最近剛好有需求,就嘗試用指令碼去實現。其中就有用到set -e選項。 在用這個命令之前,也查過其功能,描述比較簡單:就是當命令以非零狀態退出時,則退出shell。主要作用是,當指令