1. 程式人生 > >【Shell程式設計】變數數值計算(二)

【Shell程式設計】變數數值計算(二)

OK,數值運算(上)是我看完的一小部分,大概的結束指令碼如下:(回顧~~)

#!/bin/bash
a=$1
b=$2
expr $1 + 1 &>/dev/null
if [ "$?" -ne "0" ]
  then
    echo "請輸入數字"
    exit 1
fi

if [ "$#" -ne "2" ]
  then
    echo "請輸入兩個數字"
        exit 1
fi

echo "a+b=$((a+b))"
echo "a-b=$((a-b))"
echo "a*b=$((a*b))"
echo "a/b=$((a/b))"
echo "a%b=$((a%b))"

1、BC命令的用法

bc是UNIX&Linux下的計算器,因此輸了可以做計算器使用,還可以作為命令列計算工具使用

在我們前面說的數值運算,我們都是以整數的形式來的,但是bc這個就不一樣了 它可以處理小數~~~如下:

是不是感覺很方便的樣子,接下來將BC用在命令列下面,實現運算

[[email protected] ~]# echo 1+2 | bc
3
[[email protected] ~]# echo 1.5+1.5 | bc
3.0
[[email protected] ~]# echo 2*2 | bc
4
[[email protected]
~]# echo 8.5-8.5 | bc 0 [[email protected] ~]#

利用BC配置變數運算

[[email protected] ~]# i=5   #設定變數 i=5
[[email protected] ~]# i=`echo $i+5 | bc`
[[email protected] ~]# echo $i 
10
[[email protected] ~]# 

根據bc具有的特殊性質來來看,如果是小數,那麼它處理是沒有問題,如果是整數的話,那麼就使用(())
 let expr就好了

2、使用awk實現計算

利用awk進行計算的效果很好,尤其是處理小數,很精確如下:

剖析:第一行 echo 7.1 3.23 | 讓awk處理 '{print 列印 $1 為7.1 - $2為3.23}'得出3.87

第二行:echo 4 5 | 讓awk進行處理 '{print  ($1為4那麼在加4等於8)最後*$2 也就是乘5} ' 得出40

$[]運算

[[email protected] ~]# a=5
[[email protected] ~]# a=$[a+10]
[[email protected] ~]# echo $a
15
[[email protected] ~]# echo $[2*3]
6
[[email protected] ~]# echo $[2/3]
0
[[email protected] ~]# 

3、基於Shell變數輸入read命令的運算

read命令

Shell變數除了可以直接賦值或者指令碼傳參外,還可以使用read命令從標準輸入中獲取,read命令為bash內建的,命令。

用法如下:

-p 設定提示資訊

-t 設定輸入的等待時間 如下

剖析:上圖使用了read命令 -t是輸入等到時間為10秒,那麼-p就是提示的資訊,在後面我們加了 o p 也就是說,當用戶輸入內容時 他會把內容賦值給變數 o p;

如下:

例2:

[[email protected] ~]# read -t 10 -p "請您輸入內容:" o p
請您輸入內容:zhangsan lisi
[[email protected] ~]# echo $o
zhangsan
[[email protected] ~]# echo $p
lisi
[[email protected] ~]# 

這大概就是read命令的基本用法了,但是我在看書的時間,發現這一章有很多的if語句和for迴圈例項,已經超出了一些讀者的水平,經過我的一些想法,結合之前的特殊變數加數值計算總結出大致的指令碼內容如下:

#!/bin/bash
read -t 10 -p "請輸入任意兩個數值:" a b

expr $a + 1 &>/dev/null
if [ "$?" -ne "0" ]
  then
    echo /bin/bash..$0 "請輸入兩個數字"
    exit 1
fi
[ ${#a} -le 0 ] && {
  echo "不能為空!!!"
  exit 1
}
[ ${#b} -le 0 ] && {
  echo "不能為空!!!"
  exit 1
}

echo "a+b=$((a+b))"
echo "a-b=$((a-b))"
echo "a/b=$((a/b))"
echo "a*b=$((a*b))"
echo "a**b=$((a**b))"

剖析:

read -t 10 -p "請輸入任意兩個數值:" a b 等待使用者輸入內容,等待時間為10秒,後面的a b是變數,那麼當用戶輸入了兩個數值比如說 1 2 那麼1就賦值給了a 2就賦值給了b

expr $a + 1 &>/dev/null 這個其實前面的文章說過了 使用expr來判斷使用者輸入的是數值還是字串

if [ "$?" -ne "0" ]   如果以上命令輸入的內容不等於0 也就是輸入的不是數值
  then         那麼
    echo /bin/bash..$0 "請輸入兩個數字"    #輸出一條請輸入數字並列印當前指令碼名稱
    exit 1                退出指令碼
fi

[ ${#a} -le 0 ] && {       這裡使用了判斷,我們已經知道a是一個變量了 如果a長度小於0判斷使用者是否輸入的是空格
  echo "不能為空!!!"   如果輸入的是空格那麼就輸出一條 不能為空
  exit 1        #退出指令碼
}

以此類推下面的就是#b了  $#的意思之前也說過了 判斷使用者的傳參個數,最後如果以上的條件全部成立,那麼開始計算。

此指令碼用到了:特殊變數,read命令,expr命令,$#特殊變數,$0特殊變數,if語句,(())數值計算符;

感覺整體上用到前面的內容還是比較多的執行如下:

宣告:以上文章是<<跟著老男孩學Linux運維Shell程式設計實戰>>第五章最後一部分看完的總結;

好了 本次就到這裡,希望讀者快快吸收~~~ 

後續不斷更新 謝謝大家

相關推薦

Shell程式設計變數數值計算

OK,數值運算(上)是我看完的一小部分,大概的結束指令碼如下:(回顧~~) #!/bin/bash a=$1 b=$2 expr $1 + 1 &>/dev/null if [ "$

網路程式設計處理定時事件---利用訊號通知

前言 這篇的誕生也很不容易,感謝Jung Zhang學長和瑞神的橘子。 在上一篇,我們通過Redis對定時事件的處理有了一定的認識,今天我們繼續按照《高效能伺服器程式設計》上邊的思路,用C++來實現一個小demo。 本篇中,我們將利用alarm函式來完成定

Shell程式設計變數詳解

一、什麼是變數 在我們上學時,我們就接觸資料方程式;例如:已知x=1 y=x+1 那麼y等於多少,我們毫不猶豫的會算出來2,但是在shell中x就是變數名,那麼對應的1就是變數值,在這裡的等於號,在shell中稱為賦值! x=1      x(變數名)   =(賦值)   

AI實戰快速掌握TensorFlow計算圖、會話

在前面的文章中,我們已經完成了AI基礎環境的搭建(見文章:Ubuntu + Anaconda + TensorFlow + GPU + PyCharm搭建AI基礎環境),以及初步瞭解了TensorFlow的特點和基本操作(見文章:快速掌握TensorFlow(一)),接下來將繼續學習掌握Tenso

Unity程式設計Unity動畫系統

Unity動畫系統 Unity動畫系統,也稱為“Mecanim”,提供了以下功能: 簡單的工作流程,設定動畫的所有元素,包括物件,角色和屬性。 支援匯入外部建立的動畫片段和使用內建動畫編輯器製作的動畫片段。 人型動畫重新定位,動畫角色的運動控制可以被所有的

筆記篇斜率優化dp SDOI2016征途

不能 最小化 征途 這樣的 string cpp mar logs -s =======傳=送=門======= 搜題目名會搜出很多奇怪的東西... 這個題目似乎有點毒? 比如在bzoj和loj上可以1A的代碼上會在luogu TLE 2個點, 在cogs TLE 10個

小說連載網絡紅顏:美女網絡工程師第一天上班就被燙傷了腳……

網絡 職場 美女 入職 簡介:這是一段描寫網絡工程師生活的故事。故事中沒有英雄,沒有勵誌,也沒有所謂的雞湯文化和狼性文化。有的,或許是一種對技術的執著,對愛情的渴望或者是對名利的一種追求,但又能追求到什麽呢?聲明:本故事所出現的人名,公司名均為虛構,如有雷同恰屬巧合小說將在本站博客和本人微信公

shell程式設計其實真的很簡單

上篇我們學會了如何使用及定義變數。按照尿性,一般接下來就該學基本資料型別的運算了。 沒錯,本篇就仍是這麼俗套的來講講這無聊但又必學的基本資料型別的運算了。 基本資料型別運算 操作符 符號 語義 描述 + 加 10+10,結果為20 - 減 10-3, 結果為7 * 乘 10*2,結果

英語學習新概念英語單詞表

Lesson 1  private ['praivit] a.私人的  conversation [kɔnvə'seiʃən] n.談話  theatre  ['θiətə] n.劇場,戲院  seat [si:t] n.座位 play [plei] n.戲  lo

對話系統天氣對話機器人----- 關於Rasa踩過的那些坑

Rasa 是一個機器人對話開源框架,目前版本還在不斷迭代中。之前做的一個天氣對話機器人就是基於它的,這次我想來記錄一下用Rasa建立對話系統所遇到的坑。 1. 安裝  話說在Linux下rasa的安裝也不是啥難事,但是一定要注意選擇版本,由於其版本迭代過快,很

機器學習決策樹演算法— 程式碼實現

#coding=utf8 ‘’’ Created on 2018年11月4日 @author: xiaofengyang 決策樹演算法:ID3演算法 ‘’’ from sklearn.feature_extraction import DictVectorize

jsp/servletjsp資料互動

本章目標: 掌握application的原理及應用 掌握物件的作用域 掌握cookie的原理及應用 使用jsp訪問資料庫 1、application物件 類似於系統的“全域性變數”,用於同一個伺服器內的所有使用者之間的資料共享,對於整個web伺服器,a

Cloud FoundryCould Foundry學習——核心元件分析

在閱讀的過程中有任何問題,歡迎一起交流 QQ:1494713801 Cloud Foundry核心元件架構圖如下: 主要元件:     Cloud Controller:實質上是VMC和STS互動的伺服器端,它收到指令後發訊息到各模快,管理整個雲的執行,相當於Cl

演算法題目遞迴題目求一個數組的子集

題目:求一個數組的子集 例子: 給出陣列 [a,b,c] 其子集就是 空、a、b、c、ab、ac、bc、abc 思路 這個問題實際上是一個遍歷樹的問題,進行遍歷每一個子元素,再進入下層函式時候記錄上層結果,加入到下層函式中,再儲存起來。由於ab和ba是

Spring系列——Spring Framework簡介

目錄 Core Container Core Container由spring-core,spring-beans,spring-context,spring-context-support,and spring-expression這些模組組成。

Spring MVC深度探險SpringMVC——框架介紹

一、前言       從這篇部落格開始小編就正式向打擊介紹一下SpringMVC這個輕量級的框架,既然是輕量級自然就可以單獨使用了。也許你可能問為什麼要使用Spring MVC,Struts 2.x不

面向程式碼學習 Deep LearningDeep Belief Nets(DBNs)

========================================================================================== 最近一直在看Deep Learning,各類部落格、論文看得不少 但是說實話,這樣做有

深入Spring——Tiny Spring IoCBeanClass

  引言   上篇部落格講到的是Spring裡的基礎Bean,BeanDefinition與BeanFactory三者之間的簡單關係,這裡主要在此基礎 上新增BeanClass的內容,這裡順便提一個

IOS學習CoreText學習筆記設定文字屬性和插入圖片

設定文字和圖片的方法: 繪製文字的步驟是:設定NSAttributedString 或NSMutableAttributedString——> 通過attributedString 生成frameSetter ——> 生成CTFrame——>畫出來設定文字

2018最新iOS面試題

1.VC的生命週期 init:初始化程式 loadView:檢視初始化 viewDidLoad:檢視載入完成 viewWillAppear:檢視即將顯示 viewDidAppear:檢視顯示時呼叫 viewWillDisappear:檢視即將消失