Shell指令碼學習第五天——算術運算子

來源:互聯網
上載者:User


我希望有個如你一般的人
如山間清爽的風
如古城溫暖的光
從清晨到夜晚
由山野到書房
只要最後是你
就好

                     ——張嘉佳 《從你的全世界路過》 一、chars=` seq -s ” ” 100 ` :從1到100,以空格為分隔字元。

 擷取字串長度的三種方法: echo ${#chars}    #取長度   291 echo $chars|wc -m   #292 echo $(expr length "$chars")
二、查看命令啟動並執行時間:

time for i in $(seq 11111);do ./a.out ;done;

這裡我在程式中加了個延時 1 秒。
三、常見數值運算:(( )) let expr bc $[ ] 1、(( ))運算子:

  用於執行簡單的整數運算(不能是小數或者字串,bc命令可用於小數計算),除了內嵌雙引號無需轉義。

運算子和C語言基本一樣:

執行個體:

兩個 * 就是冪:
((a=1+2**3-4%3)) //內部定義變數
b=$((1+2**3-4%3))

比較:
echo $((3>2)) // 輸出: 1 (真)

等差數列求和: 1/2 n *(a1+an)
echo $(( 100*(1+100)/2 ))

各種(( ))運算的shell指令碼例子:

\#。/bin/basha=6b=2echo "a-b = $ (( $a -  $b ))"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 ))"

命令列傳參:

把 a=6 和 b=2 改成 a=$1 ,b=$2 :

最簡單的四則運算命令:

echo $(($1$2$3))

2、let

let 和(( ))基本一樣 效率比較低,用得比較少

執行個體:

i=2let i=i+8  (( i = i+8 ))輸出:10去掉let變為定義: i=i+8  echo $i輸出:i+8
3、expr:

三、expr (運算子前後必須有空格)

expr 2 + 2   expr 2 \* 2  expr $[2+3]     //中括弧表達方法expr $[2*3]a=3i=`expr $a + 1`

執行個體一:
  判斷檔案的副檔名,如果不匹配返回0 。匹配成功返迴文件名字元長度。

expr "test.txt" : ".*\.pub"

執行個體二:
判斷輸入的數是否為整數
加法正確就是整數($?擷取上一次輸入的傳回值):

    read -p -t 7 "please input:"  a   //-t 7  7秒不輸入就逾時    expr $a + 0  &>/dev/null   //丟棄輸出和錯誤 不在螢幕上報錯    [ $? -eq 0 ] && echo int || echo chars

&> 等價於 >/dev/null 2>&1
這樣的寫法.這條命令的意思是將標準輸出和錯誤輸出全部重新導向到/dev/null中,也就是將產生的所有資訊(出錯,標準輸出)丟棄。

加while tree 迴圈
do

done


保證可以連續判斷不退出。 4、bc運算:

  bc是一種任意精度的計算語言,注意是一種語言,它提供了一些文法結構,比如條件判斷、迴圈等,可以說是很強大的,=在實際中很少找到需要這個用途的場合 。另外一個用途就是用來進行進位轉換。
  上面我們介紹的expr之支援整數運算,但對於浮點運算就無能為力了,而且expr不能進行指數運算,而都有bc這些都不再話下。

參數:

-i 強制互動模式;

-l 使用bc的內建庫,bc裡有一些數學庫,對三角計算等非常實用;

-q 進入bc互動模式時不再輸出版本等多餘的資訊。

特殊變數:

ibase,obase 用於進位轉換。 ibase是輸入的進位,obase是輸出的進位,預設是十進位; scale 小數保留位元,預設保留0位。

首先用命令 bc -l -q 進入互動模式。

$bc -l -qibase=2                    /*指定進位轉換的輸入機製為二進位,輸出預設為是十進位*/1010104^2                           /*指數運算,註:指數不能為浮點數*/164*a(1)                        /*計算π值,a()是個函數:arctan()3.14159265358979323844quit                            /*退出*/

每日編程練習
  給某個使用者不斷髮送訊息:
可以用write usrname;建立串連,然後在鍵盤上控制輸入。

/dev/pts是遠程登陸(telnet,ssh等)後建立的控制台裝置檔案所在的目錄。所以你要Crowdsourced Security Testing道他的pts目錄下的編號。

 while true do        sleep 1        echo "nihao" >/dev/pts/9 done     
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.