第二章:Shell運算與比對

第一節(jié):變量的替換

變量 說明
${#變量} 獲取變量值的長度
${變量#匹配規(guī)則} 從頭開始匹配,最短刪除
${變量##匹配規(guī)則} 從頭開始匹配,最長刪除
${變量%匹配規(guī)則} 從尾開始匹配,最短刪除
${變量%%匹配規(guī)則} 從尾開始匹配,最長刪除
${變量/舊字符串/新字符串} 替換變量內的舊字符串為新字符串,只替換第一個
${變量//舊字符串/新字符串} 替換變量內的舊字符串為新字符串,全部替換
${變量:匹配規(guī)則:匹配規(guī)則} 索引及切片

第二節(jié):整數運算

1.expr (數值之間一定要有空格)#不能進行求方運算

[root@web /scripts/day02]# expr  $a ^ $b        
expr: syntax error

2.$(()) #不支持求方

[root@web /scripts/day02]# echo $(( $a ^ $b ))  
30

3.$[]

[root@web /scripts/day02]# echo $[$a+$b]
30

4.let 計算次數 、自加 、自減

[root@web /scripts/day02]# let a++
[root@web /scripts/day02]# echo $a
11
[root@web /scripts/day02]# let a--
[root@web /scripts/day02]# echo $a
10
[root@web /scripts/day02]# let c=$a+$b
[root@web /scripts/day02]# echo $c
30

第三節(jié):小數運算

1.bc #相當與計算器

[root@web /scripts/day02]# yum install -y bc
[root@web /scripts/day02]# bc  #進入交互式
[root@web /scripts/day02]# echo  $a + $b | bc
30

2.awk計算

[root@web /scripts/day02]# awk  'BEGIN{print $a + $b }'     #不支持外部變量
0
[root@web /scripts/day02]# awk  'BEGIN{print 10 + 20 }'
30
[root@web /scripts/day02]# awk  'BEGIN{print 10 / 20 }'
0.5
[root@web /scripts/day02]# awk  'BEGIN{print 10 ^ 20 }'
100000000000000000000
[root@web /scripts/day02]# awk  'BEGIN{print 10 / 3 }'
3.33333
[root@web /scripts/day02]# awk  'BEGIN{printf "%.2f\n",10 / 3 }'  #保留小數點后2位
3.33
[root@web /scripts/day02]# awk  'BEGIN{printf "%.1f\n",10 / 3 }'  #保留小數點后1位
3.3

#awk內部變量
[root@web /scripts/day02]# awk -va=1 -vb=2 'BEGIN{print a + b }'
3

3.python

[root@web /scripts/day02]# python
echo "print $a + $b " |python
30
[root@web /scripts/day02]# echo "print $a ^ $b " |python
30
[root@web /scripts/day02]# echo "print $a / $b " |python
0
[root@web /scripts/day02]# echo "print $a.0 / $b " |python
0.5
[root@web /scripts/day02]# echo "print $a.0 / 10 " |python
1.0
[root@web /scripts/day02]# echo "print $a.0 / 3 " |python
3.33333333333
[root@web /scripts/day02]# echo "print 10 / 3 " |python
3
[root@web /scripts/day02]# echo "print 10.0 / 3 " |python
3.33333333333

第四節(jié):數值比較

選項 說明 示例
-eq 等于則條件為真 [ 1 -eq 10 ]
-ne 不等于則條件為真 [ 1 -ne 10 ]
-gt 大于則條件為真 [ 1 -gt 10 ]
-lt 小于則條件為真 [ 1 -lt 10 ]
-ge 大于等于則條件為真 [ 1 -ge 10 ]
-le 小于等于則條件為真 [ 1 -le 10 ]

第五節(jié):字符串比對

1.字符串必須使用雙引號

[ "name" = "name" ] 
[ "name" != "name" ] 
[root@web ~]# [ "$USER" = "root" ]
[root@web ~]# echo $USER
root
[root@web ~]# [ "$USER" = "root" ]
[root@web ~]# echo $?
0
[root@web ~]# [ "$USER" = "alex" ]
[root@web ~]# echo $?
1
[root@web ~]# [ "$USER" != "alex" ]
[root@web ~]# echo $?
0

2.-z判斷變量值是否為空,為空則返回值0

[root@web ~]# name=""
[root@web ~]# [ -z $name ]
[root@web ~]# echo $?
0
[root@web ~]# [ ! -z $name ]
[root@web ~]# echo $?
1
[root@web ~]# name="alex"
[root@web ~]# [ -z $name ]
[root@web ~]# echo $?
1
[root@web ~]# [ -n $name ]
[root@web ~]# echo $?
0
-z 案例:
read -p "請輸入名字" name1 
[ -z $name1 ] && echo "請輸入姓名否則不繼續(xù)執(zhí)行" && exit
read -p "請輸入年齡" age1
echo $name1 $age1

第六節(jié):正則比對

1.使用雙中括號里面才能進行正則比對 [[ ]]

[root@web01 scripts]# [ "$USER" = "root" ]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ "$USER" =~ ^r ]]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ "$USER" =~ t$ ]]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ ! "$USER" =~ t$ ]]
[root@web01 scripts]# echo $?
1
案例:判讀傳參的參數是否為整數
方法1
[root@web01 scripts]# age=188
[root@web01 scripts]# 
[root@web01 scripts]# 
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# age=188q
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]] && echo $?
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]] || echo $?
1
[root@web01 scripts]# age=18.8
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]]
[root@web01 scripts]# echo $?
1
方法2
expr $1 + 0 >/dev/null 2>&1
[ $? -ne 0 ] && exit

第七節(jié):多整數比對

1.使用-a /and 并且的意思,兩邊的條件同時成立,返回值則為0

[ 10 -eq 10 -a 100 -ne 100 ]
[root@web01 scripts]# [ 10 -eq 10 -a 100 -ne 100 ]
[root@web01 scripts]# echo $?
1
[root@web01 scripts]# [ 10 -eq 10 -a 100 -eq 100 ]
[root@web01 scripts]# echo $?
0

2.使用-o/or 或者的意思,兩邊的條件一個成立,返回值則為0

[root@web01 scripts]# [ 10 -eq 10 -o 100 -ne 100 ]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ 10 -eq 10 && 100 -ne 100 ]]
[root@web01 scripts]# [[ 10 -eq 10 -a 100 -ne 100 ]]
-bash: 條件表達式中有語法錯誤
-bash: `-a' 附近有語法錯誤
[root@web01 scripts]# [[ 10 -eq 10 && 100 -ne 100 ]]
[root@web01 scripts]# echo $?
1
[root@web01 scripts]# [[ 10 -eq 10 || 100 -ne 100 ]]
[root@web01 scripts]# echo $?
0

第八節(jié):判斷文件或目錄

比較符 含義 示例
-e 如果文件或目錄存在則為真 [ -e file ]
-s 如果文件存在且至少有一個字符則為真 [ -s file ]
-d 如果文件存在且為目錄則為真 [ -d file ]
-f 如果文件存在且為普通文件則為真 [ -f file ]
-r 如果文件存在且可讀則為真 [ -r file ]
-w 如果文件存在且可寫則為真 [ -w file ]
-x 如果文件存在且可執(zhí)行則為真 [ -x file ]
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 概要 64學時 3.5學分 章節(jié)安排 電子商務網站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,828評論 0 3
  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創(chuàng)建并操作數組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,675評論 0 4
  • 運算符是處理數據的基本方法,用來從現(xiàn)有的值得到新的值。JavaScript 提供了多種運算符,本章逐一介紹這些運算...
    徵羽kid閱讀 778評論 0 0
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學習記錄文檔,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 3,137評論 2 9
  • 官網 中文版本 好的網站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,709評論 0 5

友情鏈接更多精彩內容