shell中的字符串操作和數學運算


字符串操作
 
變量賦值:
說明:變量值可以用單引號、雙引號、或者不加任何引號來賦值給變量
變量名="變量值"
變量名='變量值'
變量名=變量值
例如:str="hello world"
注意:=左右不能有空格,否則會報錯command not found
區別:
1.單引號的不能使用變量,$會被認為是個普通字符;字符串間可以有空格
2.雙引號可以使用變量;字符串間可以有空格
3.不加任何引號的只能賦值連續的字符串,中間不能有空格,否則會報命令錯誤
 
字符串連接
直接將兩個字符串寫在一起就可以,可以使用變量可以使用單雙引號。不能用空格或任何分隔符分開
例如:將str變量值連接一個空格然后再連接meitian
str=$str' '"meitian"
 
注意:如果字符串后連接的第一個字符是,:等標點符號或特殊字符(空格和字母,下划線之外的),可以直接連接不需要單雙引號。例如str=$str:metiian
 
字符串長度
expr length "$str"
注意:如果是想返回變量的長度,不能使用單引號
如果想將結果賦值到變量c中,可以使用反單引號來實現c=`expr length "$str"`
 
查找字符串位置
expr index $str chars(expr index 原字符串 要查找的字符串)
例如: expr index $str a
 
注意:
1.字符串的索引位置是從1開始的,區別於其他語言的開始位置0
2.如果有多個字符要進行匹配,會返回索引號最小的值(和要匹配的第一個字符沒關系)
 
 
字符串截斷
expr substr $str POS LENGTH(expr substr 原字符串 要截斷的起始位置 要截斷的長度)
例如:expr substr $str 2 3
 
字符串匹配
expr “$str” : REGEXP (expr 原字符串 : 正則表達式)
expr match “$str” REGEXP(expr match 原字符串 正則表達式)
例如:expr "$str" : ".*\([0-9]\{6\}\).*"或expr match "$str" ".*\([0-9]\{6\}\).*"
 
注意:
1.有變量的元字符串必須加雙引號"$str"
2.使用expr “$str” : REGEXP匹配時,冒號左右必須有空格
3.正則表達式必須用引號括起來
4.如果正則不加()就捕獲不到要匹配的值,只會返回匹配到的字符個數
5.expr中的正則表達式需要對(){}等字符使用\進行轉義
 
數學運算
運算符:
邏輯運算符 數值運算符
& 與 +
| 或 -
< 小於 *
> 大於 /
<= 小於等於 %
>= 大於等於 ()
= 等於  
!= 不等於  
 
數學運算公式:
expr expression
result=$[ expression ]
 
例如計算(1+2)*5用下面兩種方法:
expr \( 1 \+ 2 \) \* 5
result=$[(1+2)*5] 
 
例如對變量a和變量進行大小比較,兩種方法如下:
expr $num1 \< $num2
result=$[$num1<$num2]
 
判斷兩個值是否相等,兩種方法如下:
expr $num1 = $num2
result=$[$num1==$num2]
 
做除法運算,查看結果,只取整了:
[root@bjdhj-118-117 ~]# echo $[10/4]
2
 
說明:
1.使用expr必須對運算符<使用\進行轉義,且數值與運算符中間需要空出空格
2.使用$[]做運算不需要對運算符進行轉義
3.expr判斷是否相同用=,在中括號[]中進行判斷需要用兩個等號==
4.shell中使用/做除法默認只會保留整數位
5.布爾值的結果,比如比較大小或是否相等。1為true,0為false
 
內建計算器bc(bash calculator)
bc能夠識別:
數字(整形和浮點型)
變量
注釋(#或/**/)
表達式
編程語句(如條件判斷:if then)
函數
 
usage: bc [options] [file ...]
  -h  --help         print this usage and exit
  -i  --interactive  force interactive mode
  -l  --mathlib      use the predefined math routines
  -q  --quiet        don't print initial banner
  -s  --standard     non-standard bc constructs are errors
  -w  --warn         warn about non-standard bc constructs
  -v  --version      print version information and exit
 
1.可以直接在shell中輸入bc進入bc工具,然后進行計算
2.bc工具中,scale決定了浮點數的小數位數,默認是0。quit退出bc
3.在腳本中使用bc
     3.1使用管道符 var=`echo "options;expression" |bc`
     例如計算(10/3)*3,保留4位小數
     var=`echo "scale=4;b=10/3;b*3" |bc`
      
     3.2使用內聯的輸入重定向
     var=`bc<<EOF
     opstions
     statements
     expressions
     EOF
     `
     例如計算(5+5)/3*4,保留4位小數
     result=`bc<<EOF
     a=5
     b=5
     scale=4
     (a+b)/3*4 
     EOF
     `
     
 
說明:
1.bc能夠使用外層定義的變量
2.每次使用bc時scale都需要重新定義,scale不會記錄到下次使用bc


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM