shell程式設計(續)

2021-08-16 11:08:19 字數 2246 閱讀 7715

以及 

注:凡是不會的命令都用man 去查:例如 man test、 man echo、

基本資料型別運算:shell中主要是整數運算和浮點書(小數)運算,

整數運算兩種方式:expr命令和 $ 實現

num1=$(expr 10 % 3)  #將計算結果賦值給變數  

num2=`expr 10 % 3` #將計算結果賦值給變數

expr 10 + 3 #輸出13 

expr 10+3 #輸出10+3 運算子前後必須有空格,否則就被當成字串

#!/bin/bash

num1=10

num2=3

echo "num1 + num2=$[$num1 + $num2]" #輸出num1 + num2=13

echo "num1+num2=$[$num1+$num2]"#輸出num1+num2=13

浮點型資料的運算方式;

variable = $(echo "options;expression" | bc)
$()將結果儲存到變數中, 而$是使得整數運算可以按照正常的運算符號來計算,而不必在乘號前加轉義字元,或運算子前後加空格了

| 管道命令水管一頭接入前乙個命令的返回結果, 一頭接入下乙個命令。表示將前乙個命令的執行結果作為後乙個命令的引數輸入。以上,表示將表示式作為bc的引數輸入。

第二部分:

if  else結構:

if command     #如果if後面的command正常執行,即返回的狀態碼為0 時候,則執行then 語句,否則不執行,直接執行fi 即if語句結束

then

commands

elif

commands

fi

test命令只能判斷一下三類條件:

也可以將 if 後面的command 換成test命令 

注:test命令和測試表示式使用標準的數學比較符號來表示字串比較,而用文字**來表 示數值比較。這與其它語言相比都不一樣。

num1 = 100

num2 = 100

if test $num1 -eq $num2

then

echo num1等於num2

else

echo num2不等於num1

fi也可以用雙括號替代上面的test命令,這樣就可以將文字表示替換成數學符號

if (( num1=num2 )) #括號中的兩邊都需要有空格

then

echo num1 等於num2

else

echo num2不等於 num1

使用雙方括號

雙方括號命令提供了針對字串比較的高階特性。它不僅解決了使用test所帶來的一系列毛病,還提供了一些test命令所沒有的高階用法。雙方括號命令的格式如下:

[[ expression ]]

test命令只能判斷一下三類條件:

#!/bin/bash

例如:num = 3

if(( $num == 1 ))

then

echo "num=1"

elif(( $num == 2 ))

then

echo "num=2"

elif(( $num == 3 ))

then

echo "num=3"

fi此時,其實還有一種替代方案,那就是使用case.

case variableinpattern1 | pattern2) commands1;; pattern3) commands2;;

*) default commands;;

esac

例如:case $numin1)

echo "num=1";;

2) echo "num=1";;

3) echo "num=3";;

4) echo "num=4";;

*) echo "defaul";;

esac

shell指令碼 續

工具使用。sort 預設是公升序,降序可用選項 r u 去除重複行 n 以文字中的數字進行排序 t 指定分隔符 uniq u 只顯示不重複的行 c 計數 d 只顯示重複的行 paste 拼接兩個檔案 d 後面跟分隔符,將兩個檔案中的內容用分隔符隔開 s 將每個檔案的內容合併成一行 cut b 以位元...

mysql續行符是什麼 shell續行

linux下命令列的引數可能會很長,特別編譯安裝程式的時候的configure引數。如果直接寫在一行,書寫起來很長,看起來也不美觀還容易漏項。自然就會想到如何將shell的一行命令拆成多行去執行。shell已經為我們準備好了這個續行符 來把一行命令分解成多行 shell命令列下反斜線 有兩種含義 1...

Socket程式設計小結(續)

1.重用已使用的位址 問題描述 在剛剛關閉了測試程式後,再啟動伺服器時提示bind失敗,返回錯誤eaddrinuse。原因分析 套接字 主動關閉一端 在關閉套接字後會停留在time wait狀態一端時間,由於我在同一機器上同時執行客戶端與伺服器,故伺服器在重新啟動執行bind時,可能上次關閉連線還沒...