Shell腳本——數字計算

Shell 和其它編程語言不同,Shell 不能直接進行算數運算,必須使用數學計算命令

要想讓數學計算發揮作用,必須使用數學計算命令,Shell 中常用的數學計算命令如下表所示。

運算操作符/運算命令說明
(( ))用于整數運算,效率很高,推薦使用
let用于整數運算,和 (()) 類似。
[$]用于整數運算,不如 (()) 靈活。
expr可用于整數運算,也可以處理字符串。比較麻煩,需要注意各種細節,不推薦使用。
bcLinux下的一個計算器程序,可以處理整數和小數。Shell 本身只支持整數運算,想計算小數就得使用 bc 這個外部的計算器。
declare -i將變量定義為整數,然后再進行數學運算時就不會被當做字符串了。功能有限,僅支持最基本的數學運算(加減乘除和取余),不支持邏輯運算、自增自減等,所以在實際開發中很少使用。

一、Shell (( )) 的用法

雙小括號 (( )) 的語法格式為:

((表達式))

通俗地講,就是將數學運算表達式放在(())之間。

表達式可以只有一個,也可以有多個,多個表達式之間以逗號,分隔。對于多個表達式的情況,以最后一個表達式的值作為整個 (( )) 命令的執行結果。

可以使用$獲取 (( )) 命令的結果,這和使用$獲得變量值是類似的。

運算操作符/運算命令說明
((a=10+66) ((b=a-15)) ((c=a+b))這種寫法可以在計算完成后給變量賦值。以 ((b=a-15)) 為例,即將 a-15 的運算結果賦值給變量 c。 注意,使用變量時不用加$前綴,(( )) 會自動解析變量名。
a=((10+66)b=((10+66) b=((10+66)b=((a-15)) c=$((a+b))可以在 (( )) 前面加上$符號獲取 (( )) 命令的執行結果,也即獲取整個表達式的值。以 c=((a+b))為例,即將a+b這個表達式的運算結果賦值給變量c。注意,類似c=((a+b))這樣的寫法是錯誤的,不加‘((a+b)) 為例,即將 a+b 這個表達式的運算結果賦值給變量 c。 注意,類似 c=((a+b)) 這樣的寫法是錯誤的,不加`((a+b))為例,即將a+b這個表達式的運算結果賦值給變量c。注意,類似c=((a+b))這樣的寫法是錯誤的,不加`就不能取得表達式的結果。
((a>7 && b==c))(( )) 也可以進行邏輯運算,在 if 語句中常會使用邏輯運算。
echo $((a+10))需要立即輸出表達式的運算結果時,可以在 (( )) 前面加$符號。
((a=3+5, b=a+10))對多個表達式同時進行計算。

在 (( )) 中使用變量無需加上$前綴,(( )) 會自動解析變量名,這使得代碼更加簡潔,也符合程序員的書寫習慣。

二、Shell let命令:對整數進行數學運算

let 命令和雙小括號 (( )) 的用法是類似的,它們都是用來對整數進行運算,讀者已經學習了《Shell (())》,再學習 let 命令就相當簡單了。

注意:和雙小括號 (( )) 一樣,let 命令也只能進行整數運算,不能對小數(浮點數)或者字符串進行運算。

Shell let 命令的語法格式為:

let 表達式
或者
let "表達式"
或者
let '表達式'

它們都等價于((表達式))

當表達式中含有 Shell 特殊字符(例如 |)時,需要用雙引號" "或者單引號' '將表達式包圍起來。

和 (( )) 類似,let 命令也支持一次性計算多個表達式,并且以最后一個表達式的值作為整個 let 命令的執行結果。但是,對于多個表達式之間的分隔符,let 和 (( )) 是有區別的:

  • let 命令以空格來分隔多個表達式;
  • (( )) 以逗號,來分隔多個表達式。

另外還要注意,對于類似let x+y這樣的寫法,Shell 雖然計算了 x+y 的值,但卻將結果丟棄;若不想這樣,可以使用let sum=x+y將 x+y 的結果保存在變量 sum 中。

這種情況下 (( )) 顯然更加靈活,可以使用$((x+y))來獲取 x+y 的結果。請看下面的例子:

[c.biancheng.net]$ a=10 b=20
[c.biancheng.net]$ echo $((a+b))
30
[c.biancheng.net]$ echo let a+b  #錯誤,echo會把 let a+b作為一個字符串輸出
let a+b

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535574.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535574.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535574.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

windows下最好的C++ IDE

1. 你是不是用慣了VC6.0?假如是,我現在推薦的IDE仍然是VC6.0的IDE。 2. 你是不是覺得VC6.0過時了,很多C語法它都不支持?我現在推薦的編譯器她在一直發展著,支持最新的C語法。 3. VC.net的界面弱智,而且包含…

Shell腳本——內置命令

一、內置命令 所謂 Shell 內置命令,就是由 Bash 自身提供的命令,而不是文件系統中的某個可執行文件。 例如,用于進入或者切換目錄的 cd 命令,雖然我們一直在使用它,但如果不加以注意很難意識到它與普通命令的性質是不…

Shell腳本——基礎語法

一、條件判斷 1.1、基本語法 [ condition ](注意condition前后要有空格) 注意:條件非空即為true,[ abcdef ]返回true,[] 返回false。 1.2、常用判斷條件 兩個整數之間比較 字符串比較 -lt 小于(less …

#2002 - 服務器沒有響應 (or the local MySQL server's socket is not ...

經常見有兄弟遇到這樣的問題: mysql -u root -p一切正常,但是用phpmyadmin卻死活不對,提示如下錯誤: #2002 - 服務器沒有響應 (or the local MySQL servers socket is not correctly configured) 我 google 了一下,發現…

第一個Scala程序——Hello World!

一、交互式編程 交互式編程不需要創建腳本文件,可以通過以下命令調用: $ scala Welcome to Scala 2.13.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_231). Type in expressions for evaluation. Or try :help.scala> println("Hello Wo…

CENTOS5下VSFTPD的設置

需求:(虛擬用戶分下載用戶/下載、上傳但不能刪除用戶/管理用戶) 一、安裝 yum -y install vsftpd* yum -y install pam* yum -y install db4* 二、系統帳戶 1、vsftpd服務的宿主用戶 useradd vsftpd -s /sbin/nologin 2、…

Scala基礎語法

如果你之前是一名 Java 程序員,并了解 Java 語言的基礎知識,那么你能很快學會 Scala 的基礎語法。 一、基本語法 Scala 基本語法需要注意以下幾點: 區分大小寫 - Scala是大小寫敏感的,這意味著標識Hello 和 hello在Scala中會有不…

DNS詳解

一、DNS 概念 人和人要互相識別和記憶,需要名字作為輔助,而對于網絡世界,在因特網內也需要一種命名系統來做類似的事情,該系統使用了域來劃分,任何一個網絡里的主機(或者路由器)都有獨一無二的域名(類似國家代碼),域又能繼續劃分為子域(類似每個國家有不同的省份代…

Shell腳本——函數

Shell 函數的本質是一段可以重復使用的腳本代碼,這段代碼被提前編寫好了,放在了指定的位置,使用時直接調取即可。 一、語法 Shell 函數定義的語法格式如下: function name() {statements[return value] }對各個部分的說明&#…

scala通過JDBC進行數據庫操作

scala通過JDBC方式操作mysql (需要加載 mysql-connector-java 驅動) maven依賴&#xff1a; <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.45</version></dependency>一…

Linux下Java的安裝與配置

0、下載好JDK安裝包后上傳到Linux服務器的/usr/local/java/下 1、解壓tar -zxvf jdk-8u251-linux-x64.tar.gz 2、改名mv jdk1.8.0_251 jdk1.8 3、配置環境變量vi /etc/profile 添加以下內容 #JAVA export JAVA_HOME/usr/local/java/jdk1.8 export JRE_HOME$JAVA_HOME/jre e…

運維同步rsync

Rsync(remote rynchronization)是一款開源的、快速的、多功能的、可實現全量以及增量的本地或者遠程數據同步的備份的優秀工具&#xff0c;可使本地主機不同分區或目錄之間及本地和遠程兩臺主機之間的數據快速同步鏡像&#xff0c;遠程備份等功能同時它在同步文件的同時可以保…

Spark初識-什么是Spark

Spark是一個基于內存的開源計算框架&#xff0c;于2009年誕生于加州大學伯克利分校AMPLab&#xff08;AMP&#xff1a;Algorithms&#xff0c;Machines&#xff0c;People&#xff09;&#xff0c;它最初屬于伯克利大學的研究性項目&#xff0c;后來在2010年正式開源&#xff0…

系統優化

1、關閉selinux sed -i ‘s/SELINUXenforcing/SELINUXdisabled’ setenforce 0 2.精簡開機服務 ntsysv setup system service

Spark初識-Spark與Hadoop的比較

Spark&#xff0c;是分布式計算平臺&#xff0c;是一個用scala語言編寫的計算框架&#xff0c;基于內存的快速、通用、可擴展的大數據分析引擎 Hadoop&#xff0c;是分布式管理、存儲、計算的生態系統&#xff1b;包括HDFS&#xff08;存儲&#xff09;、MapReduce&#xff08;…

Spark初識-Spark基本架構概覽使用

當需要處理的數據量超過了單機尺度(比如我們的計算機有4GB的內存&#xff0c;而我們需要處理100GB以上的數據)這時我們可以選擇spark集群進行計算&#xff0c;有時我們可能需要處理的數據量并不大&#xff0c;但是計算很復雜&#xff0c;需要大量的時間&#xff0c;這時我們也可…

Spark初識-彈性分布式數據集RDD

Spark 的核心是建立在統一的抽象彈性分布式數據集&#xff08;Resiliennt Distributed Datasets&#xff0c;RDD&#xff09;之上的&#xff0c;這使得 Spark 的各個組件可以無縫地進行集成&#xff0c;能夠在同一個應用程序中完成大數據處理。 一、RDD概念 RDD 是 Spark 提供…

nmon

1).采集數據&#xff1a; #nmon -s10 -c60 -f -m /home/ 參數解釋&#xff1a; -s10 每 10 秒采集一次數據。 -c60 采集 60 次&#xff0c;即為采集十分鐘的數據。 -f 生成的數據文件名中包含文件創建的時間。 -m 生成的數據文件的存放目錄。 這樣就會生成一個 nmon 文件&…

Spark入門- Spark運行Local本地模式

一、Spark單機模式部署 Spark版本 &#xff1a; spark-2.4.7-bin-hadoop2.7 1、安裝配置JDK環境 2、下載Spark 官網下載http://spark.apache.org/ 然后上傳到LInux服務器上 3、解壓 tar -zxvf spark-2.4.7-bin-hadoop2.7.tgz解壓目錄說明 bin 可執行腳本 conf …

Spark入門-了解Spark核心概念

在本文中我們將從Spark集群角度和程序應用的角度來對相關概念進行了解 一. 站在集群角度 1.1 Master Spark 特有資源調度系統的 Leader。掌管著整個集群的資源信息&#xff0c;類似于 Yarn 框架中的 ResourceManager&#xff0c;主要功能&#xff1a; 監聽 Worker&#xff0…